Sovrapposizioni overlays
Adobe Experience Manager (AEM), e prima ancora CQ, ha a lungo utilizzato il principio delle sovrapposizioni per consentire di estendere e personalizzare le 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 in /libs
e si consiglia di definire la sovrapposizione (personalizzazioni) nel ramo /apps
. AEM utilizza un percorso di ricerca per trovare una risorsa, eseguendo prima la ricerca nel ramo /apps
e poi nel ramo /libs
(è possibile configurare il percorso di ricerca 🔗). 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 attivato: per sovrapposizioni relative a Granite (ovvero l'interfaccia utente touch)
-
Metodo
-
Ricostruire la struttura
/libs
appropriata in/apps
.Questa operazione non richiede una copia 1:1, Sling Resource Merger viene utilizzato per fare un riferimento incrociato alle definizioni originali richieste. Sling Resource Merger fornisce servizi per l’accesso e l’unione di risorse con meccanismi di differenze.
-
In
/apps
, apportare le modifiche desiderate.
-
-
Vantaggi
- Più affidabile per le modifiche in
/libs
. - Ridefinisci solo ciò che è richiesto.
- Più affidabile 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à.
-
In
/apps
, apportare le modifiche desiderate.
-
-
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 durante la creazione delle pagine). Sono necessari in quanto:
-
Non apportare modifiche nel ramo
/libs
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
, pertanto il contenuto di/apps
ha una priorità maggiore rispetto a quello di/libs
(ovvero sovrapposizioni).
-
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: