Anpassa och utöka Content Fragments
- Ämnen:
- Developing
Skapat för:
- Developer
Ett innehållsfragment utökar en standardresurs; se:
-
Skapa och hantera innehållsfragment och Sidredigering med innehållsfragment för mer information om innehållsfragment.
-
Hantera resurser och Anpassa och utöka resurser för mer information om standardtillgångar.
Arkitektur
Grundläggande beståndsdelar för ett innehållsfragment är:
- A Innehållsfragment,
- bestående av en eller flera Innehållselement s,
- och som kan ha en eller flera Innehållsvariation s.
Beroende på fragmenttypen används även modeller eller mallar:
-
Modeller för innehållsfragment:
- Används för att definiera innehållsfragment som innehåller strukturerat innehåll.
- Modeller för innehållsfragment definierar strukturen för ett innehållsfragment när det skapas.
- Ett fragment refererar till modellen. så ändringar i modellen kan/kommer att påverka beroende fragment.
- Modeller är inbyggda i datatyper.
- Funktioner för att lägga till nya varianter, osv., måste uppdatera fragmentet därefter.
CAUTION
Alla ändringar i en befintlig innehållsfragmentmodell kan påverka beroende fragment. detta kan leda till egenskaper som är överblivna i dessa fragment. -
Mallar för innehållsfragment:
- Används för att definiera enkla innehållsfragment.
- Mallar definierar (grundläggande, endast text) strukturen för ett innehållsfragment när det skapas.
- Mallen kopieras till fragmentet när den skapas. så att ytterligare ändringar av mallen inte återspeglas i befintliga fragment.
- Funktioner för att lägga till nya varianter, osv., måste uppdatera fragmentet därefter.
- Mallar för innehållsfragment fungerar på ett annat sätt än andra mallmekanismer inom det AEM ekosystemet (t.ex. sidmallar). De bör därför beaktas separat.
- När MIME-typen för innehållet baseras på en mall hanteras det faktiska innehållet. det innebär att varje element och variant kan ha olika MIME-typer.
Integrering med Assets
Content Fragment Management (CFM) ingår i AEM Assets som:
- Innehållsfragment är resurser.
- De använder befintliga Assets-funktioner.
- De är helt integrerade med Assets (Admin Consoles, etc.).
Mappa strukturerade innehållsfragment till resurser
Innehållsfragment med strukturerat innehåll (dvs. baserat på en innehållsfragmentmodell) mappas till en enda resurs:
-
Allt innehåll lagras under
jcr:content/data
resursens nod:-
Elementdata lagras under den överordnad undernoden:
jcr:content/data/master
-
Variationer lagras under en undernod som har variantens namn:
t.ex.
jcr:content/data/myvariation
-
Data för varje element lagras i respektive undernod som en egenskap med elementnamnet:
t.ex. elementets innehåll
text
lagras som egenskaptext
påjcr:content/data/master
-
-
Metadata och tillhörande innehåll lagras nedan
jcr:content/metadata
Förutom rubriken och beskrivningen, som inte betraktas som traditionella metadata och lagras på
jcr:content
Mappa enkla innehållsfragment till resurser
Enkla innehållsfragment (som baseras på en mall) mappas till en sammansatt resurs som består av en huvudresurs och (valfritt) underresurser:
-
All icke-innehållsinformation i ett fragment (som titel, beskrivning, metadata, struktur) hanteras exklusivt på huvudresursen.
-
Innehållet i det första elementet i ett fragment mappas till den ursprungliga återgivningen av huvudresursen.
- Variationerna (om det finns några) för det första elementet mappas till andra återgivningar av huvudresursen.
-
Ytterligare element (om sådana finns) mappas till deltillgångar i huvudtillgången.
- Huvudinnehållet i dessa ytterligare element mappas till den ursprungliga återgivningen av respektive underresurs.
- Andra variationer (om tillämpligt) av eventuella ytterligare element överensstämmer med andra återgivningar av respektive deltillgång.
Resursplats
Precis som med standardresurser finns ett innehållsavdrag under:
/content/dam
Tillgångsbehörigheter
Mer information finns i Innehållsfragment - Ta bort överväganden.
Funktionsintegrering
- Funktionen Content Fragment Management (CFM) bygger på Assets core, men bör vara så oberoende som möjligt.
- CFM tillhandahåller egna implementeringar för objekt i vyerna kort/kolumn/lista. dessa plugin-program i befintliga resursåtergivningsimplementationer.
- Flera Assets-komponenter har utökats för att passa innehållsfragment.
Använda innehållsfragment på sidor
Innehållsfragment kan refereras från AEM sidor, precis som andra resurstyper. AEM tillhandahåller Innehållsfragment kärnkomponent - en som gör att du kan ta med innehållsfragment på sidorna. Du kan också utöka Innehållsfragment kärnkomponent.
-
Komponenten använder
fragmentPath
-egenskap som refererar till det faktiska innehållsfragmentet. ThefragmentPath
Egenskapen hanteras på samma sätt som liknande egenskaper för andra tillgångstyper. till exempel när innehållsfragmentet flyttas till en annan plats. -
Med komponenten kan du välja varianten som ska visas.
-
Dessutom kan ett antal stycken väljas för att begränsa utdata. Detta kan till exempel användas för utdata med flera kolumner.
-
Komponenten tillåter mellanliggande innehåll:
-
Här kan du placera andra resurser (bilder, etc.) mellan styckena i det refererade fragmentet.
-
För det mellanliggande innehållet behöver du:
- vara medvetna om risken för instabila referenser, mellanliggande innehåll (som läggs till när en sida redigeras) har ingen fast relation till det stycke som det placeras bredvid, och infogning av ett nytt stycke (i innehållsfragmentredigeraren) innan placeringen av det mellanliggande innehållet kan förlora den relativa positionen
- ta hänsyn till ytterligare parametrar (som variation och styckefilter) för att undvika falska positiva resultat i sökresultaten
- vara medvetna om risken för instabila referenser, mellanliggande innehåll (som läggs till när en sida redigeras) har ingen fast relation till det stycke som det placeras bredvid, och infogning av ett nytt stycke (i innehållsfragmentredigeraren) innan placeringen av det mellanliggande innehållet kan förlora den relativa positionen
-
-
Konfiguration med OSGi-konsol
Serverdelsimplementeringen av innehållsfragment ansvarar till exempel för att göra instanser av ett fragment som används på en sida sökbara eller för hantering av blandat medieinnehåll. Den här implementeringen behöver veta vilka komponenter som används för att återge fragment och hur återgivningen är parametriserad.
Parametrarna för detta kan konfigureras i Webbkonsol, för OSGi-paketet Konfiguration av DAM-innehållsfragment.
-
Resurstyper
En lista med
sling:resourceTypes
kan anges för att definiera komponenter som används för att återge innehållsfragment och var bakgrundsbearbetningen ska användas. -
Referensegenskaper
En lista med egenskaper kan konfigureras för att ange var referensen till fragmentet lagras för respektive komponent.
Det finns fortfarande några riktlinjer som du måste följa för att se till att komponenten är kompatibel med bakgrundsbearbetningen av innehållsfragment:
-
Namnet på egenskapen där elementen som ska återges är antingen
element
ellerelementNames
. -
Namnet på egenskapen där variationen som ska återges är antingen
variation
ellervariationName
. -
Om utdata från flera element stöds (med
elementNames
om du vill ange flera element), definieras det faktiska visningsläget av egenskapendisplayMode
:- Om värdet är
singleText
(och bara ett element är konfigurerat) återges elementet som en text med mellanliggande innehåll, layoutstöd osv. Det här är standard för fragment där bara ett element återges. - I annat fall används en mycket enklare metod (kan kallas"formulärvy"), där inget mellanliggande innehåll stöds och fragmentinnehållet återges som det är.
- Om värdet är
-
Om fragmentet återges för
displayMode
==singleText
(implicit eller explicit) spelas följande ytterligare egenskaper upp:paragraphScope
definierar om alla stycken, eller bara ett styckeintervall, ska återges (värden:all
jämfört medrange
)- if
paragraphScope
==range
sedan egenskapenparagraphRange
definierar det styckeintervall som ska återges
Integrering med andra ramar
Innehållsfragment kan integreras med:
-
Översättningar
Innehållsfragment är helt integrerade med Arbetsflöde för AEM. Arkitekturnivå innebär följande:
-
De enskilda översättningarna av ett innehållsfragment är i själva verket separata fragment. till exempel:
-
De finns under olika språkrötter:
/content/dam/<path>/en/<to>/<fragment>
jämfört med
/content/dam/<path>/de/<to>/<fragment>
-
men de delar exakt samma relativa sökväg under språkroten:
/content/dam/<path>/en/<to>/<fragment>
jämfört med
/content/dam/<path>/de/<to>/<fragment>
-
-
Förutom de regelbaserade sökvägarna finns det ingen ytterligare koppling mellan de olika språkversionerna av ett innehållsfragment. De hanteras som två separata fragment, även om användargränssnittet ger möjlighet att navigera mellan språkvarianterna.
NOTE
Det AEM arbetsflödet för översättning fungerar med/content
:- När innehållsfragmentsmodellerna finns i
/conf
, ingår de inte i sådana översättningar. Du kan Internationalisera gränssnittssträngar. - Mallar kopieras för att skapa fragmentet så detta är implicit.
-
-
Metadata-scheman
- Innehållsfragment (återanvänd) metadatamodeller, som kan definieras med standardresurser.
-
CFM har ett eget specifikt schema:
/libs/dam/content/schemaeditors/forms/contentfragment
detta kan vid behov förlängas.
-
respektive schemaformulär är integrerat med fragmentredigeraren.
API för hantering av innehållsfragment - serversidan
Du kan använda serversidans API för att komma åt dina innehållsfragment; se:
com.adobe.cq.dam.cfm
Nyckelgränssnitt
Följande tre gränssnitt kan fungera som startpunkter:
-
Fragmentmall
FragmentTemplate
Använd
FragmentTemplate.createFragment()
för att skapa ett nytt fragment.Resource templateOrModelRsc = resourceResolver.getResource("..."); FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class); ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Detta gränssnitt representerar:
- antingen en modell för innehållsfragment eller en mall för innehållsfragment från vilken ett innehållsfragment ska skapas,
- och (efter det att fragmentet har skapats) strukturinformationen
Denna information kan omfatta:
-
Få tillgång till grundläggande data (titel, beskrivning)
-
Få åtkomst till mallar/modeller för elementen i fragmentet:
- Mallar för listelement
- Hämta strukturinformation för ett givet element
- Åtkomst till elementmallen (se
ElementTemplate
)
-
Åtkomstmallar för variationerna av fragmentet:
- Lista variantmallar
- Hämta strukturinformation för en viss variation
- Åtkomst till variantmallen (se
VariationTemplate
)
-
Hämta initialt associerat innehåll
Gränssnitt som representerar viktig information:
-
ElementTemplate
- Hämta grundläggande data (namn, titel)
- Hämta ursprungligt elementinnehåll
-
VariationTemplate
- Hämta grundläggande data (namn, titel, beskrivning)
-
Innehållsfragment
ContentFragment
Med det här gränssnittet kan du arbeta med ett innehållsfragment på ett abstrakt sätt.
CAUTION
Vi rekommenderar starkt att du använder ett fragment via det här gränssnittet. Man bör undvika att ändra innehållsstrukturen direkt.Gränssnittet ger dig möjlighet att
-
Hantera grundläggande data (t.ex. get name;) get/set title/description)
-
Åtkomst till metadata
-
Åtkomstelement:
- Listelement
- Hämta element efter namn
- Skapa nya element (se Caveats)
- Åtkomst till elementdata (se
ContentElement
)
-
Listvarianter definierade för fragmentet
-
Skapa nya varianter globalt
-
Hantera associerat innehåll:
- Listsamlingar
- Lägg till samlingar
- Ta bort samlingar
-
Åtkomst till fragmentets modell eller mall
Gränssnitt som representerar de primära elementen i ett fragment är:
-
Innehållselement
ContentElement
-
Hämta grundläggande data (namn, titel, beskrivning)
-
Hämta/ange innehåll
-
Få åtkomst till varianter av ett element:
-
Kortkommando för att matcha variationer (tillämpa ytterligare, implementeringsspecifik reservlogik om den angivna varianten inte är tillgänglig för ett element)
-
-
Innehållsvariation
ContentVariation
- Hämta grundläggande data (namn, titel, beskrivning)
- Hämta/ange innehåll
- Enkel synkronisering, baserat på den senast ändrade informationen
Alla tre gränssnitten (
ContentFragment
,ContentElement
,ContentVariation
) utökaVersionable
gränssnitt, som lägger till versionsfunktioner, som krävs för innehållsfragment:- Skapa en ny version av elementet
- Lista versioner av elementet
- Hämta innehållet i en specifik version av det versionshanterade elementet
-
Adapting - Using customito()
Följande kan anpassas:
-
ContentFragment
kan anpassas tillResource
- den underliggande Sling-resursen, Observera att uppdateringen av underliggandeResource
direkt, kräver attContentFragment
-objekt.Asset
- DAMAsset
abstraktion som representerar innehållsfragmentet, Observera att uppdaterarAsset
direkt, kräver attContentFragment
-objekt.
-
ContentElement
kan anpassas tillElementTemplate
- för åtkomst till elementets strukturinformation.
-
FragmentTemplate
kan anpassas till-
Resource
-Resource
fastställa den refererade modellen eller originalmallen som kopierades,- ändringar som gjorts genom
Resource
återspeglas inte automatiskt iFragmentTemplate
.
- ändringar som gjorts genom
-
-
Resource
kan anpassas tillContentFragment
FragmentTemplate
Caveats
Det bör noteras att
-
API:t implementeras för att tillhandahålla funktioner som stöds av användargränssnittet.
-
Hela API:t är utformat för not Bevara ändringarna automatiskt (om inget annat anges i API JavaDoc). Därför måste du alltid implementera resurslösaren för respektive begäran (eller den lösare som du använder).
-
Uppgifter som kan kräva ytterligare arbete:
- När du skapar/tar bort nya element uppdateras inte datastrukturen för enkla fragment (baserat på en fragmentmall).
- Skapa nya varianter från
ContentElement
uppdaterar inte datastrukturen (men skapar dem globalt från)ContentFragment
will). - Om du tar bort befintliga varianter uppdateras inte datastrukturen.
API:t för hantering av innehållsfragment - klientsidan
Ytterligare information
Se följande:
-
filter.xml
The
filter.xml
för hantering av innehållsfragment konfigureras så att den inte överlappar det centrala resurspaketet.
Redigera sessioner
En redigeringssession startas när användaren öppnar ett innehållsfragment på någon av redigeringssidorna. Redigeringssessionen är slut när användaren lämnar redigeraren genom att välja antingen Spara eller Avbryt.
Krav
Krav för att styra en redigeringssession är:
- Att redigera ett innehållsfragment, som kan sträcka sig över flera vyer (= HTML-sidor), bör vara atomiskt.
- Redigeringen bör också vara transaktionsbaserad; i slutet av redigeringssessionen måste ändringarna antingen verkställas (sparas) eller återställas (avbrytas).
- Kantlådor ska hanteras på rätt sätt. Detta kan exempelvis gälla när användaren lämnar sidan genom att ange en URL manuellt eller med global navigering.
- Det bör finnas en periodisk autosparfunktion (var x:e minut) för att förhindra dataförlust.
- Om ett innehållsfragment redigeras av två användare samtidigt bör de inte skriva över varandras ändringar.
Processer
Processerna är följande:
-
Starta en session
- En ny version av innehållsfragmentet skapas.
- Spara automatiskt startas.
- Cookies är fastställda; dessa definierar det redigerade fragmentet och att en redigeringssession är öppen.
-
Avsluta en session
-
Autosparande stoppas.
-
Vid implementering:
- Den senast ändrade informationen uppdateras.
- Cookies tas bort.
-
Vid återställning:
- Den version av innehållsfragmentet som skapades när redigeringssessionen startades återställs.
- Cookies tas bort.
-
-
Redigering
- Alla ändringar (autosparande ingår) görs på det aktiva innehållsfragmentet - inte i ett avgränsat, skyddat område.
- Därför återspeglas dessa ändringar direkt på AEM sidor som refererar till respektive innehållsfragment
Åtgärder
Möjliga åtgärder är:
-
Skriva in en sida
-
Kontrollera om det redan finns en redigeringssession; genom att kontrollera respektive cookie.
-
Om det finns någon kontrollerar du att redigeringssessionen startades för det innehållsfragment som redigeras just nu
- Om det aktuella fragmentet används återupprättar du sessionen.
- Om inte, försök att avbryta redigeringen för det tidigare redigerade innehållsfragmentet och ta bort cookies (ingen redigeringssession finns efteråt).
-
Om det inte finns någon redigeringssession väntar du på den första ändringen som gjorts av användaren (se nedan).
-
-
Kontrollera om det redan finns referenser till innehållsfragmentet på en sida och visa lämplig information om så är fallet.
-
-
Innehållsändring
- När användaren ändrar innehåll och det inte finns någon redigeringssession skapas en ny redigeringssession (se Starta en session).
-
Lämna en sida
- Om det finns en redigeringssession och ändringarna inte har sparats, visas en modal bekräftelsedialogruta som meddelar användaren om potentiellt förlorat innehåll och låter dem stanna kvar på sidan.
Exempel
Exempel: Åtkomst till ett befintligt innehållsfragment
För att uppnå detta kan du anpassa resursen som representerar API:t till:
com.adobe.cq.dam.cfm.ContentFragment
Till exempel:
// first, get the resource
Resource fragmentResource = resourceResolver.getResource("/content/dam/fragments/my-fragment");
// then adapt it
if (fragmentResource != null) {
ContentFragment fragment = fragmentResource.adaptTo(ContentFragment.class);
// the resource is now accessible through the API
}
Exempel: Skapa ett nytt innehållsfragment
Om du vill skapa ett nytt innehållsfragment programmatiskt måste du använda:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Till exempel:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Exempel: Ange intervall för autosparande
Intervallet för att spara automatiskt (anges i sekunder) kan definieras med konfigurationshanteraren (ConfMgr):
-
Nod:
<conf-root>/settings/dam/cfm/jcr:content
-
Egenskapsnamn:
autoSaveInterval
-
Typ:
Long
-
Standard:
600
(10 minuter); detta definieras på/libs/settings/dam/cfm/jcr:content
Om du vill ange ett intervall för automatiskt sparande på 5 minuter måste du definiera egenskapen på din nod; till exempel:
-
Nod:
/conf/global/settings/dam/cfm/jcr:content
-
Egenskapsnamn:
autoSaveInterval
-
Typ:
Long
-
Värde:
300
(5 minuter motsvarar 300 sekunder)
Mallar för innehållsfragment
Se Mallar för innehållsfragment för fullständig information.
Komponenter för sidredigering
Mer information finns i
Experience Manager
- Utveckla användarhandboken - översikt
- Introduktion för utvecklare
- Komma igång med utveckling i AEM Sites – WKND-självstudiekurs
- AEM kärnbegrepp
- Struktur för det AEM användargränssnittet med pekskärm
- Koncepten i det AEM användargränssnittet med pekskärm
- AEM - riktlinjer och bästa praxis
- Använda bibliotek på klientsidan
- Developing and Page Diff
- Begränsningar för redigerare
- CSRF Protection Framework
- Datamodellering - David Nueschelers modell
- Bidrar till AEM
- Dokumentskydd
- Referensmaterial
- Skapa en webbplats med alla funktioner (Classic UI)
- Designer och Designer (Classic UI)
- Plattform
- Fusklapp för Sling
- Använda Sling-adaptrar
- Taggbibliotek
- Mallar
- Använda Sling Resource Merger i AEM
- Övertäckningar
- Namnkonventioner
- Skapa en ny GRE-fältkomponent
- Query Builder
- Taggar
- Anpassa sidor som visas av felhanteraren
- Anpassade nodtyper
- Lägga till teckensnitt för grafikåtergivning
- Ansluta till SQL-databaser
- Extern URL
- Skapa och använda jobb för avlastning
- Konfigurerar cookie-användning
- Så här programmässigt kommer du åt AEM JCR
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utveckla rapporter
- eCommerce
- Komponenter
- Kärnkomponenter
- Formatsystem
- Komponenter - översikt
- AEM - Grunderna
- Utveckla AEM
- Utveckla AEM - kodexempel
- JSON-exporterare för innehållstjänster
- Aktivera JSON-export för en komponent
- Bildredigeraren
- Dekoration-tagg
- Använda Dölj villkor
- Konfigurera flera redigerare på plats
- Utvecklarläge
- Testa användargränssnittet
- Komponenter för innehållsfragment
- Hämta sidinformation i JSON-format
- Internationalisering
- Klassiska gränssnittskomponenter
- Headless Experience Management
- Headless och Hybrid with AEM
- Aktivera JSON-export för en komponent
- Enkelsidiga program
- SPA introduktion och genomgång
- SPA WKND - självstudiekurs
- Getting Started with SPA in AEM - React
- Komma igång med SPA i AEM - Angular
- Implementera en React Component for SPA
- SPA djupdykning
- SPA
- Utveckla SPA för AEM
- SPA Blueprint
- SPA
- Dynamisk mappning av modell till komponent för SPA
- SPA
- SPA och Adobe Experience Platform Launch Integration
- SPA- och serveråtergivning
- SPA referensmaterial
- HTTP-API
- Innehållsfragment
- Experience Fragments
- Utvecklingsverktyg
- Utvecklingsverktyg
- AEM Modernization Tools
- Dialogruteredigeraren
- Verktyget Dialogkonvertering
- Utveckla med CRXDE Lite
- Hantera paket med Maven
- Utveckla AEM projekt med Eclipse
- Skapa AEM projekt med Apache Maven
- Utveckla AEM projekt med IntelliJ IDEA
- Så här använder du VLT-verktyget
- Så här använder du proxyserververktyget
- AEM Brackets Extension
- AEM Developer Tools for Eclipse
- AEM
- Personanpassning
- Utöka AEM
- Anpassa sidredigering
- Anpassa konsolerna
- Anpassa vyer av Sidegenskaper
- Konfigurera din sida för gruppredigering av sidegenskaper
- Anpassa och utöka Content Fragments
- Utöka arbetsflöden
- Utöka Multi Site Manager
- Spårning och analys
- Cloud Services
- Skapa anpassade tillägg
- Forms
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utöka Classic UI
- Testning
- Bästa praxis
- Mobil webb