Använda Sling Resource Merger i AEM using-the-sling-resource-merger-in-aem
Syfte purpose
Med Sling Resource Merger får du tillgång till och kan sammanfoga resurser. Den innehåller olika mekanismer (differentiering) för båda:
-
Övertäckningar med resurser som använder de konfigurerade sökvägarna.
-
Åsidosätter komponentdialogrutor för det beröringsaktiverade användargränssnittet (
cq:dialog
) med resurstyphierarkin (med egenskapensling:resourceSuperType
).
Med Sling Resource Merger sammanfogas överläggnings-/åsidosättningsresurserna och/eller egenskaperna med de ursprungliga resurserna/egenskaperna:
-
Innehållet i den anpassade definitionen har en högre prioritet än det ursprungliga (det vill säga övertäckningar eller åsidosätter).
-
Om det behövs visar egenskaper som definierats i anpassningen hur innehåll som sammanfogats från originalet ska användas.
Mål för AEM goals-for-aem
Målet med Sling Resource Merger i AEM är att
-
se till att inga anpassningar görs i
/libs
. -
minska strukturen som replikeras från
/libs
.När du använder Sling Resource Merger bör du inte kopiera hela strukturen från
/libs
eftersom det skulle resultera i att för mycket information hålls kvar i anpassningen (vanligen/apps
). Om du duplicerar information i onödan ökar risken för problem när systemet uppgraderas på något sätt.
sling:resourceSuperType
för att upprätta anslutningen./apps
, eftersom det bästa sättet i AEM är att definiera anpassningar under /apps
. Det beror på att du inte får ändra något under /libs
./libs
./libs
skrivs över nästa gång du uppgraderar din instans (och kan mycket väl skrivas över när du använder en snabbkorrigering eller ett funktionspaket).-
Återskapa det obligatoriska objektet (det vill säga som det finns i
/libs
) under/apps
-
Gör ändringar i
/apps
Egenskaper properties
Resurskoncentrationen har följande egenskaper:
-
sling:hideProperties
(String
ellerString[]
)Anger den egenskap, eller lista med egenskaper, som ska döljas.
Jokertecknet
*
döljer alla. -
sling:hideResource
(Boolean
)Anger om resurserna ska vara helt dolda, inklusive dess underordnade.
-
sling:hideChildren
(String
ellerString[]
)Innehåller den underordnade noden, eller listan med underordnade noder, som ska döljas. Egenskaperna för noden bevaras.
Jokertecknet
*
döljer alla. -
sling:orderBefore
(String
)Innehåller namnet på noden på samma nivå som den aktuella noden ska placeras framför.
De här egenskaperna påverkar hur motsvarande/ursprungliga resurser/egenskaper (från /libs
) används av övertäckningen/åsidosättningen (ofta i /apps
).
Skapa strukturen creating-the-structure
Om du vill skapa en övertäckning eller åsidosättning måste du återskapa den ursprungliga noden, med motsvarande struktur, under målet (vanligtvis /apps
). Till exempel:
-
Övertäckning
-
Definitionen av navigeringsposten för Sites-konsolen, som visas i järnvägen, definieras på:
/libs/cq/core/content/nav/sites/jcr:title
-
Om du vill täcka över det här skapar du följande nod:
/apps/cq/core/content/nav/sites
Uppdatera sedan egenskapen
jcr:title
efter behov.
-
-
Åsidosätt
-
Definitionen av den beröringsaktiverade dialogrutan för textkonsolen definieras på:
/libs/foundation/components/text/cq:dialog
-
Om du vill åsidosätta detta skapar du följande nod, till exempel:
/apps/the-project/components/text/cq:dialog
-
Om du vill skapa någon av dessa behöver du bara återskapa skelettstrukturen. För att förenkla återskapandet av strukturen kan alla mellanliggande noder vara av typen nt:unstructured
(de behöver inte återspegla den ursprungliga nodtypen, till exempel i /libs
).
I ovanstående övertäckningsexempel behövs alltså följande noder:
/apps
/cq
/core
/content
/nav
/sites
/libs
eftersom det skulle resultera i att för mycket information hålls i /apps
. Detta kan orsaka problem när systemet uppgraderas på något sätt.Användningsexempel use-cases
Tillsammans med standardfunktionerna kan du:
-
Lägg till en egenskap
Egenskapen finns inte i definitionen
/libs
, men krävs i/apps
-övertäckningen/åsidosättningen.- Skapa motsvarande nod i
/apps
- Skapa den nya egenskapen på den här noden "
- Skapa motsvarande nod i
-
Definiera om en egenskap (inte automatiskt skapade egenskaper)
Egenskapen definieras i
/libs
, men ett nytt värde krävs i/apps
-övertäckningen/åsidosättningen.-
Skapa motsvarande nod i
/apps
-
Skapa matchande egenskap på den här noden (under /
apps
)-
Egenskapen får en prioritet baserat på konfigurationen för Sling Resource Resolver.
-
Det går att ändra egenskapstypen.
Om du använder en annan egenskapstyp än den som används i
/libs
används den egenskapstyp som du definierar.
-
note note NOTE Det går att ändra egenskapstypen. -
-
Definiera om en egenskap som skapats automatiskt
Som standard omfattas inte automatiskt skapade egenskaper (till exempel
jcr:primaryType
) av någon övertäckning/åsidosättning för att säkerställa att den nodtyp som för närvarande finns under/libs
respekteras. Om du vill införa en övertäckning/åsidosättning måste du återskapa noden i/apps
, dölja egenskapen explicit och definiera om den:-
Skapa motsvarande nod under
/apps
med önskadjcr:primaryType
-
Skapa egenskapen
sling:hideProperties
på den noden med värdet inställt på den automatiskt skapade egenskapen, till exempeljcr:primaryType
Den här egenskapen, som definieras under
/apps
, får nu högre prioritet än den som definieras under/libs
-
-
Definiera om en nod och dess underordnade noder
Noden och dess underordnade noder definieras i
/libs
, men en ny konfiguration krävs i/apps
-övertäckningen/åsidosättningen.-
Kombinera åtgärder från:
- Dölj underordnade noder för en nod (behåller nodens egenskaper)
- Definiera om egenskapen/egenskaperna
-
-
Dölj en egenskap
Egenskapen definieras i
/libs
, men krävs inte i/apps
-övertäckningen/åsidosättningen.-
Skapa motsvarande nod i
/apps
-
Skapa egenskapen
sling:hideProperties
av typenString
ellerString[]
. Använd den här inställningen för att ange vilka egenskaper som ska döljas/ignoreras. Du kan också använda jokertecken. Till exempel:*
["*"]
jcr:title
["jcr:title", "jcr:description"]
-
-
Dölj en nod och dess underordnade noder
Noden och dess underordnade noder definieras i
/libs
, men krävs inte i/apps
-övertäckningen/åsidosättningen.-
Skapa motsvarande nod under /apps
-
Skapa en egenskap
sling:hideResource
- typ:
Boolean
- värde:
true
- typ:
-
-
Dölj underordnade noder för en nod (samtidigt som egenskaperna för noden behålls)
Noden, dess egenskaper och underordnade noder definieras i
/libs
. Noden och dess egenskaper krävs i/apps
-övertäckningen/åsidosättningen, men vissa eller alla underordnade noder krävs inte i/apps
-övertäckningen/åsidosättningen.-
Skapa motsvarande nod under
/apps
-
Skapa egenskapen
sling:hideChildren
:- typ:
String[]
- värde: en lista med underordnade noder (enligt definition i
/libs
) som ska döljas/ignoreras
Jokertecknet * kan användas för att dölja/ignorera alla underordnade noder.
- typ:
-
-
Ändra ordning på noder
Noden och dess jämställda noder definieras i
/libs
. En ny position krävs så att noden återskapas i/apps
-övertäckningen/åsidosättningen, där den nya positionen definieras med referens till lämplig nod på samma nivå i/libs
.-
Använd egenskapen
sling:orderBefore
:-
Skapa motsvarande nod under
/apps
-
Skapa egenskapen
sling:orderBefore
:Detta anger noden (som i
/libs
) som den aktuella noden ska placeras före:- typ:
String
- värde:
<before-SiblingName>
- typ:
-
-
Anropa Sling Resource Merger från koden invoking-the-sling-resource-merger-from-your-code
Sling Resource Merger innehåller två anpassade resursprovidrar - en för övertäckningar och en annan för åsidosättningar. Var och en av dessa kan anropas i koden med hjälp av en monteringspunkt:
/libs
).-
Övertäckning:
-
syfte: sammanfoga resurser baserat på deras sökväg
-
monteringspunkt:
/mnt/overlay
-
användning:
mount point + relative path
-
exempel:
getResource('/mnt/overlay' + '<relative-path-to-resource>');
-
-
Åsidosätt:
-
syfte: sammanfoga resurser baserat på deras supertyp
-
monteringspunkt:
/mnt/overide
-
användning:
mount point + absolute path
-
exempel:
getResource('/mnt/override' + '<absolute-path-to-resource>');
-
Exempel på användning example-of-usage
Här följer några exempel:
-
Övertäckning:
-
Åsidosätt: