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
/libs
in 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
(String
oString[]
)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
(String
oString[]
)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/sites
Quindi aggiornare la proprietà
jcr:title
come 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/libs
sia rispettato. Per imporre una sovrapposizione/sostituzione è necessario ricreare il nodo in/apps
, nascondere esplicitamente la proprietà e ridefinirla:-
Crea il nodo corrispondente in
/apps
conjcr:primaryType
desiderato -
Creare la proprietà
sling:hideProperties
su tale nodo, con il valore impostato su quello della proprietà creata automaticamente, ad esempiojcr:primaryType
Questa 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:hideProperties
di tipoString
oString[]
. 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: