Show Menu
ARGOMENTI×

Utilizzo di Sling Resource Merger in AEM come Cloud Service

Scopo

Sling Resource Merger fornisce servizi per accedere e unire le risorse. Fornisce meccanismi di diff (differenziazione) per entrambi:
  • Sovrapposizioni ​di risorse tramite i percorsi di ricerca.
  • Ignora le finestre di dialogo dei componenti per l’interfaccia touch ( cq:dialog ), utilizzando la gerarchia dei tipi di risorse (tramite la proprietà sling:resourceSuperType ).
Con Sling Resource Merger, le risorse e/o le proprietà di sovrapposizione/esclusione vengono unite con le risorse/proprietà originali:
  • Il contenuto della definizione personalizzata ha una priorità maggiore rispetto a quello dell'originale (ovvero sovrapposizioni o sostituzioni ).
  • Se necessario, le proprietà definite nella personalizzazione indicano in che modo verrà utilizzato il contenuto unito dall'originale.
Sling Resource Merger e i metodi correlati possono essere utilizzati solo con l’interfaccia touch (che è l’unica interfaccia disponibile per AEM come Cloud Service).

Obiettivi di AEM

Gli obiettivi per l’utilizzo di Sling Resource Merger in AEM sono:
  • accertatevi che le modifiche alla personalizzazione non vengano effettuate in /libs .
  • ridurre la struttura da cui viene replicata /libs .
    Quando si utilizza la Fusione risorse Sling si consiglia di non copiare l'intera struttura da /libs perché ciò comporterebbe la conservazione di troppe informazioni nella personalizzazione (in genere /apps ). Duplicare le informazioni aumenta inutilmente la possibilità di problemi quando il sistema viene aggiornato in qualsiasi modo.
Non devi cambiare nulla nel /libs percorso.
Questo perché il contenuto di /libs potrebbe essere sovrascritto in qualsiasi momento gli aggiornamenti vengono applicati all'istanza.
  • Le sovrapposizioni dipendono dai percorsi di ricerca.
  • Le sostituzioni non dipendono dai percorsi di ricerca, bensì usano la proprietà sling:resourceSuperType per creare la connessione.
Tuttavia, le sostituzioni sono spesso definite in /apps , come procedura ottimale in AEM come Cloud Service, per definire le personalizzazioni in /apps ; questo è perché non devi cambiare niente sotto /libs .

Proprietà

