Adobe CQ5全局组件

Adobe CQ5全局组件,adobe,aem,Adobe,Aem,一些背景:我正在尝试为一个响应性强的网站在左侧创建一个滑动导航组件。我想在菜单中的所有项目旁边包括一个使用design_对话框配置的图像 我正在运行CQ5.6.1 我遇到的问题是,我目前有“主页”、“内容页面”和“联系人页面”模板。所有3个组件都是使用它们相似的命名组件呈现的,这些组件是从基本“页面”组件派生的 在这个页面组件中,我有一个body.jsp,其中包括我的navpanel组件。一切正常,但当在主页上设置导航面板中的图像时,它们不会显示在其他两个页面上 我知道这是因为navpanel的

一些背景:我正在尝试为一个响应性强的网站在左侧创建一个滑动导航组件。我想在菜单中的所有项目旁边包括一个使用design_对话框配置的图像

我正在运行CQ5.6.1

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

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

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

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

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


是否有一种编程方式来更改此值?这听起来像是因为
cq:include路径
的行为不符合预期吗?

cq:include没有作为组件加载到设计路径中(这听起来像是您正在尝试的)

cq:include被设置为包含静态脚本(使用script属性) e、 g:

或组件(使用path和resourceType属性) e、 g:

currentStyle仍将为当前模板的设计路径获取此组件的样式

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


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

有点晚了,但想分享我们如何使组件成为全局组件(可编写组件)

使用绝对路径根本不起作用(嗯,几乎不起作用)。对于共享全局组件的多个页面,我们采用以下方式处理路径属性:

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

  • 使它们都从默认页面组件扩展
  • 只创建一个页面(称之为myapp/components/pages/A)来扩展页面,并具有到要包含的共享组件的相对路径(即:
  • 使其余页面扩展页面,并使用共享组件的绝对路径(即:

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

    根据CQ的CQ api:include:
    当前请求处理中要包含的资源对象的路径。如果此路径是相对路径,则会将其附加到当前资源的路径,该资源的脚本包含给定资源。
    这使我相信,如果指定绝对路径,我可以指定资源对象的位置。为什么这实际上不起作用?我也完全相信一个全局可访问的对象应该是可行的,并且需要更多关于如何实现它的信息,因为“路径”似乎没有按预期工作。您提到绝对路径是一个选项是非常正确的,但就我所知,这不适用于设计路径。对于实际的资源,它应该可以正常工作。例如:将工作。