0

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

但我不知道哪种方法是获取这些数据的最佳方式。我应该如何在我的扩展中创建一个模型,我应该如何创建正确的存储库?

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

希望有人可以帮助我找到正确的方法,也许有一个例子或其他东西。

多谢

4

1 回答 1

3

你可以这样做,细节在底部:

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

您可能需要注意两件事:

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

如何获取所有文件引用:

首先,构建自己的空文件引用类:

namespace Vendor/Extkey/Domain/Model;

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

确保在您的 TypoScript 中将其配置为序列化到表中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);
    }
}

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

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

您可以通过调用获取每个引用的 MIME 类型

$fileReference->getOriginalResource()->getMimeType()

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

于 2015-03-04T14:47:52.263 回答