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

Render component index in Magnolia template script

我正在使用 Magnolia 5.6 Enterprise Pro CMS,并且我有一个包含一个可用组件的类型列表区域:

areas:
  steps:
    renderType: freemarker
    availableComponents:
      step:
        id: obi-module:components/step

所以我可以在steps区域添加N个相同类型的组件。

问题:现在我想在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 中我无法再编辑组件,因为我没有为 步骤[=38= 获得典型的绿色 Magnolia 编辑器栏] 组件。

当我这样放置模板脚本时:

[#assign stepList=cmsfn.children(content.steps) ]

...

<p>Number of steps: ${stepList?size!'#'}</p>

...

[@cms.area name="steps" /]

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

有人知道如何实现吗?

这是一个名为 _index 的 freemarker 内置...你可以试试这个:

    [#list components as component ]
        Component Number: '${component_index + 1!}'
        [@cms.component content=component /]
    [/#list]

编辑:如果这不起作用,请尝试 component?index 而不是 component_index ... 仅取决于您使用的 magnolia 版本随 magnolia 一起提供的 freemarker 版本。

我的坏处 - 我正在从(外部)步骤组件的脚本中迭代步骤组件,但我必须在区域脚本中进行。所以我将步骤组件定义更改为:

areas:
  steps:
    renderType: freemarker
    templateScript: /my-module/components/steps-area.ftl
    availableComponents:
      step:
        id: my-module:components/step

区域模板脚本(步骤-area.ftl)如下所示:

[#list components as component]
    [@cms.component content=component contextAttributes={'index':component?counter} /]
[/#list]