Ein Mehrfeld-Container generiert leere HTML- oder Duplikatblöcke im universellen Editor
Ein Mehrfeld-Container im universellen Editor für Edge Delivery (xwalk/xcom) rendert leere HTML-Elemente oder dupliziert Blockmarkup, wenn er mit einem mehrwertigen Container-Feld konfiguriert ist. Um das Problem zu beheben, migrieren Sie in ein Container- und Elementblockmuster.
Beschreibung description
Umgebung
- Product: Adobe Experience Manager as a Cloud Service (AEMaaCS) - Sites
- Szenario: Edge Delivery (xwalk/xcom) mit universellem Editor
Problem/Symptome
- Von Containern erstellte Elemente können nicht die erwartete HTML-Ausgabe generieren, was zu leeren
<div>führt. - Durch Hinzufügen mehrerer Felder zur Mehrfachfeld-Komponente wird der HTML-Block für eine einzelne Container-Instanz doppelt dargestellt.
- Beim Aktualisieren der Editor-Ansicht werden doppelte Blöcke vorübergehend entfernt, aber Duplikate werden nach nachfolgenden Bearbeitungen erneut angezeigt.
Lösung resolution
Gehen Sie wie folgt vor, um das Problem zu beheben:
-
Entfernen Sie das mehrwertige Container-Feld aus dem vorhandenen Komponentenmodell, um die Erstellung doppelter oder leerer Markups zu stoppen.
-
Einfache Felder wie oberer und unterer Text werden im übergeordneten Container-Blockmodell beibehalten, um Inhalte auf Layout-Ebene beizubehalten.
-
Erstellen Sie ein dediziertes Elementblockmodell und definieren Sie einzelne Felder für jedes Element, z. B. Text- oder Bildfelder. Beispiel für Elementblock- und Container-Modellstruktur:
code language-none { "definitions": [ { "title": "Multifield Container", "id": "multifield-container-component", "plugins": { "xwalk": { "page": { "resourceType": "core/franklin/components/block/v1/block", "template": { "name": "multifield-container-component", "model": "multifield-container-component", "filter": "multifield-container-component" } } } } }, { "title": "Multifield Container Item", "id": "multifield-container-item", "plugins": { "xwalk": { "page": { "resourceType": "core/franklin/components/block/v1/block", "template": { "name": "multifield-container-item", "model": "multifield-container-item" } } } } } ] , "models": [ { "id": "multifield-container-component", "fields": [ { "component": "text", "name": "topText", "label": "Top of container", "valueType": "string" }, { "component": "text", "name": "bottomText", "label": "Bottom of container", "valueType": "string" } ] }, { "id": "multifield-container-item", "fields": [ { "component": "text", "name": "itemText", "label": "Item text", "valueType": "string" }, { "component": "reference", "name": "itemImage", "label": "Item image", "valueType": "string", "multi": false }, { "component": "text", "name": "itemImageAlt", "label": "Item image alt text", "valueType": "string" } ] } ] , "filters": [ { "id": "multifield-container-component", "components": [ "multifield-container-item"] } ] } -
Konfigurieren Sie Filter im universellen Editor, um Elementblöcke unter dem übergeordneten Container-Block zuzulassen. In diesem Beispiel stellt der Filter sicher, dass der Container nur Elementblöcke akzeptiert:
code language-none { "id": "multifield-container-component", "components": [ "multifield-container-item"] }Die Container-Definition muss auf diesen Filter verweisen:
"filter": "multifield-container-component", und der Filter mitid: "multifield-container-component"beschränkt den Container darauf, nur multifield-container-item zu akzeptieren. -
Aktualisieren Sie übergeordnete Komponenten, indem Sie mehrfeld-basierte verschachtelte Container durch untergeordnete Block-Slots ersetzen, die Elementblöcke akzeptieren.
-
Fügen Sie Blockskripte sowohl für Container- als auch für Elementblöcke hinzu, wenn sie für die Projekteinrichtung erforderlich sind.
-
Erstellen Sie die aktualisierten Modelle und Komponenten und stellen Sie sie über die Standard-Pipeline bereit.
-
Erstellen Sie Inhalte im universellen Editor neu, indem Sie einen Elementblock für jeden erforderlichen Eintrag innerhalb des Container-Blocks hinzufügen.
-
Validieren Sie die Ausgabe, um zu bestätigen, dass jeder Block einmal gerendert wird und saubere, nicht duplizierte HTML generiert.
Modellverhalten - Elementblockmodell (multifield-container-item)
-
Jeder erstellte Eintrag erstellt eine Blockinstanz mit:
itemText (text)itemImage (reference)- wird normalerweise in ein Bild aufgelöst, wenn das referenzierte DAM-Asset ein Bild istitemImageAlt (text)- wird für Bild-Alt-Text verwendet
Hinweise:
- Der universelle Editor behandelt das Container-Feldmuster mit mehreren Werten (
component: "container",multi: true) als frühzeitigen Zugriff, was zu instabilen Rendering- und Blockduplizierungen in Edge Delivery-Umgebungen führt. - Das Festlegen von
multi: trueaufmulti: falseverhindert Duplizierungen, beschränkt das Authoring jedoch auf einen einzelnen Container-Eintrag. - Die Verwendung eines Container-Blocks mit Elementblöcken wird an unterstützten universellen Editor-Modellen ausgerichtet und stellt ein konsistentes, stabiles HTML-Rendering sicher.