模板的Adobe CQ5组件属性

时间:2013-12-05 22:37:27

标签: cq5

这似乎是一个非常基本的问题,但我仍然找不到一个好的解决方案。 我创建了一个使用对话框属性的组件。

如果在模板中也使用此组件,我怎么能避免为每个页面设置此属性?

我已经尝试过:

  1. 我将dialog.xml中的name属性设置为绝对路径 - 组件停止独立工作(放入parsys)。
  2. 将其移至design_dialog.xml - 首先,它在概念上是内容,所以我不喜欢这样的举动,而且它对于独立版本也没有多大意义。
  3. 将资源路径更改为绝对,同时包含在模板中:

    <cq:include path="/content/site/somepage" resourceType="/apps/portal/components/myComponent" />
    

    初看起来几乎就是这样。通过parsys包含的实例有自己的路径,而模板的内容是从单一资源获取的...... 在哪里存储它,使模板代码独立于页面树结构?

  4. 还有其他好办法吗?或至少改善3的方式。?

2 个答案:

答案 0 :(得分:3)

对于原始海报,ACS AEM Commons(http://adobe-consulting-services.github.io/acs-aem-commons/features/shared-component-properties.html)中的共享组件属性现在支持您正在寻找的功能

与您建议的解决方案相比:

  1. 不需要SCP所需的绝对属性路径
  2. 同意这些&#34;内容&#34;属性,所以它们应该存储为&#34;内容&#34;而不是&#34;设计&#34;。 SCP将这些值存储在站点的主页节点下,使其成为任何其他内容的真实内容。
  3. 同意将模板硬编码到单个站点的内容路径是不好的,特别是因为这样就无法在不创建大量模板的情况下实现多站点实现。 SCP没有这个问题,因为每个站点都有自己的主页,用于存储属性。

答案 1 :(得分:2)

如果我理解正确,你有一个可以在两种模式下工作的组件:

  • 它可以通过<cq:include>
  • 静态包含在主页面渲染器中
  • 它也可能被放入一些分析中。

在第一个模式中,组件应该具有所有页面的一些通用配置,而在第二个模式中,它应该按实例单独配置。问题是如何创建这样的通用配置。

我认为您的第三个解决方案非常好,假设您的CQ实例中的所有站点共享组件配置。在某些时候,它可能是太强大的假设,例如。您可能在/content/site-en/content/site-fr/content/site-de下有3个语言分支,并且您希望为每个分支进行单独配置。

我建议对第3个解决方案进行改进:您可以在某个相对路径下创建共享组件,这对于所有页面都是相同的,例如/content/.../configuration/shared-component(其中...可能是{{ 1}},site1site2)。然后获取当前页面路径的前两部分,添加site3后缀并使用/configuration/shared-component来包含以这种方式创建的路径。

您也可以采用不同的方法,并创建由所有静态包含的组件引用的公共配置页面。这些组件可能会尝试自动查找其配置(通过上面的相对路径),或者它们可能有一个引用配置页的路径域。

如果您不喜欢这些选项(因为它们假设某些网站结构或者每个组件需要一些最小配置),请考虑使用HierarchyNodeInheritanceValueMap。它允许您从当前资源获取属性,如果没有这样的属性,它将查看祖先页面上的相同资源。使用此功能,您只需在站点根页面中配置一次组件,并在整个站点上继承配置。