Sling Resource Merger fornisce servizi per accedere e unire le risorse. Fornisce meccanismi di differenziazione per:
Sovrapposizioni delle risorse che utilizzano percorsi di ricerca configurati.
Sostituzioni delle finestre di dialogo dei componenti per l’interfaccia 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/override vengono unite alle risorse/proprietà originali:
Il contenuto della definizione personalizzata ha una priorità più alta di quella dell'originale (cioè sovrapposizioni o sostituzioni it).
Se necessario, proprietà definito nella personalizzazione, indica in che modo verrà utilizzato il contenuto unito dall’originale.
Sling Resource Merger e i metodi correlati possono essere utilizzati solo con Granite. Ciò significa anche che è adatto solo per l’interfaccia utente standard con funzioni touch; in particolare, le sostituzioni definite in questo modo sono applicabili solo alla finestra di dialogo touch di un componente.
Le sovrapposizioni/sostituzioni per altre aree (inclusi altri aspetti di un componente touch o dell’interfaccia classica) comportano la copia del nodo e della struttura appropriati dall’originale al punto in cui verrà definita la personalizzazione.
Gli obiettivi per l’utilizzo di Sling Resource Merger in AEM sono i seguenti:
assicurati che non vengano apportate modifiche alla personalizzazione in /libs
.
ridurre la struttura replicata da /libs
.
Quando si utilizza Sling Resource Merger, si sconsiglia di copiare l’intera struttura da /libs
in quanto ciò porterebbe a tenere troppe informazioni nella personalizzazione (di solito /apps
). La duplicazione delle informazioni aumenta inutilmente la possibilità di problemi quando il sistema viene aggiornato in qualsiasi modo.
Le sostituzioni non dipendono dai percorsi di ricerca, ma utilizzano la proprietà sling:resourceSuperType
per effettuare la connessione.
Tuttavia, le sostituzioni sono spesso definite in /apps
, come best practice in AEM è definire le personalizzazioni in /apps
; questo è perché non deve cambiare nulla sotto /libs
.
You deve non modificare nulla nel /libs
percorso.
Questo perché il contenuto di /libs
viene sovrascritto la prossima volta che aggiorni l’istanza (e potrebbe essere sovrascritto quando applichi un hotfix o un feature pack).
Il metodo consigliato per la configurazione e altre modifiche è:
Ricrea l'elemento richiesto (ovvero così come esiste in /libs
) /apps
Apporta modifiche a /apps
La fusione delle risorse fornisce le seguenti proprietà:
sling:hideProperties
( String
oppure String[]
)
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 gli elementi secondari.
sling:hideChildren
( String
oppure String[]
)
Contiene il nodo figlio o l'elenco dei 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 sul quale deve essere posizionato il nodo corrente.
Queste proprietà influiscono sul modo in cui le risorse/proprietà corrispondenti/originali (da /libs
) viene utilizzata dalla sovrapposizione/override (spesso in /apps
).
Per creare una sovrapposizione o una sostituzione è necessario ricreare il nodo originale, con la struttura equivalente, sotto la destinazione (di solito /apps
). Esempio:
Sovrapposizione
La definizione della voce di navigazione per la console Sites , come illustrato nella barra a sinistra, è definita in:
/libs/cq/core/content/nav/sites/jcr:title
Per sovrapporre, crea il seguente nodo:
/apps/cq/core/content/nav/sites
Quindi aggiorna la proprietà jcr:title
se necessario.
Sostituisci
La definizione della finestra di dialogo touch per la console Testo è definita in:
/libs/foundation/components/text/cq:dialog
Per eseguire l'override, crea il nodo seguente, ad esempio:
/apps/the-project/components/text/cq:dialog
Per creare una di queste è sufficiente ricreare la struttura dello scheletro. Per semplificare la ricreazione della struttura tutti i nodi intermedi possono essere di tipo nt:unstructured
(non devono riflettere il tipo di nodo originale; ad esempio, in /libs
).
Nell’esempio di sovrapposizione riportato sopra, sono necessari i seguenti nodi:
/apps
/cq
/core
/content
/nav
/sites
Quando si utilizza lo Sling Resource Merger (ovvero quando si gestisce l’interfaccia utente standard abilitata per il tocco), si sconsiglia di copiare l’intera struttura da /libs
in quanto ciò comporterebbe la detenzione di troppe informazioni /apps
. Questo può causare problemi quando il sistema viene aggiornato in qualsiasi modo.
Oltre alle funzionalità standard, queste consentono di:
Aggiungi una proprietà
La proprietà non esiste nel /libs
, ma è richiesto nel /apps
sovrapposizione/override.
/apps
Ridefinire una proprietà (proprietà non create automaticamente)
La proprietà è definita in /libs
, ma è necessario un nuovo valore nel /apps
sovrapposizione/override.
Crea il nodo corrispondente all'interno di /apps
Crea la proprietà corrispondente su questo nodo (sotto / apps
)
La proprietà avrà una priorità in base alla configurazione di Sling Resource Resolver.
È supportata la modifica del tipo di proprietà.
Se utilizzi un tipo di proprietà diverso da quello utilizzato in /libs
, verrà quindi utilizzato il tipo di proprietà definito.
È supportata la modifica del tipo di proprietà.
Ridefinire una proprietà creata automaticamente
Per impostazione predefinita, le proprietà create automaticamente (ad esempio jcr:primaryType
) non sono soggette a sovrapposizione/override per garantire che il tipo di nodo sia attualmente in /libs
è rispettato. Per imporre una sovrapposizione/override devi ricreare il nodo in /apps
, nasconde esplicitamente la proprietà e ridefiniscila:
Crea il nodo corrispondente sotto /apps
con il jcr:primaryType
Creare la proprietà sling:hideProperties
su quel nodo, con il valore impostato su quello della proprietà creata automaticamente; ad esempio, jcr:primaryType
Questa proprietà, definita in /apps
, assumerà la priorità rispetto a quello definito in /libs
Ridefinire un nodo e i relativi figli
Il nodo e i relativi figli sono definiti in /libs
, ma è necessaria una nuova configurazione nel /apps
sovrapposizione/override.
Combinare le azioni di:
Nascondere una proprietà
La proprietà è definita in /libs
, ma non è richiesto nel /apps
sovrapposizione/override.
Crea il nodo corrispondente all'interno di /apps
Creare una proprietà sling:hideProperties
di tipo String
o String[]
. Utilizza questa opzione per specificare le proprietà da nascondere o ignorare. Possono essere utilizzati anche i caratteri jolly. Esempio:
*
["*"]
jcr:title
["jcr:title", "jcr:description"]
Nascondere un nodo e i relativi elementi secondari
Il nodo e i relativi figli sono definiti in /libs
, ma non è richiesto nel /apps
sovrapposizione/override.
Crea il nodo corrispondente sotto /apps
Creare una proprietà sling:hideResource
Boolean
true
Nascondi elementi secondari di un nodo (mantenendo le proprietà del nodo)
Il nodo, le sue proprietà e i suoi elementi secondari sono definiti in /libs
. Il nodo e le relative proprietà sono obbligatori nel /apps
sovrapposizione/override, ma alcuni o tutti i nodi figlio non sono necessari nel /apps
sovrapposizione/override.
Crea il nodo corrispondente sotto /apps
Creare la proprietà sling:hideChildren
:
String[]
/libs
) per nascondere/ignorareIl carattere jolly * può essere utilizzato per nascondere/ignorare tutti i nodi figlio.
Riordinare i nodi
Il nodo e i relativi elementi di pari livello sono definiti in /libs
. È necessaria una nuova posizione in modo che il nodo venga ricreato nel /apps
sovrapposizione/override, dove la nuova posizione è definita in riferimento al nodo di pari livello appropriato in /libs
.
Utilizza la sling:orderBefore
proprietà:
Crea il nodo corrispondente sotto /apps
Creare la proprietà sling:orderBefore
:
Specifica il nodo (come in /libs
) che il nodo corrente deve essere posizionato prima di:
String
<before-SiblingName>
Sling Resource Merger include due provider di risorse personalizzati, uno per le sovrapposizioni e l’altro per le sostituzioni. Ognuno di questi può essere richiamato all'interno del codice utilizzando un punto di montaggio:
Quando accedi alla risorsa, si consiglia di utilizzare il punto di montaggio appropriato.
In questo modo viene richiamato Sling Resource Merger e viene restituita la risorsa completamente unita (riducendo la struttura da cui deve essere replicata) /libs
).
Sovrapposizione:
finalità: unire le risorse in base al relativo percorso di ricerca
punto di montaggio: /mnt/overlay
usage: mount point + relative path
esempio:
getResource('/mnt/overlay' + '<relative-path-to-resource>');
Sostituisci:
finalità: unire le risorse in base al loro super-type
punto di montaggio: /mnt/overide
usage: mount point + absolute path
esempio:
getResource('/mnt/override' + '<absolute-path-to-resource>');
Alcuni esempi:
Sovrapposizione:
Sostituisci: