通过parentID从Typo3中的CategoryCollection获取记录

通过parentID从Typo3中的CategoryCollection获取记录,typo3,typo3-7.6.x,typo3-8.x,typo3-extensions,Typo3,Typo3 7.6.x,Typo3 8.x,Typo3 Extensions,我使用CategoryCollection获取特定类别ID的记录,但问题是它只加载确切的类别,例如我有parent>child,我将子类别ID附加到记录,然后我选择child category,它会显示记录,但如果我选择parentID,然后它不显示子类别记录 $collection = \TYPO3\CMS\Frontend\Category\Collection\CategoryCollection::load( $categoryID, true,

我使用
CategoryCollection
获取特定类别ID的记录,但问题是它只加载确切的类别,例如我有
parent>child
,我将子类别ID附加到记录,然后我选择child category,它会显示记录,但如果我选择parentID,然后它不显示子类别记录

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

如果我从
CategoryCollection
中选择父ID,是否有任何内置方法可以获取所有子类别的记录?或者我必须为此编写自定义内容吗?

不幸的是,对于这样复杂的选择,没有内置的解决方案。您确实需要编写自己的逻辑,其工作原理如下:

  • 查找其父级为您的类别的类别
  • 对找到的每个类别递归重复此操作,直到再也找不到每个类别的任何子类别
  • 使用UID类别列表在()中执行自定义
    查询
  • 如果您有较深的类别树,那么类别UID列表可以放在一个目录中。您可以使用根类别UID或其哈希作为密钥。这些缓存项应为
    sys\u类别
    。或者,您可以为列表中的每个类别UID添加一个
    sys\u category\
    标记。这可以确保每当其中一个类别发生更改时,缓存项都会被删除,并且您可以重新生成列表