我正在使用Magnolia 5.6 Enterprise Pro CMS,并且具有一个具有一个可用组件的类型列表区域:
areas:
steps:
renderType: freemarker
availableComponents:
step:
id: obi-module:components/step
因此,我可以将N个相同类型的组件添加到 steps 区域。
问题:现在,我想在 step 组件的模板脚本中显示组件索引,但是我不知道该如何实现。
在外部组件的模板脚本中,我可以执行以下操作:
[#assign stepList=cmsfn.children(content.steps) ]
...
<p>Number of steps: ${stepList?size!'#'}</p>
...
[#list stepList as component]
[@cms.component content=component contextAttributes={'index':component?counter} /]
[/#list]
,并且在 step 组件的模板脚本中,我可以使用 index 变量:
${(ctx.index)!'#'}
这显示了所需的从1开始的索引号,但是现在在Magnolia中,我无法再编辑组件,因为我没有 step 组件的典型绿色Magnolia编辑器栏。
当我这样放置模板脚本时:
[#assign stepList=cmsfn.children(content.steps) ]
...
<p>Number of steps: ${stepList?size!'#'}</p>
...
[@cms.area name="steps" /]
我可以编辑组件,但是我不知道如何获取(列表)索引。
有人知道如何实现这一目标吗?
答案 0 :(得分:0)
这是一个名为_index
的内置免费标记...您可以尝试以下方法:
[#list components as component ]
Component Number: '${component_index + 1!}'
[@cms.component content=component /]
[/#list]
编辑:如果不起作用,请尝试使用component?index
而不是component_index
... ...仅取决于木兰随附的freemarker版本才能确定所使用的木兰版本。
答案 1 :(得分:0)
我的缺点-我正在从(外部)步骤组件的脚本中遍历步骤组件,但必须在区域脚本中进行操作。因此,我将步骤组件定义更改为:
areas:
steps:
renderType: freemarker
templateScript: /my-module/components/steps-area.ftl
availableComponents:
step:
id: my-module:components/step
区域模板脚本(steps-area.ftl)看起来像这样:
[#list components as component]
[@cms.component content=component contextAttributes={'index':component?counter} /]
[/#list]