Quando viene eseguito il rendering di un componente in una pagina web, è possibile generare un elemento HTML che racchiude all’interno il componente renderizzato. Ciò ha principalmente due finalità:
È possibile modificare un componente solo se è racchiuso con un elemento HTML.
L’elemento wrapping viene utilizzato per applicare le classi HTML che forniscono:
AEM offre agli sviluppatori una logica chiara e semplice che controlla i tag di decorazione che racchiudono i componenti. Se e come viene eseguito il rendering del tag di decorazione è definito dalla combinazione di due fattori, in cui questa pagina si immergerà:
Di seguito sono riportati alcuni consigli generali su quando includere l’elemento wrapper che dovrebbero contribuire a evitare problemi imprevisti:
I seguenti nodi e proprietà possono essere applicati ai componenti per controllare il comportamento del tag di decorazione:
cq:noDecoration {boolean}
: Questa proprietà può essere aggiunta a un componente e un valore vero costringe AEM non generare alcun elemento wrapper sul componente.
cq:htmlTag
nodo : Questo nodo può essere aggiunto sotto un componente e può avere le seguenti proprietà:
cq:tagName {String}
: Può essere utilizzato per specificare un tag HTML personalizzato da utilizzare per il wrapping dei componenti invece dell’elemento DIV predefinito.class {String}
: Può essere utilizzato per specificare i nomi delle classi css da aggiungere al wrapper.Il comportamento del wrapper varia tuttavia a seconda di se HTL o JSP viene utilizzato per includere l’elemento .
In generale, il comportamento del wrapper in HTL può essere riassunto come segue:
data-sly-resource="foo"
).Il comportamento del wrapper può anche essere completamente controllato.
cq:noDecoration
e cq:tagName
) può anche definire il tag wrapper .È possibile controllare completamente il comportamento dei tag wrapper dagli script HTL e la logica associata.
Per ulteriori informazioni sullo sviluppo in HTL, consulta la sezione Documentazione di HTL.
Questa struttura decisionale riepiloga la logica che determina il comportamento dei tag wrapper.
I tre casi d’uso seguenti forniscono esempi di gestione dei tag wrapper e illustrano anche la semplicità del controllo del comportamento desiderato dei tag wrapper.
Tutti gli esempi seguenti si basano sulla seguente struttura del contenuto e componenti:
/content/test/
@resourceType = "test/components/one"
child/
@resourceType = "test/components/two"
/apps/test/components/
one/
one.html
two/
two.html
cq:htmlTag/
@cq:tagName = "article"
@class = "component-two"
Il caso d’uso più tipico si verifica quando un componente include un altro componente per motivi di riutilizzo del codice. In questo caso, il componente incluso non è modificabile con la propria barra degli strumenti e la propria finestra di dialogo, quindi non è necessario alcun wrapper e il componente è cq:htmlTag
verranno ignorati. Questo può essere considerato il comportamento predefinito.
one.html: <sly data-sly-resource="child"></sly>
two.html: Hello World!
Output risultante su /content/test.html
:
Hello World!
Un esempio è un componente che include un componente immagine di base per visualizzare un’immagine, in genere utilizzando una risorsa sintetica, che consiste nell’includere un componente figlio virtuale passando alla risorsa sly data un oggetto Map che rappresenta tutte le proprietà del componente.
Un altro caso d’uso comune si verifica quando i componenti contenitore includono componenti figlio modificabili, come un Contenitore di layout. In questo caso, ogni bambino incluso ha bisogno di un wrapper per il funzionamento dell'editor (a meno che non sia esplicitamente disabilitato con il cq:noDecoration
proprietà).
Poiché in questo caso il componente incluso è un componente indipendente, per il funzionamento dell’editor è necessario un elemento wrapper e per definirne il layout e lo stile da applicare. Per attivare questo comportamento, è possibile decoration=true
opzione .
one.html: <sly data-sly-resource="${'child' @ decoration=true}"></sly>
two.html: Hello World!
Output risultante su /content/test.html
:
<article class="component-two">Hello World!</article>
Ci può essere un certo numero di casi complessi, che possono essere facilmente raggiunti dalla possibilità di HTL di fornire esplicitamente:
decorationTagName='ELEMENT_NAME'
Per definire il nome dell’elemento del wrapper.cssClassName='CLASS_NAME'
Per definire i nomi delle classi CSS da impostarvi.one.html: <sly data-sly-resource="${'child' @ decorationTagName='aside', cssClassName='child'}"></sly>
two.html: Hello World!
Output risultante /content/test.html
:
<aside class="child">Hello World!</aside>
Quando includi un componente utilizzando cq:includ
e o sling:include
, il comportamento predefinito in AEM consiste nell’utilizzare un DIV per racchiudere l’elemento. Tuttavia, questo avvolgimento può essere personalizzato in due modi:
cq:noDecoration
.cq:htmlTag
/ cq:tagName
o decorationTagName
.Il seguente albero decisionale illustra come cq:noDecoration
, cq:htmlTag
, cq:tagName
e decorationTagName
influisce sul comportamento del wrapper.