Typo3: получить sys_file_metadata.title без Repo

У меня есть путь к файлу (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, для которого у меня уже есть путь? Я не хочу для этого сто раз перевернуть весь мир; это что-то настолько простое, что должно быть быстро! Никаких дополнительных классов или файлов просто для глупого запроса не требуется!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого есть встроенные функции. Пожалуйста, ознакомьтесь с этим классом: 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 16.05.2018 14:37

@FuFu: вы даже можете попытаться получить заголовок файла, например $ fileTitle = $ fileObject-> getProperty ('title'); см. мое редактирование.

András Ottó 16.05.2018 15:23

Другие вопросы по теме