TYPO3: tx_news получает sys_category sys_categories для пользовательского заголовка в списке BE - PullRequest
0 голосов
/ 30 мая 2018

Я расширил 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 ]

0 голосов
/ 13 июня 2018

Можно выполнить запрос в мм для разрешения назначенного заголовка категории:

<?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

0 голосов
/ 31 мая 2018

Возможно, вам лучше всего выполнить пользовательский запрос к базе данных в собственном репозитории, где вы запрашиваете каждую категорию применения для получения заголовка.

Возможно, вы можете использовать репозиторий tx_news, чтобы избежать избыточностикод, но вы обязательно должны включить некоторый код / ​​функцию, которая создает экземпляр запроса - везде, где запрос адресован.

...