У меня есть путь к файлу (sys_file.identifier), и я хочу получить название файла (sys_file_metadata.title).
Мне нужно загрузить это в контроллер моего подключаемого модуля, и он просто нужен быстро и грязно.
Я сначала попробовал это:
$queryBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)
->getQueryBuilderForTable('sys_file');
$statement = $queryBuilder ->select('sys_file_metadata.title')->join(
'sys_file', 'sys_file_metadata', 'metadata', $queryBuilder->expr()->eq(
'metadata.file', $queryBuilder->quoteIdentifier('sys_file.uid')
)
)->where($queryBuilder->expr()->like(
'sys_file.identifier',
$queryBuilder->createNamedParameter(
'%' . $queryBuilder->escapeLikeWildcards(
str_replace(PATH_site . 'fileadmin','', $t_filename)
) . '%'
)
)
)->execute();
Это не сработало, потому что я использую Typo3 7.6. Итак, я попробовал вот так:
$queryBuilder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Persistence\\Repository');
$query = $queryBuilder->createQuery();
$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
$query->statement(
'SELECT sys_file_metadata.title FROM sys_file_metadata ' .
'INNER JOIN sys_file ON sys_file_metadata.file = sys_file.uid '.
'WHERE sys_file.identifier "%' .
str_replace(PATH_site . 'fileadmin','', $t_filename) . '%"'
);
$result = $query->execute();
Итак, как я обычно делаю с Typo 3, я просто предполагаю, потому что не смог найти никакой информации в документации.
Как я могу просто загрузить File-Title из File, для которого у меня уже есть путь? Я не хочу для этого сто раз перевернуть весь мир; это что-то настолько простое, что должно быть быстро! Никаких дополнительных классов или файлов просто для глупого запроса не требуется!






Для этого есть встроенные функции. Пожалуйста, ознакомьтесь с этим классом: https://api.typo3.org/typo3cms/7/html/class_t_y_p_o3_1_1_c_m_s_1_1_core_1_1_resource_1_1_resource_factory.html
Есть функция под названием: getFileObjectByStorageAndIdentifier
$fileObject = ResourceFactory::getInstance()
->getFileObjectByStorageAndIdentifier($storageId, $identifier);
Вы можете найти $storageId "быстрый и грязный" в базе данных. (Вероятно, это 1, но, пожалуйста, проверьте это.) $identifier, который вы уже выяснили.
В fileObject у вас есть возможность получить исходное название файла.
$fileTitle = $fileObject->getProperty('title');
Позвольте мне отметить, что это, похоже, проблема с неправильно настроенным плагином или чем-то еще. Есть несколько действительно хороших способов решить проблему выбора изображения с каждым преимуществом, которое поддерживает TYPO3.
(И, пожалуйста, не расстраивайтесь, если это не сработает даже в 10-й раз, мы здесь и постараемся вам помочь. TYPO3 - зрелая система с довольно глубоким и хорошим API и фреймворком расширений Extbase. 99,99% уверен, что есть "официальное" решение таких проблем.)
@FuFu: вы даже можете попытаться получить заголовок файла, например $ fileTitle = $ fileObject-> getProperty ('title'); см. мое редактирование.
Спасибо, вы действительно очень помогли!