Я пытаюсь создать компонент для простого аккордеона, где блоки заголовков хранятся под заголовками, и только один заголовок отображается одновременно. Моя предпочтительная реализация использует два компонента: один для представления всего аккордеона и второй компонент для одной записи.Компоненты Adobe CQ, ограничивающие дочерние компоненты
Идея состоит в том, что автор контента может вытащить аккордеон из 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>
Диалог пуст и существует только для того, чтобы компонент появился в 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, а не перезаписываются.
Я могу правильно установить компоненты, используя режим редактирования на странице и выбрав соответствующие компоненты, но это устанавливает информацию против шаблона, то есть мне нужно выполнить одну и ту же конфигурацию для каждого шаблона страницы. Я хочу, чтобы он определялся в определении компонента вместо этого, чтобы он существовал один раз.
После первой записи компонент я нашел этот блог, который описывает точно так же scenerio: http://jenikya.com/blog/2012/03/cq5-accordion-component.html
Используя это, как я ссылку, я пытался добавить расширение parsys использовать в accordion.jsp вместо. Это не имело никакого значения для кода, поэтому даже мои пользовательские parsys позволяли добавлять компоненты, отличные от элемента аккордеона.
Будем очень благодарны за любые рекомендации относительно того, что является неправильным или других подходов к принятию.
Не могли бы вы подробнее рассказать о том, как добавить компоненты к своему компоненту после получения значения из вашего мультифилда? –