0

一些背景知识:我正在尝试在左侧为响应式网站创建一个滑动导航组件。我想在菜单中的所有项目旁边包含一个使用 design_dialog 配置的图像。

我正在运行 CQ 5.6.1

我遇到的问题是我目前有“主页”、“内容页面”和“联系人页面”模板。所有 3 个都使用它们的同名组件进行渲染,这些组件是从基本“页面”组件派生的。

在这个页面组件中,我有一个包含我的导航面板组件的 body.jsp。一切正常,但是在主页上的导航面板中设置图像时,它们不会显示在其他两个上。

我知道这是因为导航面板的设计路径是:/etc/designs/testsite/jcr:content/homepage/navpanel

body.jsp中,当包含导航面板时,我尝试将 cq:include 中的路径变量设置为绝对路径(即/etc/designs/testsite/jcr:content/navpanel),因为根据 API,它应该采用绝对路径并且根本不修改它。相反,在输出时currentStyle.getPath(),它会继续显示第一个路径(包括主页)。

为了实现我的目标,我需要能够将此组件的设计路径配置为“全局”级别,而不是嵌套在模板设计中。

有没有改变这个值的编程方式?听起来是否存在与cq:include path预期不符的错误?

4

2 回答 2

0

cq:include 没有作为组件加载到设计路径中(这听起来像你想要做的)。

cq:include 包含一个静态脚本(使用 script 属性),例如:

或一个组件(使用 path 和 resourceType 属性),例如:

currentStyle 仍然会为当前模板的 designPath 获取该组件的样式。

例如,当您将徽标(设计模式)切换到其他内容时,您会在 geometrixx 演示站点上注意到同样的事情,然后转到另一个模板。旧徽标仍将出现在使用其他模板的页面上。这就是为什么建议在设计模式下尽可能少做,除非您打算将您的操作限制在您处于设计模式的模板中。例如,限制可以在特定模板上使用的组件是设计模式的一个很好的用途。

制作一个使用相同数据作为源的“全局”组件并不是那么简单。在您的情况下,您可以尝试通过将图像保存/加载到/从存储库中的公共位置来解决此问题。也许您甚至可以实现一项服务来使这个“公共位置”可配置。或者您可以更进一步,让服务加载/保存图像。

于 2013-08-02T14:54:37.697 回答
0

有点晚了,但想分享我们如何使组件全球化(可创作组件)。

使用绝对路径根本不起作用(嗯,几乎)。为了让多个页面共享一个全局组件,我们以这种方式处理路径属性:

假设我们有 10 个页面共享一个菜单组件:

  1. 使它们都从默认页面组件扩展。
  2. 只制作一个页面(称为 myapp/components/pages/A)来扩展页面并具有到要包含的共享组件的相对路径(即:)<cq:include path="mysharedcomponent" resourceType="myapp/components/mysharedcomponent" />
  3. 使剩余页面扩展页面并使用共享组件的绝对路径(即:)<cq:include path="/myapp/A/jcr:content/mysharedcomponent" resourceType="myapp/components/mysharedcomponent" />

此方法可用于在多个模板页面之间共享 CQ 下的全局组件,并且在 EDIT 模式下也支持拖放功能:将任何子组件拖放到共享组件中,并使该组件在所有页面上可用。

于 2017-01-02T18:17:50.310 回答