2013-05-21 13 views
6

Sto cercando di creare un componente per una semplice fisarmonica, in cui i blocchi di contenuto sono trattenuti sotto intestazioni e solo una intestazione è visibile alla volta. La mia implementazione preferita utilizza due componenti, uno per rappresentare l'intera fisarmonica e un secondo componente per una singola voce.Componenti Adobe CQ che limitano i componenti secondari

L'idea è che un autore di contenuti possa estrarre la fisarmonica dal sidekick, quindi rilasciare uno o più elementi di fisarmonica nella fisarmonica, ma non consentire la rimozione di altri componenti qui. Gli oggetti per fisarmonica dovrebbero poter essere lasciati cadere nel componente fisarmonica e non in nessun'altra parsys.

Il mio problema è che al momento è possibile aggiungere altri contenuti alla fisarmonica e aggiungere elementi fisarmonica al di fuori della fisarmonica.

Il primo tentativo di risolvere questo era:

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 

Questi sono i file di configurazione di questo sono:

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

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

La finestra di dialogo è vuota ed esiste solo in modo che il componente venga visualizzato nel sidekick.

accordion.jsp include semplicemente le parsys di base. dialogo voce/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"/> 

La fisarmonica

fisarmonica prende nel titolo. EditConfig aggiunge semplicemente la barra degli strumenti, ma nessun listener.

accordionitem.jsp emette il titolo estratto dalla finestra di dialogo e ha un parsys.

Il mio problema sembra essere che i parsys non stanno usando le regole per i componenti di fisarmonica e fisarmonica. Invece sembrano ereditare dal prossimo parsys invece, a meno che non venga sovrascritto.

Posso impostare correttamente i componenti utilizzando la modalità di modifica sulla pagina e selezionando i componenti appropriati, ma che imposta le informazioni rispetto al modello, il che significa che è necessario eseguire la stessa configurazione per ogni modello di pagina. Quello che voglio è averlo definito nella definizione del componente, in modo che esista una volta.

Dopo primo crei i componenti ho trovato questo blog, che descrive esattamente la stessa scenerio: http://jenikya.com/blog/2012/03/cq5-accordion-component.html

Utilizzando tale come riferimento, ho provato ad aggiungere un'estensione PARSYS utilizzare all'interno accordion.jsp invece. Questo non ha fatto alcuna differenza per il codice, quindi anche le mie parsys personalizzate consentivano l'aggiunta di componenti diversi dall'elemento fisarmonica.

Qualsiasi consiglio su ciò che è sbagliato o altri approcci da adottare sarà molto apprezzato.

risposta

0

La soluzione qui consiste nell'utilizzare un parsys e creare un componente composito per limitare il contenuto di fisarmonica solo a un set di componenti (come descritto nel post di blog).

Dai un'occhiata a http://localhost:4502/content/geometrixx/en/company/press/asseteditor.html che utilizza questa tecnica anche per il componente dam/components/asseteditor/thumbnail.

0

Questa è una dichiarazione di problemi molto generici in AEM. Ci sono diversi modi per gestirlo, dipende dalle esigenze della tua azienda e da come verrà mappato il tuo progetto. Posso suggerire due soluzioni per questo: 1. Applicare la restrizione del design a livello di modello per il componente fisarmonica. Il che significa che si rilascia il componente fisarmonica e quindi si passa alla modalità di progettazione della pagina e al componente per fisarmonica selezionato per fisarmonica. Questa è solo un'attività a tempo.

Anche se raccomanderei l'opzione n. 2: 2. Nella finestra di dialogo componente fisarmonica, chiedere all'autore di aggiungere elementi fisarmonica usando multilist. - Per aggiungere un nuovo elemento, è sufficiente aprire la finestra della fisarmonica e aggiungere l'elemento in multilist e inserire l'ID fisarmonica al suo interno. - Per rimuovere l'elemento, aprire la finestra di dialogo e rimuovere l'elemento da multilist. - Per modificare la posizione, riorganizzare gli elementi in multilist. In base a nessun elemento multilivello inserito dall'autore nella finestra di dialogo Accordion, includere staticamente il componente dell'elemento fisarmonica e fornire l'id del componente immesso dall'autore in multilist.

Utilizzando questo approccio, si - limitare facilmente il componente in fisarmonica. - Ridurre un componente (voce fisarmonica) in sidekick - Ridurre uno PARSYS a pagina (tanti PARSYS mangiano authoring prestazioni)

+0

Sareste in grado di andare più in dettaglio di come si dovrebbe aggiungere i componenti per il componente dopo aver ottenuto i valori del tuo multi-campo? –

Problemi correlati