Utilizzo di Sling Resource Merger in AEM using-the-sling-resource-merger-in-aem
Scopo purpose
Sling Resource Merger fornisce servizi per accedere e unire le risorse. Fornisce meccanismi di differenze per entrambi:
-
Sovrapposizioni di risorse utilizzando percorsi di ricerca configurati.
-
Esegue l'override delle finestre di dialogo dei componenti per l'interfaccia utente touch (
cq:dialog), utilizzando la gerarchia dei tipi di risorsa (tramite la proprietàsling:resourceSuperType).
Con Sling Resource Merger, le risorse e/o le proprietà di sovrapposizione/sostituzione vengono unite alle risorse/proprietà originali:
-
Il contenuto della definizione personalizzata ha una priorità più alta di quella dell'originale (ovvero sovrapposizioni o sostituzioni).
-
Se necessario, proprietà definite nella personalizzazione, indicano come deve essere utilizzato il contenuto unito dall'originale.
Obiettivi per l'AEM goals-for-aem
Gli obiettivi per utilizzare Sling Resource Merger in AEM sono i seguenti:
-
assicurarsi che le modifiche di personalizzazione non vengano apportate in
/libs. -
ridurre la struttura replicata da
/libs.Quando si utilizza Sling Resource Merger, non è consigliabile copiare l'intera struttura da
/libsin quanto ciò comporterebbe la memorizzazione di troppe informazioni nella personalizzazione (in genere/apps). La duplicazione delle informazioni aumenta inutilmente la possibilità di problemi quando il sistema viene aggiornato in qualsiasi modo.
sling:resourceSuperType per stabilire la connessione./apps, poiché la best practice in AEM è quella di definire personalizzazioni in /apps, in quanto non è necessario modificare nulla in /libs./libs./libs viene sovrascritto al successivo aggiornamento dell'istanza (e potrebbe essere sovrascritto quando si applica un hotfix o un feature pack).-
Ricrea l'elemento richiesto (ovvero, poiché esiste in
/libs) in/apps -
Apporta le modifiche in
/apps
Proprietà properties
La fusione delle risorse fornisce le seguenti proprietà:
-
sling:hideProperties(StringoString[])Specifica la proprietà o l'elenco di proprietà da nascondere.
Il carattere jolly
*nasconde tutto. -
sling:hideResource(Boolean)Indica se le risorse devono essere completamente nascoste, inclusi i relativi elementi secondari.
-
sling:hideChildren(StringoString[])Contiene il nodo figlio, o elenco di nodi figlio, da nascondere. Le proprietà del nodo verranno mantenute.
Il carattere jolly
*nasconde tutto. -
sling:orderBefore(String)Contiene il nome del nodo di pari livello che deve essere posizionato davanti al nodo corrente.
Queste proprietà influiscono sul modo in cui le risorse/proprietà corrispondenti/originali (da /libs) vengono utilizzate dalla sovrapposizione/esclusione (spesso in /apps).
Creazione della struttura creating-the-structure
Per creare una sovrapposizione o una sostituzione è necessario ricreare il nodo originale, con la struttura equivalente, nella destinazione (in genere /apps). Ad esempio:
-
Sovrapposizione
-
La definizione della voce di navigazione per la console Sites, come mostrato nella barra, è definita in:
/libs/cq/core/content/nav/sites/jcr:title -
Per sovrapporsi, crea il seguente nodo:
/apps/cq/core/content/nav/sitesQuindi aggiornare la proprietà
jcr:titlecome richiesto.
-
-
Sostituisci
-
La definizione della finestra di dialogo touch per la console Testi è definita in:
/libs/foundation/components/text/cq:dialog -
Per evitare questo problema, crea il seguente nodo, ad esempio:
/apps/the-project/components/text/cq:dialog
-
Per creare uno di questi elementi è sufficiente ricreare la struttura dell'ossatura. Per semplificare la ricreazione della struttura, tutti i nodi intermedi possono essere di tipo nt:unstructured (non devono necessariamente riflettere il tipo di nodo originale; ad esempio, in /libs).
Nell’esempio di sovrapposizione precedente, sono necessari i seguenti nodi:
/apps
/cq
/core
/content
/nav
/sites
/libs in quanto si otterrebbe una quantità eccessiva di informazioni in /apps. Questo può causare problemi quando il sistema viene aggiornato in qualsiasi modo.Casi d’uso use-cases
Queste funzionalità, insieme a quelle standard, consentono di:
-
Aggiungi una proprietà
La proprietà non esiste nella definizione
/libs, ma è obbligatoria nella sovrapposizione/sostituzione/apps.- Crea il nodo corrispondente in
/apps - Crea la nuova proprietà su questo nodo "
- Crea il nodo corrispondente in
-
Ridefinire una proprietà (proprietà non create automaticamente)
La proprietà è definita in
/libs, ma è necessario un nuovo valore nella sovrapposizione/sostituzione/apps.-
Crea il nodo corrispondente in
/apps -
Crea la proprietà corrispondente su questo nodo (in /
apps)-
La proprietà avrà una priorità in base alla configurazione di Sling Resource Resolver.
-
È supportata la modifica del tipo di proprietà.
Se si utilizza un tipo di proprietà diverso da quello utilizzato in
/libs, verrà utilizzato il tipo di proprietà definito.
-
note note NOTE È supportata la modifica del tipo di proprietà. -
-
Ridefinire una proprietà creata automaticamente
Per impostazione predefinita, le proprietà create automaticamente (come
jcr:primaryType) non sono soggette a sovrapposizione/sostituzione per garantire che il tipo di nodo attualmente in/libssia rispettato. Per imporre una sovrapposizione/sostituzione è necessario ricreare il nodo in/apps, nascondere esplicitamente la proprietà e ridefinirla:-
Crea il nodo corrispondente in
/appsconjcr:primaryTypedesiderato -
Creare la proprietà
sling:hidePropertiessu tale nodo, con il valore impostato su quello della proprietà creata automaticamente, ad esempiojcr:primaryTypeQuesta proprietà, definita in
/apps, avrà ora la priorità rispetto a quella definita in/libs
-
-
Ridefinire un nodo e i relativi elementi secondari
Il nodo e i relativi nodi secondari sono definiti in
/libs, ma è necessaria una nuova configurazione nella sovrapposizione/esclusione di/apps.-
Combina le azioni di:
- Nascondi elementi figlio di un nodo (mantenendo le proprietà del nodo)
- Ridefinisci la/le proprietà
-
-
Nascondi una proprietà
La proprietà è definita in
/libs, ma non è richiesta nella sostituzione/sovrapposizione di/apps.-
Crea il nodo corrispondente in
/apps -
Creare una proprietà
sling:hidePropertiesdi tipoStringoString[]. Utilizzare questa opzione per specificare le proprietà da nascondere/ignorare. È inoltre possibile utilizzare i caratteri jolly. Ad esempio:*["*"]jcr:title["jcr:title", "jcr:description"]
-
-
Nascondi un nodo e i relativi elementi secondari
Il nodo e i relativi nodi secondari sono definiti in
/libs, ma non sono obbligatori nella sovrapposizione/esclusione di/apps.-
Crea il nodo corrispondente in /apps
-
Crea una proprietà
sling:hideResource- tipo:
Boolean - valore:
true
- tipo:
-
-
Nascondi elementi figlio di un nodo (mantenendo le proprietà del nodo)
Il nodo, le relative proprietà e i relativi elementi figlio sono definiti in
/libs. Il nodo e le relative proprietà sono obbligatori nella sovrapposizione/sostituzione/apps, ma alcuni o tutti i nodi figlio non sono obbligatori nella sovrapposizione/sostituzione/apps.-
Crea il nodo corrispondente in
/apps -
Creare la proprietà
sling:hideChildren:- tipo:
String[] - valore: elenco dei nodi figlio (come definiti in
/libs) da nascondere/ignorare
Il carattere jolly * può essere utilizzato per nascondere/ignorare tutti i nodi figlio.
- tipo:
-
-
Riordina nodi
Nodo e relativi elementi di pari livello definiti in
/libs. È necessaria una nuova posizione in modo che il nodo venga ricreato nella sovrapposizione/sostituzione/apps, dove la nuova posizione viene definita in riferimento al nodo di pari livello appropriato in/libs.-
Utilizzare la proprietà
sling:orderBefore:-
Crea il nodo corrispondente in
/apps -
Creare la proprietà
sling:orderBefore:Specifica il nodo (come in
/libs) in cui posizionare il nodo corrente prima di:- tipo:
String - valore:
<before-SiblingName>
- tipo:
-
-
Richiamare Sling Resource Merger dal codice invoking-the-sling-resource-merger-from-your-code
Sling Resource Merger include due provider di risorse personalizzati: uno per le sovrapposizioni e l’altro per le sostituzioni. Ognuna di queste può essere richiamata all’interno del codice utilizzando un punto di montaggio:
/libs.-
Sovrapposizione:
-
finalità: unire le risorse in base al relativo percorso di ricerca
-
punto di montaggio:
/mnt/overlay -
utilizzo:
mount point + relative path -
esempio:
getResource('/mnt/overlay' + '<relative-path-to-resource>');
-
-
Sostituisci:
-
finalità: unire le risorse in base al loro super tipo
-
punto di montaggio:
/mnt/overide -
utilizzo:
mount point + absolute path -
esempio:
getResource('/mnt/override' + '<absolute-path-to-resource>');
-
Esempio di utilizzo example-of-usage
Alcuni esempi sono trattati:
-
Sovrapposizione:
-
Sostituisci: