6

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

这个想法是内容作者可以从 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。

手风琴/手风琴/.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 没有使用手风琴和手风琴组件的规则。相反,它们似乎是从下一个 parsys 继承而来,除非被覆盖。

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

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

正如我所引用的那样,我尝试添加 parsys 的扩展以在accordion.jsp 中使用。这对代码没有影响,所以即使是我的自定义 parsys 也允许添加手风琴项以外的组件。

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

4

2 回答 2

0

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

看看http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html哪个dam/components/asseteditor/thumbnail组件也使用了这种技术。

于 2013-05-23T08:29:21.813 回答
0

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

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

使用这种方法,您将 - 轻松地限制手风琴中的组件。- 减少 sidekick 中的一个组件(手风琴项) - 减少页面上的一个 parsys(这么多 parsys 吃创作性能)

于 2015-09-16T05:59:34.673 回答