Компоненты Adobe CQ, ограничивающие дочерние компоненты

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

Идея состоит в том, что автор контента может вытащить аккордеон из боковой кнопки, затем поместить один или несколько элементов аккордеона в аккордеон, но не допустить, чтобы какие-либо другие компоненты были здесь пропущены. Аккордеонные предметы должны быть разрешены только в аккордеонном компоненте, а не внутри других парсисов.

Моя проблема в том, что в настоящее время можно добавить другой контент в аккордеон и добавить элементы аккордеона за пределами аккордеона.

Первая попытка решить это была:

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 просто включает в себя фундамент 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 не использует правила для компонентов аккордеона и аккордеона. Вместо этого они, кажется, наследуют от следующего parsys вместо, если не перезаписаны.

Я могу правильно настроить компоненты, используя режим редактирования на странице и выбирая соответствующие компоненты, но это настраивает информацию в соответствии с шаблоном, что означает, что мне нужно выполнить одинаковую конфигурацию для каждого шаблона страницы. Я хочу, чтобы он был определен в определении компонента, чтобы он существовал один раз.

После первого написания компонентов я нашел этот блог, в котором описан точно такой же сценарий: http://jenikya.com/blog/2012/03/cq5-accordion-component.html

Используя это, как я упоминал, я попытался добавить расширение parsys для использования в accordion.jsp. Это не имело никакого значения для кода, поэтому даже мой пользовательский parsys позволял добавлять компоненты, кроме элемента accordion.

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам