我正在尝试为一个简单的手风琴创建一个组件,其中内容块保存在标题下,一次只能看到一个标题。我的首选实现使用两个组件,一个代表整个手风琴,第二个组件代表单个条目。
这个想法是内容作者可以从 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 也允许添加手风琴项以外的组件。
任何关于错误或其他方法的指导将不胜感激。