我们如何在CQ5中定义全局属性

时间:2014-01-10 19:45:59

标签: cq5 aem

我的要求是拥有一个具有author作为属性的全局页眉和页脚。 因此,如果我们更新一个页面上的属性,它应该反映在所有页面上。

在CQ5中实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

如果您的所有网页都位于层次结构下,则可以使用继承的段落系统(iparsys)。这来自文档的an old version,但仍然是一个很好的介绍:

  

继承的段落系统是一个也允许的段落系统   您要从父级继承创建的段落。你添加   iparsys的段落,例如,/content/geometrixx/en/products   结果,所有产品的子页面也有iparsys   使用相同的名称从父级继承创建的段落。上   每个级别,您可以添加更多段落,然后继承   儿童页面。您还可以在a处取消段落继承   随时都有水平。

虽然不完全是您在原始帖子中描述的内容(在任何地方编辑),但它允许您编辑内容一次(在父页面上)并在任何地方继承更改。

答案 1 :(得分:2)

ACS AEM Commons现在支持此功能而不使用iparsys - 共享组件属性(http://adobe-consulting-services.github.io/acs-aem-commons/features/shared-component-properties.html

使用共享和/或全局属性配置菜单,您只需将其直接模板到所有页面上(无需iparsys)。然后,您可以从网站上的任何页面编辑页眉/页脚,它将在所有页面上更新。

与使用设计对话框不同,共享组件属性支持标准内容激活和国际化(存储在主页下方的值)以及您希望从内容中获得的任何其他内容。

答案 2 :(得分:0)

传统上,您可以创建组件并将对话框交换出设计对话框。基本上,您将组件对话框重命名为design_dialog。

这样做是将对此对象所做的更改保存到等等下的设计路径。您可以通过转到顶级父级并设置designPath属性来设置站点的设计路径。

因此节点结构可能类似于

parentNode    - @prop designPath =“designs / myapplication”   childNode1   childNode2   等...

在parentNode或其子节点上使用design_dialog的任何组件都将从designPath获取其信息。如果您没有设置设计路径,那么信息会保存在etc / designs / default下(或者默认值,不确定,从我的头顶开始)。

有一些替代方案:

我们的团队所做的是在我们的siteHeader组件中,我们使用http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/commons/inherit/InheritanceValueMap.html(继承值映射)而不是常规值映射。继承的值映射将遍历树以查找其父项中的项。这是学习如何使用valuemap而不仅仅是默认属性对象的一个​​很好的资源:

http://experiencedelivers.adobe.com/cemblog/en/experiencedelivers/2013/02/valuemap-and-his-friend.html

对于较大的网站而言,这确实变得复杂,并且您必须进行大量自定义以使系统按您希望的方式工作,但如果您不想为每个人手动设置designPath,则可以选择您的作者创建的新网站。

或者,如果您喜欢使用designPaths和design_dialogs的想法,您可以始终挂钩页面创建工作流程并让页面组件在创建时添加一个designPath属性(这说起来容易做起来容易得多)。 / p>

希望有所帮助