Magnolia模板脚本中的渲染组件索引

时间:2018-06-27 18:14:05

标签: java freemarker magnolia

我正在使用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" /]

我可以编辑组件,但是我不知道如何获取(列表)索引。

有人知道如何实现这一目标吗?

2 个答案:

答案 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]