You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 Fluid:如何在模板中获取页面已选中的分类

在TYPO3 Fluid中获取页面已选分类的实现方法

TYPO3确实没有默认提供在Fluid中直接获取页面选中分类的方式,下面是两种可靠的实现方案:

方案一:使用官方DataProcessor(推荐)

通过TypoScript配置CategoryProcessor,将页面分类加载到模板变量中,这是官方推荐的标准做法。

  1. 在你的TypoScript Setup中添加如下配置:
page.10.dataProcessing {
    10 = TYPO3\CMS\Frontend\DataProcessing\CategoryProcessor
    10 {
        as = pageCategories
        data = page:categories
    }
}
  • data = page:categories 指定获取当前页面关联的分类
  • as = pageCategories 将分类集合赋值给这个变量,供Fluid模板调用
  1. 在Fluid模板中遍历输出分类:
<f:if condition="{pageCategories}">
    <h3>页面分类</h3>
    <ul>
        <f:for each="{pageCategories}" as="category">
            <li>
                <span class="category-title">{category.title}</span>
                <f:if condition="{category.description}">
                    <p class="category-desc">{category.description}</p>
                </f:if>
            </li>
        </f:for>
    </ul>
</f:if>

除了title和description,还可以访问分类的uid、slug、parent等字段。

方案二:自定义ViewHelper(灵活扩展)

如果需要更灵活的逻辑(比如指定任意页面UID获取分类),可以自定义一个ViewHelper。

  1. 在你的扩展中创建ViewHelper类:
<?php
namespace Vendor\YourExtension\ViewHelpers;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\Page\PageRepository;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

class PageCategoriesViewHelper extends AbstractViewHelper
{
    public function initializeArguments()
    {
        parent::initializeArguments();
        $this->registerArgument('pageUid', 'int', '目标页面UID,默认使用当前页面', false, 0);
    }

    public function render()
    {
        $pageUid = $this->arguments['pageUid'] ?: $GLOBALS['TSFE']->id;
        $pageRepository = GeneralUtility::makeInstance(PageRepository::class);
        $pageData = $pageRepository->getPage($pageUid);
        
        // 返回分类数组,若无分类则返回空数组
        return $pageData['categories'] ?? [];
    }
}
  1. 在Fluid模板中使用该ViewHelper:
{namespace vh=Vendor\YourExtension\ViewHelpers}

<f:if condition="{vh:pageCategories(pageUid: 123)}">
    <ul>
        <f:for each="{vh:pageCategories(pageUid: 123)}" as="category">
            <li>{category.title}</li>
        </f:for>
    </ul>
</f:if>
  • 先通过{namespace}声明ViewHelper的命名空间
  • 可以通过pageUid参数指定任意页面,不填则默认当前页面

注意事项

  • 确保你的TYPO3版本支持CategoryProcessor(TYPO3 8.7及以上版本均支持)
  • 使用自定义ViewHelper时,需确保你的扩展已激活,且命名空间与实际路径一致
  • 分类的前端访问权限需正确配置,避免分类无法被加载

内容的提问来源于stack exchange,提问作者rcheetah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:22:39