Как получить и отфильтровать все упомянутые файлы FAL с помощью extbase

Я работаю над расширением, которое отображает все файлы, на которые есть ссылки в sys_file_reference.
Существует также возможность классифицировать и фильтровать каждый файл на основе нового пользовательского свойства в sys_file_metadata.

Каков наилучший способ получить и отфильтровать все указанные файлы как TYPO3\CMS\Core\Resource\File модель?

С помощью TYPO3\CMS\Core\Resource\FileRepository я смог получить File модели, включая метаданные.
Но хранилище ожидает всегда uid чтобы получить File, К настоящему времени я извлекаю все ссылочные файлы из своего хранилища и передаю их в findFileReferenceByUid() метод.

class DocumentRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {

/**
* Disables pid constraint
*
* @return void
*/
public function initializeObject() {
$querySettings = $this->objectManager->create('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$this->setDefaultQuerySettings($querySettings);
}

/**
* Finds all referenced documents returning them as File modules
*
* @return void
*/
public function findAllReferenced() {
$fileRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\FileRepository');
$query = $this->createQuery();
$documents = $query->execute();
$references = array();

foreach ($documents as $document) {
$references[] = $fileRepository->findFileReferenceByUid($document->getUid());
}

return $references;
}
}

Есть ли более простой способ и как я могу реализовать фильтр?

Обновить

Пока я обхожу extbase и использую соединение с базой данных напрямую. TYPO3 делает это внутренне много.

/**
* Finds all referenced documents returning them as File models
*
* @return array
*/
public function findAllReferenced() {

$rows = $this->getDatabaseConnection()->exec_SELECTgetRows(
'sys_file AS sf
LEFT JOIN tt_content AS ttc ON ttc.header_link=CONCAT("file:", sf.uid)
LEFT JOIN sys_file_reference AS ref ON sf.uid=ref.uid_local
LEFT JOIN sys_file_metadata AS meta ON sf.uid=meta.file',
'((ttc.uid IS NOT NULL AND ttc.hidden = 0 AND ttc.deleted = 0) OR (ref.uid IS NOT NULL AND ref.hidden = 0 AND ref.deleted = 0))',
'sf.uid'
);

$documents = array();

if (!empty($rows)) {
foreach ($rows as $row) {
$documents[] = $this->createDomainObject($row);
}
}
return $documents;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]