La fusione delle risorse fornisce le seguenti proprietà:
  • sling:hideProperties ( String o 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 i relativi elementi figlio.
  • sling:hideChildren ( String o String[] )
    Contiene il nodo secondario, o elenco di nodi secondari, da nascondere. Le proprietà del nodo verranno mantenute.
    Il carattere jolly * nasconde tutto.
  • sling:orderBefore ( String )
    Contiene il nome del nodo di pari livello al quale il nodo corrente deve essere posizionato davanti.
Queste proprietà influiscono sul modo in cui le risorse/proprietà (da /libs ) corrispondenti/originali vengono utilizzate dalla sovrapposizione/sostituzione (spesso in /apps ).

Creazione della struttura

Per creare una sovrapposizione o una sostituzione, è necessario ricreare il nodo originale, con la struttura equivalente, sotto la destinazione (in genere /apps ). Ad esempio:
  • Sovrapposizione
    • La definizione della voce di navigazione per la console Siti, come illustrato nella barra laterale, è definita in:
      /libs/cq/core/content/nav/sites/jcr:title
    • Per sovrapporre questo, create il seguente nodo:
      /apps/cq/core/content/nav/sites
      Quindi aggiornate la proprietà jcr:title come necessario.
  • Override
    • La definizione della finestra di dialogo touch per la console Testo è definita in:
      /libs/foundation/components/text/cq:dialog
    • Per ignorare questo problema, create il seguente nodo, ad esempio:
      /apps/the-project/components/text/cq:dialog
Per creare una di queste è sufficiente ricreare la struttura dell'ossatura. 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 la funzione Sling Resource Merger (ovvero quando si utilizza l’interfaccia touch standard), si consiglia di non copiare l’intera struttura da /libs tale funzionalità, in quanto comporterebbe la memorizzazione di troppe informazioni /apps . Ciò può causare problemi quando il sistema viene aggiornato in qualsiasi modo.

Use Cases

Questi, insieme alle funzionalità standard, consentono di:
  • Aggiunta di una proprietà
    La proprietà non esiste nella /libs definizione, ma è obbligatoria nella /apps sovrapposizione o nella sostituzione.
    1. Crea il nodo corrispondente all'interno /apps
    2. Crea la nuova proprietà su questo nodo "
  • Ridefinire una proprietà (proprietà non create automaticamente)
    La proprietà è definita in /libs , ma è necessario un nuovo valore nella /apps sovrapposizione/sostituzione.
    1. Crea il nodo corrispondente all'interno /apps
    2. 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 si utilizza un tipo di proprietà diverso da quello utilizzato in /libs , verrà 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 (come jcr:primaryType ) non sono soggette a sovrapposizione/override per garantire che il tipo di nodo attualmente in uso /libs sia rispettato. Per imporre una sovrapposizione/sostituzione è necessario ricreare il nodo in /apps , nascondere esplicitamente la proprietà e ridefinirla:
    1. Crea il nodo corrispondente sotto /apps con quello desiderato jcr:primaryType
    2. Creare la proprietà sling:hideProperties su tale nodo, con il valore impostato su quello della proprietà creata automaticamente; ad esempio, jcr:primaryType
      Questa proprietà, definita in /apps , avrà ora priorità rispetto a quella definita in /libs
  • Ridefinire un nodo e i relativi elementi secondari
    Il nodo e i relativi elementi secondari sono definiti in /libs , ma è necessaria una nuova configurazione nella /apps sovrapposizione/sostituzione.
    1. Combinare le azioni di:
      1. Nascondere gli elementi secondari di un nodo (mantenendo le proprietà del nodo)
      2. Ridefinire proprietà/proprietà
  • Nascondere una proprietà
    La proprietà è definita in /libs , ma non è necessaria nella /apps sovrapposizione/sostituzione.
    1. Crea il nodo corrispondente all'interno /apps
    2. Creare una proprietà sling:hideProperties di tipo String o String[] . Utilizzate questa opzione per specificare le proprietà da nascondere o ignorare. È inoltre possibile utilizzare i caratteri jolly. Ad esempio:
      • *
      • ["*"]
      • jcr:title
      • ["jcr:title", "jcr:description"]
  • Nascondere un nodo e i relativi elementi secondari
    Il nodo e i relativi elementi secondari sono definiti in /libs , ma non sono richiesti nella /apps sovrapposizione/sostituzione.
    1. Crea il nodo corrispondente in /apps
    2. Creare una proprietà sling:hideResource
      • tipo: Boolean
      • valore: true
  • Nascondere gli elementi secondari di un nodo (mantenendo le proprietà del nodo)
    Il nodo, le relative proprietà e i relativi elementi secondari sono definiti in /libs . Il nodo e le relative proprietà sono obbligatori nella /apps sovrapposizione/sostituzione, ma alcuni o tutti i nodi secondari non sono richiesti nella /apps sovrapposizione/sostituzione.
    1. Crea il nodo corrispondente sotto /apps
    2. Creare la proprietà sling:hideChildren :
      • tipo: String[]
      • value: un elenco dei nodi secondari (come definito in /libs ) da nascondere/ignorare
      Il 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 per ricreare il nodo nella /apps sovrapposizione/sostituzione, dove la nuova posizione viene definita in riferimento al nodo di pari livello appropriato in /libs .
    • Utilizzare la sling:orderBefore proprietà:
      1. Crea il nodo corrispondente sotto /apps
      2. Creare la proprietà sling:orderBefore :
        Indica il nodo (come in /libs ) in cui il nodo corrente deve essere posizionato prima:
        • tipo: String
        • valore: <before-SiblingName>

Richiamo di Sling Resource Merger dal codice

Sling Resource Merger include due provider di risorse personalizzate, 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 accedete 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 replicare /libs ).
  • Sovrapposizione:
    • finalità: unire risorse in base al percorso di ricerca
    • punto di montaggio: /mnt/overlay
    • usage: mount point + relative path
    • esempio:
      • getResource('/mnt/overlay' + '<relative-path-to-resource>');
  • Ignora:
    • finalità: unire le risorse in base al relativo super-type
    • punto di montaggio: /mnt/overide
    • usage: mount point + absolute path
    • esempio:
      • getResource('/mnt/override' + '<absolute-path-to-resource>');