2013-05-21 5 views
6

Я пытаюсь создать компонент для простого аккордеона, где блоки заголовков хранятся под заголовками, и только один заголовок отображается одновременно. Моя предпочтительная реализация использует два компонента: один для представления всего аккордеона и второй компонент для одной записи.Компоненты 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 позволяли добавлять компоненты, отличные от элемента аккордеона.

Будем очень благодарны за любые рекомендации относительно того, что является неправильным или других подходов к принятию.

ответ

0

Решение здесь должно заключаться в использовании parsys и создании составного компонента для ограничения содержания аккордеона только для набора компонентов (как описано в записи в блоге).

Посмотрите на http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html, который также использует эту технику для компонента dam/components/asseteditor/thumbnail.

0

Это очень общая постановка задачи в AEM. Есть несколько способов справиться с этим, зависит от потребностей вашего бизнеса и того, как ваш дизайн будет отображать это. Я могу предложить два решения для этого: 1. Примените ограничение дизайна уровня шаблона для вашего аккордеонного компонента. Это означает, что вы отбрасываете компонент аккордеона, а затем переходите в режим дизайна страницы и в аккордеонном парном компоненте компонента аккордеона. Это одноразовая работа.

Хотя я бы порекомендовал вариант № 2: 2. В диалоговом окне компонента аккордеона попросите автора добавить элемент аккордеона с использованием мультилиста. - Чтобы добавить новый элемент, просто откройте диалог аккордеона и добавьте элемент в мультилистик и введите в него символ аккордеона. - Чтобы удалить элемент, откройте диалоговое окно и удалите элемент из мультилиста - Чтобы изменить положение, переупорядочивайте элементы в мультилистах. Основываясь на отсутствии многолистных элементов, введенных автором в диалоговом окне Accordion, статически включают компонент компонента аккордеона и введите идентификатор компонента, введенный автором в мультилистическом формате.

Используя этот подход, вы будете - легко ограничивать компонент в аккордеоне. - Уменьшите один компонент (элемент аккордеона) в sidekick - Уменьшите одну парсию на странице (так много парсов есть авторская производительность)

+0

Не могли бы вы подробнее рассказать о том, как добавить компоненты к своему компоненту после получения значения из вашего мультифилда? –

 Смежные вопросы

  • Нет связанных вопросов^_^