在 Magnolia 4.5.3 中使用 cusom ftl 文件继承阶段

Posted

技术标签:

【中文标题】在 Magnolia 4.5.3 中使用 cusom ftl 文件继承阶段【英文标题】:Inherit stage using cusom ftl file in Magnolia 4.5.3 【发布时间】:2012-07-08 15:56:00 【问题描述】:

我正在尝试为阶段编写一个 freemarker 模板,该模板检查是否为此页面定义了一个阶段,如果没有,则尝试从其父页面继承该阶段。 标准继承(就像它是默认的,例如页脚)对我不起作用,因为如果需要,用户仍然应该能够为子页面定义不同的阶段。

我已经有一个在 Magnolia 4.4 中工作的模板,但是由于模板 API 中的各种变化,这在 4.5 中不可用。所以我尝试将它适配到 4.5:我正在使用 cmsfn.inherit() 函数查找父内容,然后访问该内容的阶段,但我一直收到错误(说它没有指定)。

我的模板:

<div id="stage" style="color: white;">
  [#if content??]
    [@cms.component content=content /]
  [#else]
    [#assign inheritedContent = cmsfn.inherit(cmsfn.content(state.mainContent.@handle)) /]
      [#if cmsfn.isEditMode()]
        Inherited content: $inheritedContent
      [/#if]
      [@cms.component content=inheritedContent.stage /]
  [/#if]
</div><!-- end stage -->

错误信息:

The 'content' parameter was passed but not or wrongly specified. The problematic instruction:
----------
==> user-directive cms.component [on line 17, column 17 in ***/pages/home/inheritStage.ftl]

【问题讨论】:

【参考方案1】:

也许我回答得太晚了,但如果其他人发现了这个: 在 magnolia cms 4.5 中继承内容的方式发生了一些变化 - 现在使用原型配置做了一些不同的事情:

在您的作者实例中转到模板工具包->站点配置,然后转到模板->原型->区域->您的区域并添加一个名为“继承”的新内容节点并为其创建节点数据。

节点数据:

components - 这可以是“all”(所有组件都被继承)、“filtered”(继承属性设置为 true 的所有组件都被继承)或“none”(不言自明) 启用 - 不言自明

如果您决定继承“过滤”组件,请不要忘记为相关组件添加继承对话框选项

如果您想查看一个工作示例,请查看“附加”原型。

【讨论】:

是的,我知道这个选项,但是在这种情况下,您无法编辑子站点上的继承内容,这就是我们想要的......我们现在通过手动实现继承来做到这一点区域模型类(Java 中)。不是最好的解决方案,但它有效。但无论如何,我为你的努力给了你 +1... ;-)

以上是关于在 Magnolia 4.5.3 中使用 cusom ftl 文件继承阶段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Magnolia 应用程序中使用 FreeMarker 模板?

在 Magnolia 中使用模型

Magnolia 版本中的隐藏操作是 5.7

在 Magnolia 中使用 MultiValueFieldDefinition 时限制子项的数量

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

版本控制文件错误,在 java 中使用 Magnolia 与 apache 化学和标准 CMIS