Получение записей через parentID из CategoryCollection в Typo3

Я использую CategoryCollection для получения записей определенного идентификатора категории, но проблема в том, что он загружает только точную категорию, например, у меня есть parent > child, и я прикрепил идентификатор дочерней категории к записи, и я выбираю дочернюю категорию, затем он показывает мне запись в порядке, но если я выберу parentID, то запись дочерней категории не будет отображаться.

$collection = \TYPO3\CMS\Frontend\Category\Collection\CategoryCollection::load(
        $categoryID,
        true,
        'tx_myextension_table_name',
        'categories'
    );

Есть ли какой-либо встроенный способ получить записи всех дочерних категорий, если я выберу идентификатор родителя из CategoryCollection, или мне нужно написать что-то специальное для этого?


person Community    schedule 23.07.2018    source источник


Ответы (1)


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

  1. Найдите категории, parent которых является вашей категорией
  2. Повторите это рекурсивно для каждой найденной категории, пока вы больше не найдете дочерних элементов для каждой категории.
  3. Выполните пользовательский запрос IN() со списком UID категорий.

Если у вас есть глубокие деревья категорий, список UID категорий можно поместить в пользовательский кеш. В качестве ключа можно использовать UID корневой категории или его хэш. Эти записи кэша должны быть помечены с sys_category. В качестве альтернативы вы можете добавить тег sys_category_<uid> для каждого UID категории в вашем списке. Это гарантирует, что всякий раз, когда что-то меняется в одной из категорий, записи кэша удаляются, и вы можете перестроить список.

person Mathias Brodala    schedule 23.07.2018