AEM (und zuvor CQ) nutzt seit Langem Überlagerungen, um die Konsolen und andere Funktionen (beispielsweise die Seitenbearbeitung) zu erweitern und anzupassen.
Der Begriff „Überlagerung“ kann in unterschiedlichen Zusammenhängen verwendet werden. In diesem Zusammenhang (der Erweiterung von AEM) ist damit die Übernahme der vordefinierten Funktionen und das Anwenden eigener Definitionen (zum Anpassen der Standardfunktionen) gemeint.
In einer Standardinstanz befindet sich die vordefinierte Funktion unter /libs
und es empfiehlt sich, die Überlagerung (Anpassungen) unter der Verzweigung /apps
zu definieren. AEM verwendet einen Suchpfad, um eine Ressource zu finden, wobei zuerst die Verzweigung /apps
und dann die Verzweigung /libs
durchsucht wird (der Suchpfad kann konfiguriert werden). Durch diesen Mechanismus hat Ihre Überlagerung (und die dort definierten Anpassungen) Priorität.
Seit Einführung von AEM 6.0 wurden Änderungen an der Implementierung und Verwendung von Überlagerungen vorgenommen:
Ab AEM 6.0 – für Granite-bezogene Überlagerungen (d. h. Touch-optimierte Benutzeroberfläche)
Methode
Rekonstruieren Sie die entsprechende /libs
-Struktur unter /apps
.
Dies erfordert keine 1:1-Kopie, der Sling Resource Merger wird verwendet, um die erforderlichen Originaldefinitionen zu vergleichen. Der Sling Resource Merger stellt Services für den Zugriff auf und die Zusammenführung von Ressourcen mittels Vergleichsmechanismen bereit.
Nehmen Sie beliebige Änderungen unter /apps
vor.
Vorteile
/libs
.Überlagerungen, die nicht aus Granite stammen, und Überlagerungen in Versionen vor AEM 6.0
Methode
Kopieren der Inhalte von /libs
nach /apps
Sie müssen die gesamte Unterverzweigung einschließlich der Eigenschaften kopieren.
Nehmen Sie beliebige Änderungen unter /apps
vor.
Nachteile
/libs
ändert, müssen Sie möglicherweise bestimmte Änderungen in Ihrer Überlagerung unter /apps
neu erstellen.Der Sling Resource Merger und die zugehörigen Methoden können nur mit Granite verwendet werden. Das bedeutet, dass die Erstellung einer Überlagerung mit einem Strukturgerüst nur für die standardmäßige Touch-optimierte Benutzeroberfläche geeignet ist.
Bei Überlagerungen für andere Bereiche (einschließlich der klassischen Benutzeroberfläche) werden der entsprechende Knoten und die gesamte Unterstruktur kopiert und die erforderlichen Änderungen vorgenommen.
Überlagerungen empfehlen sich für viele Änderungen, beispielsweise das Konfigurieren von Konsolen oder Erstellen der Auswahlkategorie für den Asset-Browser im seitlichen Bedienfeld (wird bei der Seitenbearbeitung verwendet). Sie sind aus folgenden Gründen erforderlich:
Sie dürfen **keine Änderungen in der Verzweigung /libs
vornehmen.**Jegliche Änderungen, die Sie vornehmen, können verloren gehen, da diese Verzweigung in den folgenden Fällen Änderungen unterliegt:
Überlagerungen bündeln Ihre Änderungen an zentraler Stelle und erleichtern es Ihnen, Ihre Änderungen zu verfolgen, zu migrieren, zu sichern und/oder zu debuggen.
Bei Überlagerungen ist die bereitgestellte Ressource ein Aggregat der abgerufenen Ressourcen und Eigenschaften, abhängig von den definierbaren Suchpfaden:
Der Suchpfad des Ressourcen-Resolvers wie in der OSGi-Konfiguration für die Apache Sling-Resource Resolver Factory definiert
/apps
, /libs
– der Inhalt von /apps
hat also eine höhere Priorität als der von /libs
, (d. h. er überlagert diesen).Zwei Dienstbenutzer benötigen JCR:READ-Zugriff auf den Speicherort der Skripte. Diese Benutzer sind: „components-search-service“ (verwendet von den com.day.cq.wcm.coreto access/cache-Komponenten) und „sling-scripting“ (verwendet von „org.apache.sling.servlets.resolver“, um Servlets zu finden).
Die folgende Konfiguration muss außerdem so konfiguriert werden, dass sie dem Speicherort für Ihre Skripte entspricht (in diesem Beispiel unter /etc, /libs oder /apps).
PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
resource.resolver.searchpath=["/etc","/apps","/libs"]
resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
Schließlich muss noch der Servlet Resolver konfiguriert werden (in diesem Beispiel auch, um /etc hinzuzufügen).
PID = org.apache.sling.servlets.resolver.SlingServletResolver
servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
Überlagerungen kommen unter anderem in den folgenden Fällen zur Anwendung: