Adobe CQ 组件限制子组件

问题描述 投票:0回答:2

我正在尝试为一个简单的手风琴创建一个组件,其中内容块保存在标题下,并且一次只有一个标题可见。我的首选实现使用两个组件,一个组件代表整个手风琴,第二个组件代表单个条目。

这个想法是,内容作者可以从 sidekick 拉入手风琴,然后将一个或多个手风琴项目放入手风琴中,但不允许在此处放置任何其他组件。手风琴项目只能放入手风琴组件中,而不能放入任何其他 parsys 中。

我的问题是,目前可以将其他内容添加到手风琴中,并在手风琴之外添加手风琴项目。

解决这个问题的第一次尝试是:

foobar/components/accordion
foobar/components/accordion/accordion.jsp
foobar/components/accordion/cq:editConfig
foobar/components/accordion/dialog
foobar/components/accordion/accordionitem
foobar/components/accordion/accordionitem/accordionitem.jsp
foobar/components/accordion/accordionitem/cq:editConfig
foobar/components/accordion/accordionitem/dialog

这些是配置文件:

手风琴/.content.xml

<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    xmlns:cq="http://www.day.com/jcr/cq/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"
    cq:isContainer="{Boolean}true"
    jcr:primaryType="cq:Component"
    jcr:title="Accordion"
    sling:resourceSuperType="foundation/components/parbase"
    allowedChildren="[*/accordion/accordionitem]"
    allowedParents="[*/parsys]"
    componentGroup="General"/>

手风琴/_cq_editConfig.xml

<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"
    cq:actions="[-,edit,-,delete]"
    cq:layout="editbar"
    jcr:primaryType="cq:EditConfig">
    <cq:listeners
        jcr:primaryType="cq:EditListenersConfig"
        aftercopy="REFRESH_PAGE"
        afterdelete="REFRESH_PAGE"
        afterinsert="REFRESH_PAGE"/>
</jcr:root>

该对话框是空白的,其存在只是为了让组件出现在 Sidekick 中。

accordion.jsp 仅包含基础 parsys。

手风琴/accordionitem/.content.xml

<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    xmlns:cq="http://www.day.com/jcr/cq/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="cq:Component"
    jcr:title="Accordion Item"
    sling:resourceSuperType="foundation/components/parbase"
    allowedParents="[*/accordion]"
    componentGroup="General"/>

手风琴项对话框包含标题。 editConfig 仅添加工具栏,但没有侦听器。

accordionitem.jsp 输出从对话框中获取的标题并具有 parsys。

我的问题似乎是 parsys 没有使用 Accordion 和 Accordionitem 组件的规则。相反,除非被覆盖,否则它们似乎是从下一个 parsys 继承的。

我可以通过使用页面上的编辑模式并选择适当的组件来正确设置组件,但这会根据模板设置信息,这意味着我需要为每个页面模板执行相同的配置。我想要的是在组件定义中定义它,以便它存在一次。

第一次编写组件后,我发现了这个博客,它描述了完全相同的场景:http://jenikya.com/blog/2012/03/cq5-accordion-component.html

使用我引用的内容,我尝试添加 parsys 扩展以在 Accordion.jsp 中使用。这对代码没有影响,所以即使我的自定义 parsys 也允许添加除手风琴项之外的组件。

任何有关错误或采取其他方法的指导将不胜感激。

adobe aem day-cq
2个回答
0
投票

这里的解决方案是使用 parsys 并构建一个复合组件,以将手风琴内容限制为仅一组组件(如博客条目中所述)。

看看

http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html
,它也将这种技术用于
dam/components/asseteditor/thumbnail
组件。


0
投票

这是 AEM 中非常通用的问题陈述。有多种方法可以处理它,具体取决于您的业务需求以及您的设计将如何映射它。我可以为此建议两种解决方案: 1. 对您的手风琴组件应用模板级别设计限制。这意味着,您删除手风琴组件,然后进入页面的设计模式,并在手风琴部分中选择手风琴项目组件。这只是一次活动。

虽然我会推荐选项#2: 2. 在折叠组件对话框中,要求作者使用多重列表添加折叠项。 - 要添加新项目,只需打开折叠对话框并在多重列表中添加项目,然后在其中输入折叠 ID。 - 要删除项目,请打开对话框并从多列表中删除项目 - 要更改位置,请重新排列多列表中的项目。 根据作者在“手风琴”对话框中输入的多列表项的数量,静态包含“手风琴”项组件并给出作者在多列表中输入的组件 ID。

使用这种方法,您将 - 轻松限制手风琴中的组件。 - 减少 Sidekick 中的一个组件(手风琴项目) - 减少页面上的一个 Parsys(这么多 Parsys 会影响创作性能)

© www.soinside.com 2019 - 2024. All rights reserved.