TYPO3: tx_news получает sys_category sys_categories для пользовательского заголовка в списке BE
Я расширил tx_news для проведения ряда курсов. Существуют курсы, которые рассматривают один и тот же предмет для разных аргументов (я выбираю sys_categories). Это означает, что их заголовок идентичен, теперь я пытаюсь сделать список лучше для редактора, включив выбранную категорию в список...
Подразумеваемое название в Configuration/TCA/Overrides/tx_news_domain_model_news.php
:
$GLOBALS['TCA']['tx_news_domain_model_news']['ctrl']['label_userFunc'] = 'Vendor\\NewsExt\\Userfuncs\\Tca->customTitle';
Пользовательская функция до сих пор Classes/Userfuncs/Tca.php
:
<?php
namespace Vendor\NewsExt\Userfuncs;
use GeorgRinger\News\Domain\Model\News;
/**
* Class Tca
*/
class Tca
{
/**
* Loads a custom title for the news list view
*
* @return void
*/
public function customTitle(
&$parameters,
$parentObject
){
$record = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord($parameters['table'], $parameters['row']['uid']);
$newTitle = $record['title'];
if($record['is_course']){
$newTitle .= ' (' . $record['categories'] . ')' ;
}
$parameters['title'] = $newTitle;
}
}
который, очевидно, дает количество выбранных категорий... Я не включил ни одну из своих попыток, потому что они ни к чему не приводят...
2 ответа
Вы можете сделать запрос mm для разрешения назначенного заголовка категории:
<?php
namespace Vendor\NewsExt\Userfuncs;
use GeorgRinger\News\Domain\Model\News;
/**
* Class Tca
*/
class Tca
{
/**
* Loads a custom title for the news list view
*
* @return void
*/
public function customTitle(&$parameters, $parentObject)
{
# fetch all categories assigned to this news
$result = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
'sys_category.uid, sys_category.title',
'sys_category',
'sys_category_record_mm',
$parameters['table'],
'AND sys_category_record_mm.tablenames = "' . $parameters['table'] . '" ' .
'AND sys_category_record_mm.fieldname = "categories" ' .
'AND sys_category_record_mm.uid_foreign = ' . $parameters['row']['uid']
);
# walk the categories an get the title of them
$categoriesLabels = [];
foreach ($result->fetch_all(MYSQLI_ASSOC) as $category) {
$categoriesLabels[] = $category['title'];
}
# if at least one category put them into the title
if (!empty(array_filter($categoriesLabels))) {
$record = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord($parameters['table'], $parameters['row']['uid']);
$parameters['title'] = $record['title'] . ' ('. implode(', ', $categoriesLabels) .')';
}
}
}
Примечание: этот код был протестирован в TYPO3 8.7.12
Возможно, вам лучше всего выполнить собственный запрос к базе данных в собственном репозитории, где вы запрашиваете каждую категорию применения, чтобы получить заголовок.
Вполне возможно, что вы можете использовать репозиторий tx_news для избежания избыточного кода, но вы обязательно должны включить некоторый код / функцию, которая создает экземпляр запроса - куда бы ни обращался запрос.