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