TYPO3: tx_news 获取 sys_category sys_categories 用于 BE 列表中的自定义标题
TYPO3: tx_news get sys_category sys_categories for custom title in BE list
我延长 tx_news 举办了一些课程。有些课程针对不同的论点处理相同的主题(我 select 为 sys_categories)。这意味着他们的标题是相同的,现在我试图通过在列表中包含 selected 类别来使列表对编辑器更好...
在 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;
}
}
这显然给出了 selected 类别的数量......我没有包括我的任何尝试,因为它们没有任何结果......
可能您最多只能在自己的存储库中自定义 database-query,您可以在其中请求每个应用类别以获取标题。
您可以使用 tx_news 的存储库来避免冗余代码,但您肯定必须包含一些实例化请求的代码/函数 - 无论请求被发送到哪里。
您可以进行 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 举办了一些课程。有些课程针对不同的论点处理相同的主题(我 select 为 sys_categories)。这意味着他们的标题是相同的,现在我试图通过在列表中包含 selected 类别来使列表对编辑器更好...
在 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;
}
}
这显然给出了 selected 类别的数量......我没有包括我的任何尝试,因为它们没有任何结果......
可能您最多只能在自己的存储库中自定义 database-query,您可以在其中请求每个应用类别以获取标题。
您可以使用 tx_news 的存储库来避免冗余代码,但您肯定必须包含一些实例化请求的代码/函数 - 无论请求被发送到哪里。
您可以进行 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
中测试