2013-05-21 46 views
6

我正在尝试为简单的手风琴创建一个组件,其中内容块位于标题下,一次只能显示一个标题。我的首选实现使用两个组件,一个用于表示整个手风琴,另一个用于单个条目。Adob​​e CQ Components限制儿童组件

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

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

要解决的第一次尝试,这是:

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> 

该对话框是空白的,只存在于组件将出现在伙伴中。

accordion.jsp只包含基础解析。

手风琴/ 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没有使用手风琴和accordionitem组件的规则。相反,他们似乎从下一个解析继承,而不是覆盖。

我可以在页面上使用编辑模式,然后选择相应的组件设置正确的成分,但是,设置对模板的信息,这意味着我需要执行相同的配置为每个页面模板。我想要的是让它在组件定义中定义,以便它存在一次。

先写我发现这个博客,描述如出一辙之情况组件后:http://jenikya.com/blog/2012/03/cq5-accordion-component.html

使用,作为我参考,我尝试添加parsys的延伸,而不是accordion.jsp内使用。这对代码没有任何影响,所以即使我的自定义parsys也允许添加手风琴项目以外的组件。

任何指导,在任什么是采取将不胜感激错误或其他方法。

回答

0

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

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

0

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

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

使用这种方法,您将 - 以手风琴轻松限制组件。 - 在伙伴中减少一个组件(手风琴项目) - 减少页面上的一个parsys(许多parsys吃掉创作性能)

+0

您是否可以详细了解如何在获取组件后来自您的多字段的值? –