Verwenden des Sling Resource Mergers in AEM as a Cloud Service using-the-sling-resource-merger-in-aem
Zweck purpose
Der Sling Resource Merger bietet Dienste für den Zugriff auf und das Zusammenführen von Ressourcen. Er stellt Differenzierungsmechanismen bereit für:
-
Überlagerungen von Ressourcen unter Verwendung der Suchpfade.
-
Überschreibungen von Komponentendialogfeldern für die Touch-optimierte Benutzeroberfläche (
cq:dialog) unter Verwendung der Ressourcentyphierarchie (anhand der Eigenschaftsling:resourceSuperType).
Mit dem Sling Resource Merger werden die Überlagerungs-/Überschreibungsressourcen bzw. -eigenschaften mit den ursprünglichen Ressourcen/Eigenschaften zusammengeführt:
-
Der Inhalt der angepassten Definition hat eine höhere Priorität als der des Originals (d. h. er überlagert oder überschreibt dieses).
-
Wo nötig, geben bei der Anpassung definierte Eigenschaften an, wie aus dem Original zusammengeführte Inhalte zu verwenden sind.
Ziele für AEM goals-for-aem
Die Ziele der Verwendung des Sling Resource Merger in AEM lauten wie folgt:
-
Sicherstellen, dass Anpassungsänderungen nicht in
/libsvorgenommen werden -
Die Struktur reduzieren, die von
/libsrepliziert wirdBei Verwendung des Sling Resource Merger wird nicht empfohlen, die gesamte Struktur aus
/libszu kopieren, da so zu viele Informationen in der Anpassung (im Allgemeinen/apps) gespeichert werden würden. Das unnötige Duplizieren von Daten erhöht die Wahrscheinlichkeit von Problemen, wenn für das System ein Upgrade jedweder Art durchgeführt wird.
/libs vornehmen./libs ggf. überschrieben werden kann, wenn Upgrades auf Ihre Instanz angewendet werden.-
Überlagerungen sind von Suchpfaden abhängig.
-
Überschreibungen hängen nicht von Suchpfaden ab, sie nutzen die Eigenschaft
sling:resourceSuperTypezur Herstellung der Verbindung.
/apps definiert, denn die Best Practice in AEM as a Cloud Service besteht in der Definition von Anpassungen unter /apps, weil Sie unter /libs keine Änderungen vornehmen dürfen.Eigenschaften properties
Der Resource Merger stellt die folgenden Eigenschaften zur Verfügung:
-
sling:hideProperties(StringoderString[])Gibt die Eigenschaft bzw. Liste der Eigenschaften an, die ausgeblendet werden sollen.
Der Platzhalter
*blendet alles aus. -
sling:hideResource(Boolean)Gibt an, ob die Ressourcen vollständig ausgeblendet werden sollen, einschließlich ihrer untergeordneten Elemente.
-
sling:hideChildren(StringoderString[])Enthält den untergeordneten Knoten bzw. die Liste der untergeordneten Knoten, die ausgeblendet werden sollen. Die Eigenschaften des Knotens werden beibehalten.
Der Platzhalter
*blendet alles aus. -
sling:orderBefore(String)Enthält den Namen des gleichrangigen Knotens, vor dem der aktuelle Knoten platziert werden soll.
Diese Eigenschaften beeinflussen, wie die entsprechenden/ursprünglichen Ressourcen/Eigenschaften (aus /libs) von den Überlagerungen/Überschreibungen (häufig in /apps) verwendet werden.
Erstellen der Struktur creating-the-structure
Zum Erstellen einer Überlagerung oder Überschreibung müssen Sie den ursprünglichen Knoten mit der äquivalenten Struktur unterhalb des Ziels (häufig /apps) neu erstellen. Beispiel:
-
Überlagerung
-
Die Definition des Navigationseintrags für die Sites-Konsole, wie sie in der Leiste angezeigt ist, wird definiert unter:
/libs/cq/core/content/nav/sites/jcr:title -
Erstellen Sie zum Überlagern folgenden Knoten:
/apps/cq/core/content/nav/sitesAktualisieren Sie dann die Eigenschaft
jcr:titlenach Bedarf.
-
-
Überschreibung
-
Die Definition des Touch-fähigen Dialogfelds für die Textkonsole ist definiert unter:
/libs/foundation/components/text/cq:dialog -
Um dies zu überschreiben, erstellen Sie den folgenden Knoten, z. B.:
/apps/the-project/components/text/cq:dialog
-
Um eine dieser beiden Optionen zu erstellen, müssen Sie nur die Skelettstruktur neu erstellen. Zum Vereinfachen der Neuerstellung der Struktur können alle dazwischenliegenden Knoten vom Typ nt:unstructured sein (sie müssen nicht dem ursprünglichen Knotentyp entsprechen, z. B. in /libs).
Somit werden im obigen Überlagerungsbeispiel die folgenden Knoten benötigt:
/apps
/cq
/core
/content
/nav
/sites
/libs zu kopieren, da so zu viele Informationen in /apps gespeichert würden. Dies führt u. U. zu Problemen, wenn für das System ein Upgrade jedweder Art durchgeführt wird.Anwendungsfälle use-cases
Diese ermöglichen Ihnen zusammen mit den Standardfunktionen Folgendes:
-
Eigenschaft hinzufügen
Die Eigenschaft ist nicht in der
/libs-Definition vorhanden, ist in der/apps-Überlagerung/-Überschreibung aber erforderlich.- Erstellen Sie den entsprechenden Knoten in
/apps. - Erstellen Sie die neue Eigenschaft auf diesem Knoten.
- Erstellen Sie den entsprechenden Knoten in
-
Eigenschaft neu definieren (nicht automatisch erstellte Eigenschaften)
Die Eigenschaft ist in
/libsdefiniert, aber für die/apps-Überlagerung/-Überschreibung ist ein neuer Wert erforderlich.-
Erstellen Sie den entsprechenden Knoten in
/apps. -
Erstellen Sie die entsprechende Eigenschaft auf diesem Knoten (unter /
apps).-
Die Eigenschaft verfügt über eine Priorität, die auf der Konfiguration des Sling Resource Resolver basiert.
-
Das Ändern des Eigenschaftstyps wird unterstützt.
Wenn Sie einen Eigenschaftstyp verwenden, der sich von dem in
/libsverwendeten unterscheidet, wird der von Ihnen definierte Eigenschaftstyp verwendet.
-
note note NOTE Das Ändern des Eigenschaftstyps wird unterstützt. -
-
Automatisch erstellte Eigenschaft neu definieren
Standardmäßig unterliegen automatisch erstellte Eigenschaften (z. B.
jcr:primaryType) keinen Überlagerungen/Überschreibungen, um sicherzustellen, dass der aktuell unter/libsbefindliche Knotentyp respektiert wird. Um eine Überschreibung/Überlagerung vorzuschreiben, müssen Sie den Knoten in/appsneu erstellen, die Eigenschaft ausdrücklich ausblenden und neu definieren:-
Erstellen Sie den entsprechenden Knoten unter
/appsmit dem gewünschtenjcr:primaryType. -
Erstellen Sie die Eigenschaft
sling:hidePropertiesauf diesem Knoten, wobei der Wert auf den Wert der automatisch erstellten Eigenschaft eingestellt ist, zum Beispieljcr:primaryType.Diese Eigenschaft, die unter
/appsdefiniert wird, hat jetzt Vorrang vor der Eigenschaft, die unter/libsdefiniert wurde.
-
-
Knoten und zugehörige untergeordnete Elemente neu definieren
Der Knoten und seine untergeordneten Elemente sind in
/libsdefiniert, aber in der/apps-Überlagerung/Überschreibung wird eine neue Konfiguration benötigt.-
Kombinieren Sie folgende Aktionen:
- Untergeordnete Elemente eines Knotens ausblenden (wobei die Eigenschaften des Knotens beibehalten werden)
- Eigenschaft(en) neu definieren
-
-
Eigenschaft ausblenden
Die Eigenschaft ist in
/libsdefiniert, ist aber für die/apps-Überlagerung/-Überschreibung nicht erforderlich.-
Erstellen Sie den entsprechenden Knoten in
/apps. -
Erstellen Sie eine Eigenschaft
sling:hidePropertiesvom TypStringoderString[]. Geben Sie hiermit an, ob die Eigenschaften verborgen/ignoriert werden sollen. Platzhalter können auch verwendet werden. Beispiel:*["*"]jcr:title["jcr:title", "jcr:description"]
-
-
Knoten und zugehörige untergeordnete Elemente ausblenden
Der Knoten und seine untergeordneten Elemente sind in
/libsdefiniert, aber für die/apps-Überlagerung/-Überschreibung nicht erforderlich.-
Erstellen Sie den entsprechenden Knoten unter /apps.
-
Erstellen Sie eine Eigenschaft
sling:hideResource.- Typ:
Boolean - Wert:
true
- Typ:
-
-
Untergeordnete Elemente eines Knotens ausblenden (wobei die Eigenschaften des Knotens beibehalten werden)
Der Knoten, seine Eigenschaften und seine untergeordneten Elemente sind in
/libsdefiniert. Der Knoten und seine Eigenschaften sind in der/apps-Überlagerung/-Überschreibung erforderlich, aber einige oder alle der untergeordneten Knoten sind in der/apps-Überlagerung/-Überschreibung nicht erforderlich.-
Erstellen Sie den entsprechenden Knoten unter
/apps -
Erstellen Sie die Eigenschaft
sling:hideChildren:- Typ:
String[] - Wert: eine Liste der auszublendenden/zu ignorierenden untergeordneten Knoten (wie definiert in
/libs)
Mit dem Platzhalter * können Sie alle untergeordneten Knoten ausblenden/ignorieren.
- Typ:
-
-
Knoten neu anordnen
Der Knoten und die ihm gleichrangigen Elemente sind in
/libsdefiniert. Eine neue Position ist erforderlich, damit der Knoten in der/apps-Überlagerung/-Überschreibung neu erstellt wird, wobei die neue Position als Verweis auf den entsprechenden gleichrangigen Knoten in/libsdefiniert ist.-
Verwenden Sie die Eigenschaft
sling:orderBefore:-
Erstellen Sie den entsprechenden Knoten unter
/apps -
Erstellen Sie die Eigenschaft
sling:orderBefore:Dies gibt den Knoten (wie in
/libs) an, vor dem der aktuelle Knoten positioniert werden soll:- Typ:
String - Wert:
<before-SiblingName>
- Typ:
-
-
Aufrufen des Sling Resource Merger aus dem Code invoking-the-sling-resource-merger-from-your-code
Der Sling Resource Merger umfasst zwei benutzerdefinierte Ressourcenanbieter – einen für Überlagerungen und einen für Überschreibungen. Beide werden in Ihrem Code anhand eines Einhängepunkts abgerufen:
/libs repliziert werden muss).-
Überlagerung:
-
Zweck: Ressourcen anhand ihrer Suchpfade zusammenführen
-
Einhängepunkt:
/mnt/overlay -
Anwendung:
mount point + relative path -
Beispiel:
getResource('/mnt/overlay' + '<relative-path-to-resource>');
-
-
Überschreibung:
-
Zweck: Ressourcen anhand ihrer Supertypen zusammenführen
-
Einhängepunkt:
/mnt/overide -
Anwendung:
mount point + absolute path -
Beispiel:
getResource('/mnt/override' + '<absolute-path-to-resource>');
-