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).
Sling Resource Merger kombinerar både överläggnings- och åsidosättningsresurser (och deras egenskaper) med de ursprungliga resurserna och egenskaperna:
-
Innehållet i den anpassade definitionen har en högre prioritet än det ursprungliga. Det innebär att det är ö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 Samling Resource Merger bör du inte kopiera hela strukturen från
/libs. Orsaken är att det skulle resultera i att för mycket information sparas i anpassningen (vanligen/apps). Om du duplicerar information i onödan ökar risken för problem när systemet uppgraderas.
sling:resourceSuperType för att upprätta anslutningen./apps, som det bästa sättet i AEM är att definiera anpassningar under /apps. Orsaken är att du inte får ändra något under /libs./libs./libs skrivs över nästa gång du uppgraderar din instans. Och det kan mycket väl skrivas över när du lägger till 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(StringellerString[])Anger den egenskap, eller lista med egenskaper, som ska döljas.
Jokertecknet
*döljer alla. -
sling:hideResource(Boolean)Det anger om resurserna är helt dolda, inklusive dess underordnade.
-
sling:hideChildren(StringellerString[])Den 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)Den innehåller namnet på noden på samma nivå som den aktuella noden är placerad 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 -
Skapa följande nod för att täcka över:
/apps/cq/core/content/nav/sitesUppdatera sedan egenskapen
jcr:titleefter behov.
-
-
Åsidosätt
-
Definitionen av den beröringsaktiverade dialogrutan för textkonsolen definieras så här:
/libs/foundation/components/text/cq:dialog -
Om du vill åsidosätta skapar du följande nod. Till exempel:
/apps/the-project/components/text/cq:dialog
-
Om du vill skapa någon av dem 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. Orsaken är att det skulle resultera i att för mycket information sparas i /apps. Detta kan leda till problem när systemet uppgraderas.Användningsexempel use-cases
Med standardfunktionalitet kan du göra följande med de här användningsexemplen:
-
Lägg till en egenskap
Egenskapen finns inte i definitionen
/libs, men krävs i övertäckningen/apps/å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 har en prioritet som baseras på konfigurationen av Sling Resource Resolver.
-
Det går att ändra egenskapstypen.
Om du använder en annan egenskapstyp än den som används i
/libsanvä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 eller åsidosättning för att säkerställa att den nodtyp som för närvarande finns under/libsrespekteras. Om du vill lägga till en övertäckning/åsidosättning måste du återskapa noden i/apps, dölja egenskapen explicit och definiera om den:-
Skapa motsvarande nod under
/appsmed önskadjcr:primaryType -
Skapa egenskapen
sling:hidePropertiespå den noden med värdet inställt på den automatiskt skapade egenskapen, till exempeljcr:primaryTypeDen här egenskapen, som definieras under
/apps, har 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:hidePropertiesav typenStringellerString[]. Används för att ange de 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 eller ignorera alla underordnade noder.
- typ:
-
-
Ändra ordning på noder
Noden och dess jämställda noder definieras i
/libs. Om du vill ändra ordningen återskapar du noden i/apps-övertäckningen eller åsidosättningen. Definiera den nya positionen genom att referera till rätt jämställd nod i/libs.-
Använd egenskapen
sling:orderBefore:-
Skapa motsvarande nod under
/apps -
Skapa egenskapen
sling:orderBefore:Anger noden (som i
/libs) som den aktuella noden är placerad 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 kan anropas i koden med 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: