2013-05-21 26 views
6

Próbuję utworzyć komponent dla prostego akordeonu, w którym bloki treści są przechowywane w nagłówkach i tylko jeden nagłówek jest widoczny na raz. Moja preferowana implementacja wykorzystuje dwa komponenty, jeden do reprezentowania całego akordeonu i drugi komponent do pojedynczego wpisu.Adobe CQ Komponenty ograniczające elementy potomne

Chodzi o to, że autor treści może wyciągnąć akordeon od pomocnika, a następnie upuścić jeden lub więcej akordeonowych elementów do akordeonu, ale nie pozwolić na upuszczenie tutaj żadnych innych elementów. Elementy akordeonu powinny być wrzucane tylko do akordeonu, a nie do innych parsych.

Moim problemem jest to, że obecnie możliwe jest dodawanie innych treści do akordeonu i dodawanie akordeonu poza akordeonem.

Pierwsza próba rozwiązania tego było:

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 

Są to pliki konfiguracyjne od tego są:

akordeon/.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"/> 

akordeon/_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> 

Okno dialogowe jest puste i istnieje tylko po to, aby komponent pojawił się w dru ​​ynku pomocniczym.

akordeon.jsp obejmuje po prostu parsys fundacji. dialogowe poz/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"/> 

Akordeon

akordeon trwa w tytule. EdytorConfig po prostu dodaje pasek narzędzi, ale nie ma słuchaczy.

Akordeionitem.jsp wyprowadza tytuł pobrany z okna dialogowego i zawiera parsję.

Mój problem polega na tym, że parsys nie stosuje reguł dla akordeonu i akordeonu. Zamiast tego wydają się dziedziczyć po następnych parsach zamiast, chyba że zostaną nadpisane.

Mogę poprawnie ustawić komponenty, używając trybu edycji na stronie i wybierając odpowiednie komponenty, ale to ustawia informacje na szablonie, co oznacza, że ​​muszę wykonać tę samą konfigurację dla każdego szablonu strony. To, czego chcę, to zdefiniowanie go w definicji komponentu, aby istniał jeden raz.

Po pierwsze pisanie komponentów Znalazłem ten blog, który opisuje dokładnie takie same scenerio: http://jenikya.com/blog/2012/03/cq5-accordion-component.html

Korzystanie że jak odwołać, próbowałem dodając rozszerzenie parsys używać wewnątrz accordion.jsp zamiast. Nie miało to znaczenia dla kodu, więc nawet moje niestandardowe parsje zezwalały na dodawanie komponentów innych niż akordeon.

Wszelkie wskazówki na temat tego, co jest nie tak lub innych podejść, będą bardzo mile widziane.

Odpowiedz

0

Rozwiązaniem byłoby użycie parsys i zbudowanie komponentu kompozytowego w celu ograniczenia zawartości akordeonu tylko do zestawu komponentów (zgodnie z opisem w blogu).

Spójrz na http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html, która również używa tej techniki dla komponentu dam/components/asseteditor/thumbnail.

0

Jest to bardzo ogólne stwierdzenie problemowe w AEM. Jest kilka sposobów, aby sobie z tym poradzić, w zależności od potrzeb biznesowych i sposobu, w jaki twój projekt na to odwzoruje. Mogę zaproponować dwa rozwiązania w tym celu: 1. Zastosuj ograniczenie poziomu szablonu dla komponentu akordeonu. Oznacza to, że upuszczasz komponent akordeonu, a następnie przechodzisz do trybu projektowania strony i komponentu akordeonowego par wyboru akordeonu. Jest to jednorazowa aktywność.

Chociaż polecam opcję # 2: 2. W oknie dialogowym komponentu akordeonu poproś autora o dodanie akordeonu przy użyciu multilist. - Aby dodać nowy element, wystarczy otworzyć okno dialogowe akordeonu i dodać element w multilistrze i wprowadzić w nim identyfikator akordeonu. - Aby usunąć element, otwórz okno dialogowe i usuń element z multilisty - Aby zmienić pozycję, zmień kolejność elementów w multilist. W oparciu o brak elementów multilist wprowadzonych przez autora w oknie dialogowym Akordeon, statycznie włącz element akordeonu i podaj identyfikator komponentu wprowadzony przez autora w multilist.

Dzięki temu podejściu uzyskasz - łatwo ograniczyć komponent na akordeonie. - Zmniejszenie jeden składnik (pozycja akordeon) w pomocnika - Zmniejszenie jeden parsys na stronie (tak wiele parsys jeść authoringu wydajność)

+0

Czy można przejść do bardziej szczegółowo w jaki sposób dodać elementy do swojego urządzenia po otrzymaniu wartości z twojego multifield? –