Как получить все объекты файлов FAL, на которые есть ссылки?

Я пытаюсь сделать расширение extbase для TYPO3, чтобы получить все файловые объекты с mimetype image/..., на которые ссылается любой контент, плагин или жидкость в typo3.

Но я не знаю, как лучше всего получить эти данные. Как мне создать модель в моем расширении и как мне создать правильный репозиторий?

Если я создам собственный запрос, я не уверен, как вернуть полный объект FAL, который содержит какие-либо данные (например, метаданные) и т. д.

надеюсь, что кто-то может помочь мне найти правильный путь, и, возможно, у него есть пример или что-то в этом роде.

большое спасибо


person HR123    schedule 04.03.2015    source источник


Ответы (1)


Вы можете сделать это так, подробности внизу:

  1. Получить все ссылки на файлы.
  2. Просмотрите их, извлеките ссылочный файл для каждого из них и сохраните только те, в которых поле mime_type начинается с image/.

Есть две вещи, на которые вам, вероятно, следует обратить внимание:

  1. Поле mime_type должно быть обновлено. Для этого проверьте задачу индексации планировщика FAL.
  2. Представление. В зависимости от количества файлов, которые у вас есть, это может быть намного быстрее сделать с помощью пользовательского оператора SQL, который использует JOIN. Но вы должны делать это только в том случае, если производительность является проблемой.

Как получить все ссылки на файлы:

Во-первых, создайте свой собственный пустой класс ссылки на файл:

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);
    }
}

Ссылочный класс может быть пустым, но он нужен репозиторию для корректной работы. Убедитесь, что вы добавили настройки запроса по умолчанию для игнорирования идентификатора страницы, чтобы вы получали все не скрытые и не удаленные ссылки на файлы, вызывая $fileReferenceRepository->findAll().

Как проверить MIME-тип каждого связанного файла:

Вы можете получить MIME-тип каждой ссылки, позвонив

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

Это должно автоматически извлечь исходный файл из хранилища и прочитать его MIME-тип.

person Jost    schedule 04.03.2015