Adob​​e CQ5全球组件

Adob​​e CQ5全球组件

问题描述:

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

我正在CQ 5.6.1

我快到的问题,是我目前有“主页”,“contentpage”和“contactpage”模板。所有3个都使用它们的相似命名组件进行渲染,这些组件是从基本“页面”组件中派生的。

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

我知道这样做的原因是因为navpanel设计的路径是:/etc/designs/testsite/jcr:content/homepage/navpanel

body.jsp,当包括navpanel,我尝试设置PATH变量在CQ:包括为绝对路径(即/etc/designs/testsite/jcr:content/navpanel)因为根据API,它应该采取绝对路径,而不是完全修改它。相反,当输出currentStyle.getPath()时,它会继续显示第一个路径(其中包含主页)。

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

是否有改变此值的程序化方法?听起来好像有一个错误,cq:include path不符合预期的行为?

cq:include并没有作为一个组件载入设计路径(这听起来像你正在尝试做的)。

CQ:包括被要么由包括静态脚本(使用脚本属性) 例如:

或组件(使用路径和resourceType为属性) 例如:

currentStyle仍将取该组件的当前模板的designPath的样式。

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

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

+0

根据cq的CQ api:include: '资源对象被包含在当前请求处理中的路径。如果这个路径是相对的,它会被追加到当前脚本包含给定资源的资源的路径上。' 这使我相信,如果我指定绝对路径,我可以指定资源对象的位置。为什么这不实际工作? 我也完全相信全球可访问的对象应该是可行的,并且需要更多关于如何做到这一点的信息,因为'路径'似乎没有按预期工作。 –

+0

你要非常正确地提及绝对路径是一种选择,但据我所知,这对设计路径不起作用。对于一个实际的资源,它应该工作正常。例如:会起作用。 – 3xil3

有点晚,但想分享我们如何制作组件全局(可授权组件)。

使用绝对路径根本不起作用(好,差不多)。对于多页共享全球组件,我们的工作路径特性是这样的:

比方说,我们有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全球组件的多个模板页面之间共享,并在编辑模式下工作时也确实支持拖放&拖放功能:任意拖动子成共享组件,并获得所有可用的组件页面。