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

时间:2015-03-04 09:07:04

标签: repository typo3 extbase fal

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

但我不知道哪种方法可以获取这些数据。我应该如何在我的扩展中创建模型以及如何创建正确的存储库?

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

希望有人能帮助我找到正确的方法,也许还有一个例子。

非常感谢

1 个答案:

答案 0 :(得分:3)

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

  1. 获取所有文件参考。
  2. 浏览它们,检索每个参考文件,并仅保留字段mime_typeimage/开头的文件。
  3. 您可能需要注意两件事:

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

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

      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类型。