我正在尝试为简单的手风琴创建一个组件,其中内容块保存在标题下,并且一次只能看到一个标题.我的首选实现使用两个组件,一个用于表示整个手风琴,另一个用于单个条目.
这个想法是内容作者可以从手杖中拉出手风琴,然后将一个或多个手风琴项放入手风琴中,但不允许任何其他组件掉落在这里.手风琴项目应该只能放入手风琴组件而不能放入任何其他的解析器中.
我的问题是,目前可以在手风琴中添加其他内容,并在手风琴之外添加手风琴项目.
解决这个问题的第一个尝试是:
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
Run Code Online (Sandbox Code Playgroud)
这些配置文件是:
手风琴/ .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"/>
Run Code Online (Sandbox Code Playgroud)
手风琴/ _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>
Run Code Online (Sandbox Code Playgroud)
该对话框为空白且仅存在,以便组件将出现在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"/>
Run Code Online (Sandbox Code Playgroud)
手风琴项目对话框包含标题.editConfig只是添加工具栏,但没有监听器.
accordionitem.jsp输出从对话框中获取的标题并具有一个parsys.
我的问题似乎是parsys没有使用手风琴和accordionitem组件的规则.相反,他们似乎继承了下一个解析,除非被覆盖.
我可以通过在页面上使用编辑模式并选择适当的组件来正确设置组件,但是这会根据模板设置信息,这意味着我需要为每个页面模板执行相同的配置.我想要的是在组件定义中定义它,以便它存在一次.
在第一次编写组件后,我发现了这个博客,它描述了完全相同的场景:http://jenikya.com/blog/2012/03/cq5-accordion-component.html
在我引用时使用它,我尝试添加一个parsys的扩展,以便在accordion.jsp中使用.这对代码没有任何影响,因此即使我的自定义分析也允许添加除手风琴项目之外的其他组件.
任何有关错误或其他方法的指导都将受到高度赞赏.
这里的解决方案是使用 parsys 并构建一个复合组件,以将手风琴内容限制为仅一组组件(如博客条目中所述)。
看看http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html哪个dam/components/asseteditor/thumbnail组件也使用了这种技术。
| 归档时间: |
|
| 查看次数: |
7816 次 |
| 最近记录: |