Innehållsmodellering för WYSIWYG Authoring with Edge Delivery Services Projects content-modeling
Lär dig hur innehållsmodellering fungerar för WYSIWYG Authoring med Edge Delivery Services och hur du skapar eget innehåll.
Förutsättningar prerequisites
Projekt som använder WYSIWYG Authoring med Edge Delivery Services ärver merparten av mekanismerna i andra Edge Delivery Services-projekt, oberoende av innehållskällan eller redigeringsmetoden.
Innan du börjar modellera innehåll för projektet bör du först läsa följande dokumentation.
Det är viktigt att förstå dessa koncept för att komma fram till en övertygande innehållsmodell som fungerar på ett innehållskällagnostikt sätt. Det här dokumentet innehåller information om de mekanismer som implementerats specifikt för WYSIWYG-redigering.
Standardinnehåll default-content
Standardinnehåll är innehåll som en författare intuitivt placerar på en sida utan att lägga till ytterligare semantik. Detta inkluderar text, rubriker, länkar och bilder. Sådant innehåll är självförklarande när det gäller funktion och syfte.
I AEM implementeras det här innehållet som komponenter med mycket enkla, fördefinierade modeller, som innehåller allt som kan serialiseras i Markdown och HTML.
- Text: RTF (inklusive listelement och kraftig eller kursiv text)
- Titel: Text, typ (h1-h6)
- Bild: Source, beskrivning
- Knapp: Text, rubrik, url, typ (standard, primär, sekundär)
Modellen för de här komponenterna ingår i mallsidan för WYSIWYG-redigering med Edge Delivery Services.
Block blocks
Block används för att skapa mer avancerat innehåll med specifika format och funktioner. I motsats till standardinnehåll kräver block ytterligare semantik.
Block är huvudsakligen innehållsdelar som dekorerats av JavaScript och formaterats med en formatmall.
Blockmodellsdefinition model-definition
När du använder WYSIWYG-redigering med Edge Delivery Services måste innehållet i blocken utformas explicit för att författaren ska kunna använda gränssnittet för att skapa innehåll. Du måste i princip skapa en modell så att författargränssnittet vet vilka alternativ som ska visas för författaren baserat på blocket.
Filen component-models.json
definierar blockmodellen. De fält som definieras i komponentmodellen bevaras som egenskaper i AEM och återges som celler i tabellen som utgör ett block.
{
"id": "hero",
"fields": [
{
"component": "reference",
"valueType": "string",
"name": "image",
"label": "Image",
"multi": false
},
{
"component": "text-input",
"valueType": "string",
"name": "imageAlt",
"label": "Alt",
"value": ""
},
{
"component": "text-area",
"name": "text",
"value": "",
"label": "Text",
"valueType": "string"
}
]
}
Observera att inte alla block måste ha en modell. Vissa block är bara behållare för en lista med underordnade objekt, där varje underordnad har sin egen modell.
Det är också nödvändigt att definiera vilka block som finns och som kan läggas till på en sida med den universella redigeraren. component-definitions.json
-filen visar komponenterna så fort de är tillgängliga av den universella redigeraren.
{
"title": "Hero",
"id": "hero",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/franklin/components/block/v1/block",
"template": {
"name": "Hero",
"model": "hero"
}
}
}
}
}
Det går att använda en modell för många block. Vissa block kan till exempel dela en modell som definierar text och bild.
För varje block gäller följande:
- Resurstypen
core/franklin/components/block/v1/block
måste användas, den allmänna implementeringen av blocklogiken i AEM. - Blocknamnet måste definieras, som ska återges i blockets tabellrubrik.
- Blocknamnet används för att hämta rätt format och skript för att dekorera blocket.
- Kan definiera ett modell-ID.
- Modell-ID är en referens till komponentens modell, som definierar de fält som är tillgängliga för författaren på egenskapspanelen.
- Kan definiera ett filter-ID.
- Filter-ID är en referens till komponentens filter, som gör att du kan ändra redigeringsbeteendet, till exempel genom att begränsa vilka underordnade som kan läggas till i blocket eller avsnittet eller vilka RTE-funktioner som är aktiverade.
All den här informationen lagras i AEM när ett block läggs till på en sida. Om resurstypen eller blocknamnet saknas återges inte blocket på sidan.
Blockstruktur block-structure
Egenskaperna för blocken är definierade i komponentmodellerna och beständiga som sådana i AEM. Egenskaper återges som celler i blockets tabellliknande struktur.
Enkla block simple
I den enklaste formen återger ett block varje egenskap i en enda rad/kolumn i den ordning som egenskaperna definieras i modellen.
I följande exempel definieras bilden först i modellen och sedan i textsekunden. De återges alltså med bilden först och sedan med texten sekund.
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Du kan lägga märke till att vissa typer av värden tillåter semikolonisering i markeringen, och egenskaper kombineras i enskilda celler. Det här beteendet beskrivs i avsnittet Typhärledning.
Nyckelvärdesblock key-value
I många fall rekommenderar vi att du dekorerar den renderade semantiska koden, lägger till CSS-klassnamn, lägger till nya noder eller flyttar dem i DOM och använder format.
I andra fall läses dock blocket som en konfiguration som påminner om nyckelvärdepar.
Ett exempel på detta är metadata för avsnittet . I det här fallet kan blocket konfigureras att återges som nyckelvärdepar-tabell. Mer information finns i avsnittet Avsnitt och Avsnittsmetadata.
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Behållarblock container
Båda de tidigare strukturerna har en enda dimension: listan med egenskaper. Behållarblock gör att du kan lägga till underordnade (vanligtvis av samma typ eller modell) och därför är tvådimensionella. Dessa block har fortfarande stöd för sina egna egenskaper som återges som rader med en enda kolumn först. Men de tillåter också att du lägger till underordnade objekt, för vilka varje objekt återges som rad och varje egenskap som kolumn i den raden.
I följande exempel accepterar ett block en lista med länkade ikoner som underordnade, där varje länkad ikon har en bild och en länk. Observera filter-ID som angetts i blockets data för att referera till filterkonfigurationen.
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Skapa semantiska innehållsmodeller för block creating-content-models
Med mekanismerna i blockstrukturen förklaradgår det att skapa en innehållsmodell som mappar innehåll som bevaras i AEM en till en till leveransnivån.
Tidigt i varje projekt måste man tänka på en innehållsmodell för varje block. Den måste vara agnostisk mot innehållskällan och redigeringsmiljön för att författare ska kunna växla eller kombinera dem när blockimplementeringar och format återanvänds. Mer information och allmänna riktlinjer finns i David's Model (ta 2). Mer specifikt innehåller blocksamlingen en omfattande uppsättning innehållsmodeller för specifika användningsområden för vanliga användargränssnittsmönster.
För WYSIWYG-redigering med Edge Delivery Services ställer det här en fråga om hur en övertygande semantisk innehållsmodell ska användas när informationen skapas med formulär som består av flera fält istället för att man redigerar semantiska markeringar i sitt sammanhang som RTF.
För att lösa det här problemet finns det tre metoder som gör det enklare att skapa en övertygande innehållsmodell:
Textpåverkan type-inference
För vissa värden kan den semantiska innebörden härledas från själva värdena. Sådana värden är:
- Bilder - Om en referens till en resurs i AEM är en resurs med en MIME-typ som börjar med
image/
återges referensen som<picture><img src="${reference}"></picture>
. - Länkar - Om det finns en referens i AEM och inte är en bild, eller om värdet börjar med
https?://
eller#
, återges referensen som<a href="${reference}">${reference}</a>
. - RTF - Om ett trimmat värde börjar med ett stycke (
p
,ul
,ol
,h1
-h6
osv.) återges värdet som RTF-text. - Klassnamn - Egenskapen
classes
behandlas som blockalternativ och återges i tabellhuvudet för enkla block eller som värdelista för objekt i ett behållarblock. Det är användbart om du vill formatera ett block på ett annat sätt,, men inte behöver skapa ett helt nytt block. - Värdelistor - Om ett värde är en flervärdesegenskap och det första värdet inte är något av de föregående, sammanfogas alla värden som kommaavgränsade listor.
Allt annat återges som oformaterad text.
Dölj fält field-collapse
Fältkomprimering är en mekanism för att kombinera flera fältvärden till ett enda semantiskt element baserat på en namnkonvention med suffixen Title
, Type
, MimeType
, Alt
och Text
(alla skiftlägeskänsliga). Egenskaper som slutar med något av dessa suffix betraktas inte som ett värde, utan som ett attribut för en annan egenskap.
Bilder image-collapse
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Länkar och knappar links-buttons-collapse
code language-json |
---|
|
Ingen linkType
eller linkType=default
code language-html |
---|
|
linkType=primary
code language-html |
---|
|
linkType=secondary
code language-html |
---|
|
code language-text |
---|
|
Rubriker headings-collapse
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Elementgruppering element-grouping
Medan fältkomprimering handlar om att kombinera flera egenskaper till ett enda semantiskt element, handlar elementgruppering om att sammanfoga flera semantiska element till en enda cell. Detta är särskilt användbart när det gäller användningsfall där författaren bör begränsas i den typ och det antal element som de kan skapa.
En teaser-komponent kan t.ex. tillåta författaren att endast skapa en underrubrik, rubrik och en enda styckebeskrivning kombinerat med högst två knappar för att anropa till åtgärd. När du grupperar dessa element tillsammans skapas en semantisk kod som kan formateras utan ytterligare åtgärd.
Elementgruppering använder en namnkonvention där gruppnamnet separeras från varje egenskap i gruppen med ett understreck. Fältkomprimering av egenskaperna i en grupp fungerar som tidigare beskrivits.
code language-json |
---|
|
code language-html |
---|
|
code language-text |
---|
|
Avsnittsmetadata sections-metadata
På samma sätt som en utvecklare kan definiera och modellera flera block, kan de definiera olika avsnitt.
Innehållsmodellen för Edge Delivery Services tillåter avsiktligt bara en enda kapslingsnivå, vilket är vilket standardinnehåll eller -block som finns i ett avsnitt. Detta innebär att om du vill ha mer komplexa visuella komponenter som kan innehålla andra komponenter måste de modelleras som sektioner och kombineras med hjälp av en autoblockerande klientsida. Typiska exempel på detta är tabbar och komprimerbara avsnitt som dragspelspaneler.
Ett avsnitt kan definieras på samma sätt som ett block, men med resurstypen core/franklin/components/section/v1/section
. Avsnitt kan ha ett namn och ett filter-ID,, som endast används av Universal Editor, samt ett modell-ID,, som används för att återge avsnittsmetadata. Modellen är på det här sättet modellen för avsnittets metadatablocket, som automatiskt läggs till i ett avsnitt som nyckelvärdesblock om det inte är tomt.
modell-ID och filter-ID för standardavsnittet är section
. Den kan användas för att ändra standardavsnittets beteende. I följande exempel läggs vissa format och en bakgrundsbild till i avsnittets metadatamodell.
{
"id": "section",
"fields": [
{
"component": "multiselect",
"name": "style",
"value": "",
"label": "Style",
"valueType": "string",
"options": [
{
"name": "Fade in Background",
"value": "fade-in"
},
{
"name": "Highlight",
"value": "highlight"
}
]
},
{
"component": "reference",
"valueType": "string",
"name": "background",
"label": "Image",
"multi": false
}
]
}
I följande exempel definieras ett tabbavsnitt, som kan användas för att skapa ett tabbblock genom att kombinera efterföljande avsnitt med ett tabbrubriksdataattribut till ett tabbblock under automatisk blockering.
{
"title": "Tab",
"id": "tab",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/franklin/components/section/v1/section",
"template": {
"name": "Tab",
"model": "tab",
"filter": "section"
}
}
}
}
}
Sidmetadata page-metadata
Dokument kan ha ett metadatablocksom används för att definiera vilka <meta>
element som ska återges i <head>
på en sida. Sidegenskaperna för sidorna i AEM as a Cloud Service är mappade till de som är tillgängliga direkt för Edge Delivery Services, som title
, description
, keywords
osv.
Innan du kan utforska hur du definierar egna metadata bör du läsa följande dokument för att först förstå begreppet sidmetadata.
Det går också att definiera ytterligare sidmetadata på två sätt.
Kalkylblad för metadata metadata-spreadsheets
Det går att definiera metadata per bana eller per bana på ett tabellliknande sätt i AEM as a Cloud Service. Det finns ett redigeringsgränssnitt för tabellliknande data som liknar Excel- och Google-ark.
Mer information finns i dokumentet Använda kalkylblad för att hantera tabelldata.
Sidegenskaper page-properties
Många av de standardsidegenskaper som är tillgängliga i AEM mappas till respektive sidmetadata i ett dokument. Det inkluderar till exempel title
, description
, robots
, canonical url
eller keywords
. Vissa AEM-specifika egenskaper är också tillgängliga:
cq:lastModified
sommodified-time
i ISO8601-format- Den tid dokumentet senast publicerades som
published-time
i ISO8601-format cq:tags
somcq-tags
som en kommaavgränsad lista med tagg-ID:n.
Det går också att definiera en komponentmodell för anpassade sidmetadata, som kommer att göras tillgänglig för författaren i Universella redigeraren.
Om du vill göra det skapar du en komponentmodell med ID:t page-metadata
.
{
"id": "page-metadata",
"fields": [
{
"component": "text",
"name": "theme",
"label": "Theme"
}
]
}
Nästa steg next-steps
Nu när du vet hur man modellerar innehåll kan du skapa block för egna Edge Delivery Services med WYSIWYG redigeringsprojekt.
Läs dokumentet Skapa block som är instrumenterade för användning med den universella redigeraren om du vill veta hur du skapar block som är instrumenterade för användning med den universella redigeraren i WYSIWYG-redigering med Edge Delivery Services-projekt.
Om du redan är bekant med att skapa block kan du läsa dokumentet Utvecklarhandbok för att komma igång med WYSIWYG-redigering med Edge Delivery Services för att komma igång med en ny Adobe Experience Manager-webbplats med Edge Delivery Services och Universal Editor för innehållsredigering.