Ich versuche, eine Komponente für ein einfaches Akkordeon zu erstellen, bei der Inhaltsblöcke unter Überschriften gehalten werden und jeweils nur eine Überschrift sichtbar ist. Meine bevorzugte Implementierung verwendet zwei Komponenten, eine für das gesamte Akkordeon und eine zweite für einen einzelnen Eintrag.Adobe CQ Components, die untergeordnete Komponenten einschränken
Die Idee ist, dass ein Autor des Inhalts das Akkordeon aus dem Sidekick ziehen und dann ein oder mehrere Akkordeon-Elemente in das Akkordeon fallen lassen kann, aber keine anderen Komponenten hier fallen lassen. Die Akkordeon-Gegenstände sollten nur in die Akkordeon-Komponente und nicht in andere Parsys fallen können.
Mein Problem ist, dass es derzeit möglich ist, andere Inhalte in das Akkordeon hinzuzufügen und Akkordeon-Objekte außerhalb des Akkordeons hinzuzufügen.
Der erste Versuch, dieses Problem zu lösen war:
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
Dies sind die Konfigurationsdateien von diesem sind:
Akkordeon/.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"/>
Akkordeon/_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>
Der Dialog ist leer und existiert nur, so dass die Komponente im Sidekick erscheint.
accordion.jsp enthält einfach die Foundation-Parsys.
Akkordeon/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"/>
Das Akkordeon Artikel Dialog nimmt im Titel. Die editConfig fügt einfach die Symbolleiste, aber keine Listener hinzu.
accordionitem.jsp gibt den Titel aus dem Dialog aus und hat eine Parsys.
Mein Problem scheint zu sein, dass die Parsys nicht die Regeln für die Akkordeon und Akkordeonitem Komponenten verwenden. Stattdessen scheinen sie stattdessen von den nächsten Parsys zu erben, außer sie werden überschrieben.
Ich kann die Komponenten korrekt einstellen, indem ich den Bearbeitungsmodus auf der Seite benutze und die entsprechenden Komponenten auswähle, aber die Informationen für die Vorlage festlege, was bedeutet, dass ich für jede Seitenvorlage dieselbe Konfiguration vornehmen muss. Ich möchte, dass es in der Komponentendefinition definiert wird, damit es einmal existiert.
Nachdem zunächst die Komponenten zu schreiben ich diesen Blog gefunden, die genau das gleiche scenerio beschreibt: http://jenikya.com/blog/2012/03/cq5-accordion-component.html
verwenden, wie ich verweisen, habe ich versucht, eine Erweiterung von Parsys Zugabe statt innerhalb accordion.jsp zu verwenden. Dies machte für den Code keinen Unterschied, sodass sogar meine benutzerdefinierten Parsys andere Komponenten als Akkordeon-Elemente hinzufügten.
Jede Anleitung zu entweder was falsch ist oder andere Ansätze zu ergreifen, wird sehr geschätzt.
Würden Sie in der Lage sein, detaillierter zu erfahren, wie Sie Ihre Komponenten zu Ihrer Komponente nach dem Kauf hinzufügen würde die Werte von deinem Mehrfeld? –