如何获取所有引用的 FAL 文件对象?

How to get all FAL File Objects which are referenced?

我正在尝试为 TYPO3 制作一个 extbase 扩展,以获取具有 mimetype image/... 的所有文件对象,这些文件对象被 typo3 中的任何内容、插件或流体引用。

但我不知道获取这些数据的最佳方式是什么。我应该如何在我的扩展中创建模型以及我应该如何创建正确的存储库?

如果我创建自定义查询,我不确定如何return 包含任何数据(如元数据)等的完整 FAL 对象

希望有人能帮我找到正确的方法,也许有例子什么的。

非常感谢

你可以这样做,详情在底部:

  1. 获取所有文件引用。
  2. 遍历它们,为它们中的每一个检索引用文件,并仅保留字段 mime_typeimage/ 开头的文件。

您可能需要注意两件事:

  1. 字段 mime_type 需要是最新的。检查 FAL 调度程序索引任务。
  2. 性能。根据您拥有的文件数量,使用使用 JOIN 的自定义 SQL 语句执行此操作可能会快得多。但是你应该只在性能有问题时才这样做。

如何获取所有文件引用:

首先,建立自己的空文件引用class:

namespace Vendor/Extkey/Domain/Model;

class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference {}

确保在您的 TypoScript 中将其配置为序列化为 table sys_file_reference:

config.tx_extbase.persistence {
    classes {
        Vendor\Extkey\Domain\Model\FileReference {
            mapping {
                tableName = sys_file_reference
            }
        }
    }
}

为引用添加存储库:

namespace Vendor/Extkey/Domain/Repository;

class FileReferenceRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
    public function initializeObject() {
        /** @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface */
        $defaultQuerySettings = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface');

        $defaultQuerySettings->setRespectStoragePage(FALSE);
        $this->setDefaultQuerySettings($defaultQuerySettings);
    }
}

引用 class 可以为空,但存储库需要它存在才能正常工作。确保添加默认查询设置以忽略页面 ID,以便通过调用 $fileReferenceRepository->findAll().

获取所有非隐藏和未删除的文件引用

如何检查每个引用文件的 MIME 类型:

您可以通过调用

获取每个引用的 MIME 类型
$fileReference->getOriginalResource()->getMimeType()

这应该会自动从存储中获取原始文件并读取其 MIME 类型。