2013-05-21 7 views
6

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.

Antwort

0

Die Lösung hier wäre, eine Parsys zu verwenden und eine Composite-Komponente zu erstellen, um den Akkordeon-Inhalt auf eine Reihe von Komponenten zu beschränken (wie im Blog-Eintrag beschrieben).

Werfen Sie einen Blick auf http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html, die auch diese Technik für die dam/components/asseteditor/thumbnail Komponente verwendet.

0

Dies ist eine sehr allgemeine Problemstellung in AEM. Es gibt mehrere Möglichkeiten, damit umzugehen, hängt von Ihren geschäftlichen Anforderungen ab und wie Ihr Design dies abbildet. Ich kann zwei Lösungen dafür vorschlagen: 1. Wenden Sie Design-Level-Design-Einschränkungen für Ihre Akkordeon-Komponente an. Das bedeutet, Sie lassen die Akkordeon-Komponente fallen und gehen dann zum Design-Modus der Seite und in Akkordeon-Par-Akkordeon-Element-Komponente. Dies ist nur eine einmalige Aktivität.

Obwohl ich die Option # 2 empfehlen würde: 2. Im Akkordeon Komponentendialog bitten Sie den Autor, das Akkordeon Element mit multilist hinzuzufügen. - Um ein neues Element hinzuzufügen, öffnen Sie einfach den Akkordeon-Dialog und fügen Sie das Element in multilist hinzu und geben Sie die Akkordeon-ID ein. - Um das Objekt zu entfernen, öffnen Sie das Dialogfeld und entfernen Sie das Objekt aus der Mehrfachliste. - Um die Position zu ändern, ordnen Sie die Elemente in multilist an. Basierend auf der Anzahl der vom Autor im Akkordeon-Dialog eingegebenen Multilist-Elemente, fügen Sie die Akkordeon-Element-Komponente statisch hinzu und geben Sie die vom Autor eingegebene Komponenten-ID in multilist ein.

Mit diesem Ansatz werden Sie - Komponente in Akkordeon leicht einschränken. - Reduzieren Sie eine Komponente (Akkordeon-Element) in Sidekick - Reduzieren Sie eine Parsys auf Seite (so viele Parsys essen Autorenleistung)

+0

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

Verwandte Themen