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

TYPO3项目:用TypoScript将子页面分类以逗号分隔写入data-display属性

TYPO3 实现子页面分类逗号分隔写入section的data-display属性

问题场景

在TYPO3项目中,需在根页面渲染所有包含内容和分类的子页面。现有TypoScript可正常获取子页面内容及分类,但无法将分类以逗号分隔的形式写入section标签的data-display属性中。

解决方案

核心思路是先将当前页面的分类标题拼接成逗号分隔的字符串,存入临时寄存器变量,再在section的wrap中调用该变量。修改后的完整代码如下:

lib.dynamicContent = COA
lib.dynamicContent {
    10 = CONTENT
    10 {
        table = pages
        select.orderBy = sorting
        select.where = doktype != 199
        as = pageId
        renderObj = COA
        renderObj {
            # 1. 生成当前页面的分类逗号分隔字符串,存入临时寄存器
            5 = CONTENT
            5 {
                table = sys_category
                select {
                    pidInList.field = root,-1
                    selectFields = sys_category.title
                    join = sys_category_record_mm ON sys_category.uid = sys_category_record_mm.uid_local
                    where.data = field:uid
                    where.intval = 1
                    where.wrap = sys_category_record_mm.uid_foreign=|
                }
                renderObj = TEXT
                renderObj {
                    field = title
                    stdWrap.wrap = |,
                }
                # 移除末尾多余的逗号
                stdWrap.trim = 1
                # 将结果存入寄存器变量pageCategories
                stdWrap.setRegister = pageCategories=|
            }

            # 2. 渲染子页面内容(保留原有逻辑)
            10 = CONTENT
            10 {
                table = tt_content
                select {
                    pidInList.field = uid
                    orderBy = sorting
                    where = colPos = 0
                }
            }

            # 3. 原单独渲染分类的代码可按需保留或删除
            # 20 = CONTENT
            # 20 {
            #     table = sys_category
            #     select {
            #         pidInList.field = root,-1
            #         selectFields = sys_category.uid, sys_category.title
            #         join = sys_category_record_mm ON sys_category.uid = sys_category_record_mm.uid_local
            #         where.data = field:uid
            #         where.intval = 1
            #         where.wrap = sys_category_record_mm.uid_foreign=|
            #     }
            #     renderObj = COA
            #     renderObj {
            #         10 = TEXT
            #         10.field = title
            #         10.wrap = <span class="category">|</span>
            #     }
            #     stdWrap {
            #         wrap = <div class="categories">|</div>
            #     }
            # }

            # 4. 渲染section标签,调用寄存器中的分类字符串
            stdWrap {
                if.isLessThan.field = doktype
                if.value = 3
                wrap = <section id="p{field:uid}" data-display="{register:pageCategories}">|</section>
                wrap.insertData = 1
            }
        }
    }
}

关键修改说明

  • 新增5号CONTENT节点:专门处理分类拼接逻辑,每个分类标题后添加逗号,最后通过trim移除末尾冗余逗号,将结果存入register:pageCategories临时变量。
  • 修改section的wrap属性:将原{field:sys_category.title}替换为{register:pageCategories},通过insertData解析寄存器变量的值。
  • 可选清理:若不需要单独渲染分类列表,可注释或删除原20号CONTENT节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:33:20