Utilisation de Sling Resource Merger dans AEM using-the-sling-resource-merger-in-aem
Objectif purpose
Sling Resource Merger propose des services pour accéder à des ressources et les fusionner. Il fournit des mécanismes de différenciation pour les deux éléments ci-après :
-
Les recouvrements de ressources à l’aide de chemins de recherche configurés.
-
Remplacements de boîtes de dialogue de composant pour l’interface utilisateur tactile (
cq:dialog), à l’aide de la hiérarchie des types de ressource (par le biais de la propriétésling:resourceSuperType).
Sling Resource Merger combine les ressources de recouvrement et de remplacement (et leurs propriétés) avec les ressources et propriétés d’origine :
-
Le contenu de la définition personnalisée a une priorité supérieure à l’original. En d’autres termes, il recouvre ou remplace.
-
Si nécessaire, les propriétés définies dans la personnalisation indiquent comment utiliser le contenu fusionné à partir de l’original.
Objectifs pour AEM goals-for-aem
Sling Resource Merger est utilisé dans AEM pour deux raisons principales :
-
S’assurer que les changements de personnalisation ne sont pas effectués dans
/libs. -
Réduire la structure qui est répliquée à partir de
/libs.Lors de l’utilisation de Sling Resource Merger, il n’est pas recommandé de copier toute la structure depuis
/libs. En effet, cela entraînerait le stockage d’une trop grande quantité d’informations dans la personnalisation (généralement/apps). La duplication des informations augmente inutilement le risque de problèmes lors de la mise à niveau du système.
sling:resourceSuperType pour établir la connexion./apps, car une pratique recommandée dans AEM consiste à définir des personnalisations sous /apps. En effet, vous ne devez rien modifier sous /libs./libs./libs sera écrasé la prochaine fois que vous mettrez à niveau votre instance. Et elle peut très bien être remplacée lorsque vous appliquez un correctif ou un pack de fonctionnalités.-
Recréez l’élément requis (tel qu’il existe dans
/libs) sous/apps. -
Apportez les modifications désirées dans
/apps.
Propriétés properties
Resource Merger fournit les propriétés suivantes :
-
sling:hideProperties(StringouString[])Indique la propriété, ou la liste des propriétés, à masquer.
Le caractère générique
*masque tout. -
sling:hideResource(Boolean)Elle indique si les ressources sont complètement masquées, y compris ses enfants.
-
sling:hideChildren(StringouString[])Il contient le nœud enfant, ou la liste des nœuds enfants, à masquer. Les propriétés du nœud sont conservées.
Le caractère générique
*masque tout. -
sling:orderBefore(String)Il contient le nom du nœud frère devant lequel le nœud actif est positionné.
Ces propriétés affectent la manière dont les ressources/propriétés d’origine correspondantes (à partir de /libs) sont utilisées par le recouvrement/remplacement (souvent en /apps).
Création de la structure creating-the-structure
Pour créer un recouvrement ou un remplacement, vous devez recréer le nœud d’origine, avec la structure équivalente, sous la destination (qui est généralement /apps). Par exemple :
-
Recouvrement
-
La définition de l’entrée de navigation pour la console Sites, comme illustrée dans le rail, est définie à l’emplacement suivant :
/libs/cq/core/content/nav/sites/jcr:title -
Pour superposer, créez le nœud suivant :
/apps/cq/core/content/nav/sitesMettez ensuite la propriété
jcr:titleà jour selon les besoins.
-
-
Remplacement
-
La définition de la boîte de dialogue tactile de la console Textes est la suivante :
/libs/foundation/components/text/cq:dialog -
Pour remplacer, créez le nœud suivant. Par exemple :
/apps/the-project/components/text/cq:dialog
-
Pour créer l’un ou l’autre, il vous suffit de recréer la structure du squelette. Pour simplifier la recréation de la structure, tous les nœuds intermédiaires peuvent être de type nt:unstructured (ils ne doivent pas nécessairement refléter le type de nœud d’origine). Par exemple, dans /libs.
Ainsi, dans l’exemple de recouvrement ci-dessus, les nœuds suivants sont nécessaires :
/apps
/cq
/core
/content
/nav
/sites
/libs. C'est parce que cela entraînerait la conservation d'une trop grande quantité d'information au /apps. Par conséquent, cela peut entraîner des problèmes lorsque le système est mis à niveau.Cas d’utilisation use-cases
Avec les fonctionnalités standard, ces cas d’utilisation vous permettent d’effectuer les opérations suivantes :
-
Ajouter une propriété
La propriété n’existe pas dans la définition de
/libs, mais est requise dans le recouvrement/remplacement/apps.- Créez le nœud correspondant dans
/apps. - Créez la propriété sur ce nœud.
- Créez le nœud correspondant dans
-
Redéfinir une propriété (pas les propriétés créées automatiquement)
La propriété est définie dans
/libs, mais une nouvelle valeur est requise dans le recouvrement/remplacement/apps.-
Créez le nœud correspondant dans
/apps. -
Créez la propriété correspondante sur ce nœud (sous
apps)-
La propriété a une priorité basée sur la configuration du résolveur de ressource Sling.
-
La modification du type de propriété est prise en charge.
Si vous utilisez un type de propriété différent de celui utilisé dans
/libs, c’est le type que vous avez défini qui est utilisé.
-
note note NOTE La modification du type de propriété est prise en charge. -
-
Redéfinir une propriété créée automatiquement
Par défaut, les propriétés créées automatiquement (telles que
jcr:primaryType) ne sont pas soumises à une opération de recouvrement/remplacement pour s’assurer que le type de nœud actuellement sous/libsest respecté. Pour imposer un recouvrement/remplacement, vous devez recréer le nœud dans/apps, masquer explicitement la propriété et la redéfinir :-
Créez le nœud correspondant sous
/appsavec la propriétéjcr:primaryTypesouhaitée. -
Créez la propriété
sling:hidePropertiessur ce nœud, avec la valeur définie sur celle de la propriété créée automatiquement ; par exemple,jcr:primaryTypeCette propriété, définie sous
/apps, est désormais prioritaire sur celle définie sous/libs
-
-
Redéfinir un nœud et ses enfants
Le nœud et ses enfants sont définis dans
/libs, mais une nouvelle configuration est requise dans le recouvrement/remplacement/apps.-
Combinez les actions des éléments suivants :
- Masquer les enfants d’un nœud (en conservant les propriétés du nœud)
- Redéfinition de la propriété / des propriétés
-
-
Masquer une propriété
La propriété est définie dans
/libs, mais n’est pas requise dans le recouvrement/remplacement/apps.-
Créez le nœud correspondant dans
/apps. -
Créez une propriété
sling:hidePropertiesde typeStringouString[]. Permet de spécifier les propriétés à masquer/ignorer. Vous pouvez également utiliser des caractères génériques. Par exemple :*["*"]jcr:title["jcr:title", "jcr:description"]
-
-
Masquer un nœud et ses enfants
Le nœud et ses enfants sont définis dans
/libs, mais ne sont pas requis dans le recouvrement/remplacement/apps.-
Créez le nœud correspondant sous
/apps -
Créez une propriété
sling:hideResource- type :
Boolean - value :
true
- type :
-
-
Masquer les enfants d’un nœud (tout en conservant les propriétés du nœud)
Le nœud, ses propriétés et ses enfants sont définis dans
/libs. Le nœud et ses propriétés sont requis dans le recouvrement/remplacement/apps, mais certains ou tous les nœuds enfants ne sont pas requis dans le recouvrement/remplacement/apps.-
Créez le nœud correspondant sous
/apps -
Créez la propriété
sling:hideChildren:- type :
String[] - value : liste des nœuds enfants (tels que définis dans
/libs) à masquer/ignorer
Le caractère générique * peut être utilisé pour masquer ou ignorer tous les nœuds enfants.
- type :
-
-
Réorganiser les nœuds
Le nœud et ses frères sont définis dans
/libs. Pour modifier l’ordre, recréez le nœud dans la superposition ou le remplacement de/apps. Définissez sa nouvelle position en référençant le nœud frère approprié dans/libs.-
Utilisez la propriété
sling:orderBefore:-
Créez le nœud correspondant sous
/apps -
Créez la propriété
sling:orderBefore:Indique le nœud (comme dans
/libs) devant lequel le nœud actif est positionné :- type :
String - value :
<before-SiblingName>
- type :
-
-
Appeler Sling Resource Merger à partir de votre code invoking-the-sling-resource-merger-from-your-code
Sling Resource Merger comprend deux fournisseurs de ressources personnalisés : un pour les recouvrements et un autre pour les remplacements. Chaque peut être appelé dans votre code à l’aide d’un point de montage :
/libs.-
Recouvrement :
-
Objectif : fusionner les ressources en fonction de leur chemin de recherche
-
Point de montage :
/mnt/overlay -
Usage :
mount point + relative path -
Exemple :
getResource('/mnt/overlay' + '<relative-path-to-resource>');
-
-
Remplacement :
-
Objectif : fusionner les ressources en fonction de leur super-type
-
Point de montage :
/mnt/overide -
Usage :
mount point + absolute path -
Exemple :
getResource('/mnt/override' + '<absolute-path-to-resource>');
-
Exemple d’utilisation example-of-usage
Voici quelques exemples traités :
-
Recouvrement :
-
Remplacement :