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

中测试