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
相关产品推荐
相关产品推荐

