Verwenden des Sling Resource Merger in AEM 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 konfigurierten Suchpfade.
-
Überschreibungen von Komponentendialogfeldern für die Touch-optimierte Benutzeroberfläche (
cq:dialog) unter Verwendung der Ressourcentyphierarchie (anhand der Eigenschaftsling:resourceSuperType).
Sling Resource Merger kombiniert Überlagerungsressourcen und Überschreibungsressourcen (und ihre Eigenschaften) mit den ursprünglichen Ressourcen und Eigenschaften:
-
Der Inhalt der angepassten Definition hat eine höhere Priorität als das Original. Das heißt, sie überlagert oder überschreibt.
-
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 von Sling Resource Merger wird nicht empfohlen, die gesamte Struktur aus
/libszu kopieren. Der Grund dafür ist, dass dies dazu führen würde, dass zu viele Informationen in der Anpassung (normalerweise/apps) gespeichert werden. Das unnötige Duplizieren von Informationen erhöht die Wahrscheinlichkeit von Problemen, wenn das System aktualisiert wird.
sling:resourceSuperType , um die Verbindung herzustellen./apps definiert, denn die Best Practice in AEM besteht in der Definition von Anpassungen unter /apps. Der Grund dafür ist, dass Sie unter /libs nichts ändern dürfen./libs vornehmen./libs überschrieben wird, wenn Sie Ihre Instanz das nächste Mal aktualisieren. Es kann auch überschrieben werden, wenn Sie einen Hotfix oder ein Feature Pack anwenden.-
Erstellen Sie das erforderliche Element unter
/appsneu (d. h. wie es in/libsexistiert). -
Nehmen Sie die gewünschten Änderungen in
/appsvor.
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 sind, einschließlich ihrer untergeordneten Elemente.
-
sling:hideChildren(StringoderString[])Sie 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)Sie enthält den Namen des gleichrangigen Knotens, vor dem sich der aktuelle Knoten befindet.
Diese Eigenschaften beeinflussen, wie die entsprechenden / ursprünglichen Ressourcen / Eigenschaften (aus /libs) von der Überlagerung / Überschreibung (oft 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 den folgenden Knoten:
/apps/cq/core/content/nav/sitesAktualisieren Sie dann die Eigenschaft
jcr:titlenach Bedarf.
-
-
Überschreibung
-
Das Touch-optimierte Dialogfeld für die Textkonsole wird wie folgt definiert:
/libs/foundation/components/text/cq:dialog -
Um dies zu überschreiben, erstellen Sie den folgenden Knoten. Zum Beispiel:
/apps/the-project/components/text/cq:dialog
-
Um eines von beiden zu erstellen, müssen Sie nur die Skelettstruktur neu erstellen. Um die Neuerstellung der Struktur zu vereinfachen, können alle dazwischenliegenden Knoten vom Typ nt:unstructured sein (sie müssen nicht dem ursprünglichen Knotentyp entsprechen). Zum Beispiel in /libs.
Im obigen Überlagerungsbeispiel werden daher die folgenden Knoten benötigt:
/apps
/cq
/core
/content
/nav
/sites
/libs zu kopieren. Der Grund dafür ist, dass es dazu führen würde, dass zu viele Informationen in /apps gespeichert würden. Dies kann zu Problemen führen, wenn das System aktualisiert wird.Anwendungsfälle use-cases
Mit der Standardfunktion können Sie in diesen Anwendungsfällen Folgendes tun:
-
Eigenschaft hinzufügen
Die Eigenschaft ist nicht in der
/libsvorhanden, ist aber in der/apps-Überlagerung/-Überschreibung 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 hat 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 Überlagerung/Überschreibung vorzuschreiben, müssen Sie den Knoten in/appsneu erstellen, die Eigenschaft explizit 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/Eigenschaften 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[]. Dient zum Angeben der Eigenschaften, die ausgeblendet/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 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 in
/libsdefiniert)
Mit dem Platzhalter * können Sie alle untergeordneten Knoten ausblenden oder ignorieren.
- Typ:
-
-
Knoten neu anordnen
Der Knoten und die ihm gleichrangigen Elemente sind in
/libsdefiniert. Um die Reihenfolge zu ändern, erstellen Sie den Knoten in der/appsÜberlagerung oder Überschreibung neu. Definieren Sie seine neue Position, indem Sie auf den entsprechenden gleichrangigen Knoten in/libsverweisen.-
Verwenden Sie die Eigenschaft
sling:orderBefore:-
Erstellen Sie den entsprechenden Knoten unter
/apps -
Erstellen Sie die Eigenschaft
sling:orderBefore:Gibt den Knoten (wie in
/libs) an, vor dem der aktuelle Knoten positioniert ist:- Typ:
String - Wert:
<before-SiblingName>
- Typ:
-
-
Rufen Sie den Sling Resource Merger aus Ihrem Code auf 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. Jede kann innerhalb Ihres Codes mithilfe eines Bereitstellungspunkts aufgerufen werden:
/libs kopieren müssen.-
Ü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>');
-
Anwendungsbeispiel example-of-usage
Einige Beispiele sind enthalten:
-
Überlagerung:
-
Überschreibung: