Sovrapposizioni overlays
Adobe Experience Manager (AEM), e prima ancora CQ, da tempo si avvale del principio delle sovrapposizioni per estendere e personalizzare console e altre funzionalità (ad esempio authoring delle pagine).
Sovrapposizione è un termine utilizzato in molti contesti. In questo contesto (estensione dell’AEM), una sovrapposizione significa accettare la funzionalità predefinita e imporre le tue definizioni al riguardo (per personalizzare la funzionalità standard).
In un’istanza standard, la funzionalità predefinita si trova sotto /libs
e si consiglia di definire la sovrapposizione (personalizzazioni) in /apps
filiale. L’AEM utilizza un percorso di ricerca per trovare una risorsa, eseguendo prima la ricerca nel /apps
e quindi il /libs
filiale (il il percorso di ricerca può essere configurato). Questo meccanismo indica che la sovrapposizione (e le personalizzazioni ivi definite) ha la priorità.
A partire dalla versione 6.0 dell’AEM, sono state apportate modifiche alle modalità di implementazione e utilizzo delle sovrapposizioni:
-
AEM 6.0 e on - for GraniteSovrapposizioni relative a (ovvero l’interfaccia touch)
-
Metodo
-
Ricostruire l’appropriato
/libs
struttura in/apps
.Questo non richiede una copia 1:1, il Sling Resource Merger viene utilizzato per fare riferimento incrociato alle definizioni originali richieste. Sling Resource Merger fornisce servizi per l’accesso e l’unione di risorse con meccanismi di differenze.
-
Sotto
/apps
, apporta le modifiche necessarie.
-
-
Vantaggi
- Più robusto per le modifiche in
/libs
. - Ridefinisci solo ciò che è richiesto.
- Più robusto per le modifiche in
-
-
Sovrapposizioni e sovrapposizioni non-Granite prima di AEM 6.0
-
Metodo
-
Copia il contenuto da
/libs
a/apps
Copia l’intero sottoramo, comprese le proprietà.
-
Sotto
/apps
, apporta le modifiche necessarie.
-
-
Svantaggi
- Anche se le modifiche non andranno perse quando qualcosa cambia in
/libs
, potrebbe essere necessario ricreare alcune modifiche che si verificano nella sovrapposizione in/apps
.
- Anche se le modifiche non andranno perse quando qualcosa cambia in
-
Le sovrapposizioni sono il metodo consigliato per molte modifiche, ad esempio configurazione delle console o creazione della categoria di selezione nel browser risorse nel pannello laterale (utilizzato per l’authoring delle pagine). Sono necessari in quanto:
-
Do not apportare modifiche in
/libs
filiale Qualsiasi modifica apportata potrebbe andare persa, poiché questo ramo potrebbe subire modifiche ogni volta che:- aggiorna nell’istanza
- applicare un hotfix
- installare un feature pack
-
Concentrano le modifiche in un'unica posizione, semplificando il monitoraggio, la migrazione, il backup o il debug delle modifiche, in base alle esigenze.
Configurazione dei percorsi di ricerca configuring-the-search-paths
Per le sovrapposizioni, la risorsa consegnata è un aggregato delle risorse e delle proprietà recuperate, a seconda dei percorsi di ricerca che possono essere definiti:
-
La risorsa Percorso di ricerca del Risolutore come definito nella Configurazione OSGi per Apache Sling Resource Resolver Factory.
- L’ordine discendente dei percorsi di ricerca indica le rispettive priorità.
- In un'installazione standard, i valori predefiniti principali sono
/apps
,/libs
- in modo che il contenuto/apps
ha una priorità più alta di quella di/libs
(ovvero, sovrapposizioni it).
-
Due utenti del servizio hanno bisogno dell'accesso JCR:READ alla posizione in cui sono memorizzati gli script. Tali utenti sono: components-search-service (utilizzato dai componenti com.day.cq.wcm.coreto access/cache ) e sling-scripting (utilizzato da org.apache.sling.servlets.resolver per trovare i servlet).
-
La seguente configurazione deve essere configurata anche in base alla posizione in cui inserisci gli script (in questo esempio in /etc, /libs o /apps).
code language-none PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl resource.resolver.searchpath=["/etc","/apps","/libs"] resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
-
Infine, è necessario configurare anche il Servlet Resolver (in questo esempio, per aggiungere anche /etc)
code language-none PID = org.apache.sling.servlets.resolver.SlingServletResolver servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
Esempio di utilizzo example-of-usage
Alcuni esempi sono trattati quando: