TYPO3中如何获取指定列内mask元素的位置序号并实现计数
关于settings是否不渲染TypoScript的结论
你的判断是正确的:mask元素settings节点下的配置只会作为静态字符串传递给Fluid模板,不会触发TypoScript的渲染逻辑,所以你写的cObject定义、占位符语法都会原样输出字符串。
可渲染动态值的TypoScript路径
除了settings之外,你可以使用renderObj.{maskElement}.variables节点,该节点下的所有子配置都会被作为独立的ContentObject渲染,最终结果会作为顶级变量传入Fluid模板,不需要加settings.前缀调用。
列内mask元素自动编号实现方案
你需求的列内序号不需要自己实现计数器逻辑,TYPO3的CONTENT对象渲染每一项时自带cObj:parentRecordNumber属性,就是当前元素在当前查询结果集中的序号(从1开始计数),刚好匹配你单列层级的计数需求,正确写法如下:
pageteasers < styles.content.get pageteasers.select.where = colPos=2 pageteasers { renderObj.mask_teaser { variables { # 列内序号变量,渲染后直接传入Fluid columnElementIndex = TEXT columnElementIndex.data = cObj:parentRecordNumber } } }
在对应的mask元素Fluid模板中直接调用{columnElementIndex}即可获取当前元素的列内位置序号。
如果需要自定义计数规则(比如设置起始值、特殊步长等),可以用LOAD_REGISTER实现:
pageteasers < styles.content.get pageteasers.select.where = colPos=2 pageteasers { # 渲染列内容前初始化计数器 preRender = LOAD_REGISTER preRender.columnCounter = 0 renderObj.mask_teaser { variables { # 每次渲染元素前更新计数器 updateCounter = LOAD_REGISTER updateCounter.columnCounter.cObject = TEXT updateCounter.columnCounter.cObject.data = register:columnCounter updateCounter.columnCounter.cObject.wrap = |+1 updateCounter.columnCounter.prioriCalc = intval # 输出当前计数器值 columnElementIndex = TEXT columnElementIndex.data = register:columnCounter } } }
内容的提问来源于stack exchange,提问作者Urs
相关产品推荐
相关产品推荐

