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.
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? –