AEM 6.4 hat das Ende der erweiterten Unterstützung erreicht und diese Dokumentation wird nicht mehr aktualisiert. Weitere Informationen finden Sie in unserer technische Unterstützung. Unterstützte Versionen suchen here.
Einige Inhaltsfragmentfunktionen erfordern die Anwendung von AEM 6.4 Service Pack 2 (6.4.2.0).
Ein Inhaltsfragment erweitert ein Standard-Asset. siehe:
Erstellen und Verwalten von Inhaltsfragmenten und Seitenbearbeitung mit Inhaltsfragmenten.
Verwalten von Assets und Anpassen und Erweitern von Assets für weitere Informationen zu Standard-Assets.
Ein Inhaltsfragment umfasst die folgenden grundlegenden Bestandteile:
Je nach Fragmenttyp werden außerdem Modelle oder Vorlagen verwendet:
Es werden derzeit Inhaltsfragmentmodelle zum Erstellen aller Fragmente empfohlen.
Inhaltsfragmentmodelle werden für alle Beispiele in We.Retail verwendet.
Inhaltsfragmentmodelle:
Alle Änderungen an einem vorhandenen Inhaltsfragmentmodell können sich auf abhängige Fragmente auswirken. Daher kann es zu verwaisten Eigenschaften in diesen Fragmenten kommen.
Inhaltsfragmentvorlagen:
Die Inhaltsfragmentverwaltung (Content Fragment Management, CFM) ist Teil von AEM Assets:
Inhaltsfragmente mit strukturierten Inhalten (d. h. basierend auf einem Inhaltsfragmentmodell) werden einem einzelnen Asset zugeordnet:
Alle Inhalte werden im Knoten jcr:content/data
des Assets gespeichert:
Die Elementdaten werden im primären Unterknoten gespeichert:
jcr:content/data/master
Varianten werden unter einem Unterknoten gespeichert, der den Namen der Variante trägt:
z. B. jcr:content/data/myvariation
Die Daten der einzelnen Elemente werden im entsprechenden Unterknoten als Eigenschaft mit dem Elementnamen gespeichert:
z. B. Inhalt des Elements text
wird als Eigenschaft gespeichert text
on jcr:content/data/master
Metadaten und verknüpfte Inhalte werden unten gespeichert jcr:content/metadata
Mit Ausnahme des Titels und der Beschreibung, die nicht als Metadaten im herkömmlichen Sinne gelten und in gespeichert werden jcr:content
Einfache Inhaltsfragmente (basierend auf einer Vorlage) werden einem Composite aus Haupt-Asset und (optionalen) Unter-Assets zugeordnet:
Alle nicht inhaltsbezogenen Informationen eines Fragments (wie Titel, Beschreibung, Metadaten, Struktur) werden ausschließlich für das Haupt-Asset verwaltet.
Der Inhalt des ersten Elements eines Fragments wird der ursprünglichen Ausgabe des Haupt-Assets zugeordnet.
Zusätzliche Elemente (sofern vorhanden) werden Teil-Assets des Haupt-Assets zugeordnet.
Wie bei Standard-Assets wird das Inhaltsfragment gespeichert in:
/content/dam
Weitere Informationen finden Sie unter Inhaltsfragmente – Überlegungen zum Löschen.
Derzeit wird die Kernkomponente für Inhaltsfragmente dafür empfohlen. Weitere Informationen finden Sie unter Entwickeln von Kernkomponenten.
AEM-Seiten können auf Inhaltsfragmente verweisen, ähnlich wie bei allen anderen Asset-Typen. AEM stellt die Kernkomponente für Inhaltsfragmente bereit, eine Komponente, mit der Sie Inhaltsfragmente in Seiten einfügen können. Sie können die Kernkomponente für Inhaltsfragmente auch erweitern.
Die Komponente verwendet die fragmentPath
-Eigenschaft für Verweise auf das tatsächliche Inhaltsfragment. Die fragmentPath
-Eigenschaft wird wie ähnliche Eigenschaften anderer Asset-Typen gehandhabt, beispielsweise wenn das Inhaltsfragment zu einem anderen Speicherort verschoben wird.
Mit der Komponente können Sie die Variante auswählen, die angezeigt werden soll.
Außerdem kann eine Reihe von Absätzen ausgewählt werden, um die Ausgabe zu beschränken, z. B. für die Ausgabe in mehreren Spalten.
Die Komponente ermöglicht Zwischeninhalt:
Bei Zwischeninhalten müssen Sie:
Inhaltsfragmentmodell:
Bei Verwendung eines Inhaltsfragments, das auf einem Inhaltsfragmentmodell auf einer Seite basiert, wird auf das Modell verwiesen. Falls das Modell also zum Zeitpunkt der Seitenveröffentlichung nicht veröffentlicht wurde, wird dies gekennzeichnet und das Modell zu den Ressourcen hinzugefügt, die mit der Seite veröffentlicht werden sollen.
Inhaltsfragmentvorlage:
Bei Verwendung eines auf einer Inhaltsfragmentvorlage basierten Inhaltsfragments auf einer Seite erfolgt kein Verweis, da die Vorlage beim Erstellen des Fragments kopiert wurde.
Die Backend-Implementierung von Inhaltsfragmenten ist beispielsweise dafür verantwortlich, Instanzen eines Fragments zu erstellen, das auf einer durchsuchbaren Seiten verwendet wird, oder gemischte Medieninhalte zu verwalten. Diese Implementierung muss wissen, welche Komponenten zum Rendern von Fragmenten verwendet werden und wie das Rendering parametrisiert wird.
Die Parameter hierfür können im Abschnitt Web-Konsolefür das OSGi-Bundle Konfiguration von DAM-Inhaltsfragmenten.
Ressourcentypen
Eine Liste von sling:resourceTypes
kann bereitgestellt werden, um Komponenten zu definieren, die für die Wiedergabe von Inhaltsfragmenten verwendet werden und auf die die Hintergrundverarbeitung angewendet werden soll.
Referenzeigenschaften
Eine Liste von Eigenschaften kann konfiguriert werden, um anzugeben, wo der Verweis auf das Fragment für die jeweilige Komponente gespeichert wird.
Es gibt keine direkte Zuordnung zwischen Eigenschaft und Komponententyp.
AEM verwendet einfach die erste Eigenschaft im Absatz. Daher sollten Sie die Eigenschaften sorgfältig auswählen.
Es gibt noch einige weitere Richtlinien, die Sie befolgen müssen, um sicherzustellen, dass die Komponente mit der Hintergrundverarbeitung des Inhaltsfragments kompatibel ist:
Der Name der Eigenschaft, die das Rendern der Elemente definiert, muss element
oder elementNames
lauten.
Der Name der Eigenschaft, die das Rendern der Variante definiert, muss variation
oder variationName
lauten.
Falls die Ausgabe mehrerer Elemente (durch Verwendung von elementNames
zur Angabe mehrerer Elemente) unterstützt wird, wird der tatsächliche Anzeigemodus durch die displayMode
-Eigenschaft definiert:
singleText
lautet (und nur ein Element konfiguriert ist), wird das Element als Text mit Zwischeninhalt, Layout-Unterstützung usw. gerendert. Dies ist die Standardeinstellung für Fragmente, in denen nur ein einzelnes Element gerendert wird.Falls das Fragment für displayMode
== singleText
(implizit oder explizit) gerendert wird, müssen auch folgende zusätzlichen Eigenschaften berücksichtigt werden:
paragraphScope
definiert, ob alle Absätze oder nur ein Absatzbereich gerendert werden sollen (Werte: all
oder range
).paragraphScope
== range
, definiert die paragraphRange
-Eigenschaft den Absatzbereich, der gerendert werden soll.Inhaltsfragmente können mit folgenden Frameworks integriert werden:
Übersetzungen
Inhaltsfragmente sind vollständig mit dem AEM-Übersetzungs-Workflow integriert. Auf Architekturebene bedeutet dies:
Die einzelnen Übersetzungen eines Inhaltsfragments sind separate Fragmente, z. B.:
sie befinden sich unter verschiedenen Sprachstämmen:
/content/dam/<path>/en/<to>/<fragment>
im Vergleich zu
/content/dam/<path>/de/<to>/<fragment>
sie verwenden jedoch genau denselben relativen Pfad unterhalb des Sprachstamms:
/content/dam/<path>/en/<to>/<fragment>
im Vergleich zu
/content/dam/<path>/de/<to>/<fragment>
Außer den regelbasierten Pfaden besteht keinerlei Verbindung zwischen den unterschiedlichen Sprachversionen von Inhaltsfragmenten. Sie werden als zwei separate Fragmente behandelt, obwohl die Benutzeroberfläche Funktionen zum Navigieren zwischen den Sprachvarianten beinhaltet.
Der AEM-Übersetzungs-Workflow arbeitet mit /content
:
/conf
befinden, sind sie nicht in diesen Übersetzungen beinhaltet. Sie können die Strings der Benutzeroberfläche internationalisieren.Metadatenschemata
CFM bietet ein eigenes, spezifisches Schema:
/libs/dam/content/schemaeditors/forms/contentfragment
dieses kann bei Bedarf erweitert werden.
Das entsprechende Schemaformular ist mit dem Fragmenteditor integriert.
Sie können die Server-seitige API für den Zugriff auf Inhaltsfragmente verwenden, siehe:
com.adobe.cq.dam.cfm
Es wird dringend empfohlen, die Server-seitige API zu verwenden, anstatt direkt auf die Inhaltsstruktur zuzugreifen.
Die folgenden drei Schnittstellen können als Einstiegspunkte dienen:
Fragmentvorlage
FragmentTemplate
Verwenden Sie FragmentTemplate.createFragment()
zum Erstellen eines neuen Fragments.
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Diese Schnittstelle steht für:
Diese Daten können Folgendes beinhalten:
Zugriff auf grundlegende Daten (Titel, Beschreibung)
Zugriff auf Vorlagen/Modelle für die Elemente des Fragments:
ElementTemplate
)Zugriff auf Vorlagen für Varianten des Fragments:
VariationTemplate
)Erste verknüpfte Inhalte abrufen
Schnittstellen, die wichtige Informationen darstellen:
ElementTemplate
VariationTemplate
Inhaltsfragment
ContentFragment
In dieser Schnittstelle können Sie abstrakt mit einem Inhaltsfragment arbeiten.
Es wird dringend empfohlen, über diese Benutzeroberfläche auf ein Fragment zuzugreifen. Eine direkte Änderung der Inhaltsstruktur sollte vermieden werden.
Die Schnittstelle bietet folgende Möglichkeiten:
Verwalten grundlegender Daten (z. B. Abrufen von Namen, Abrufen/Festlegen von Titel, Beschreibung)
Zugriff auf Metadaten
Zugriff auf Elemente:
ContentElement
)Auflisten der für das Fragment definierten Varianten
Globales Erstellen neuer Varianten
Verwalten zugeordneter Inhalte:
Zugreifen auf das Fragmentmodell oder Vorlage
Folgende Schnittstellen stehen für die Hauptelemente eines Fragments:
Inhaltselement
ContentElement
Abrufen grundlegender Daten (Name, Titel, Beschreibung)
Abrufen/Festlegen von Inhalten
Zugriff auf Varianten eines Elements:
ContentVariation
)Tastaturbefehl zum Auflösen von Varianten (Anwenden zusätzlicher implementierungsspezifischer Ausweich-Logik, falls die angegebene Variante für ein Element nicht verfügbar ist)
Inhaltsvariante
ContentVariation
Alle drei Schnittstellen (ContentFragment
, ContentElement
, ContentVariation
) erweitern die Versionable
-Schnittstelle durch zusätzliche, für Inhaltsfragmente erforderliche Versionierungsfunktionen:
Folgendes kann angepasst werden:
ContentFragment
kann angepasst werden an:
Resource
– die zugrunde liegende Sling-Ressource. Beachten Sie, dass beim direkten Aktualisieren der zugrunde liegenden Resource
das ContentFragment
-Objekt neu erstellt werden muss.Asset
– die DAM-Asset
-Abstrahierung, die für das Inhaltsfragment steht. Beachten Sie, dass beim direkten Aktualisieren des Asset
das ContentFragment
-Objekt neu erstellt werden muss.ContentElement
kann angepasst werden an:
ElementTemplate
– für den Zugriff auf die Strukturdaten des Elements.FragmentTemplate
kann angepasst werden an:
Resource
– die Resource
, die das Modell, auf das verwiesen wird, oder die ursprüngliche Vorlage, die kopiert wurde, bestimmt.
Resource
vorgenommene Änderungen werden nicht automatisch für die FragmentTemplate
übernommen.Resource
kann angepasst werden an:
ContentFragment
FragmentTemplate
Beachten Sie Folgendes:
Die API ist implementiert, um Funktionen bereitzustellen, die von der Benutzeroberfläche unterstützt werden.
Die gesamte API ist so konzipiert, dass Änderungen nicht automatisch persistent gespeichert werden (es sei denn, dies ist anders in der Java-Dokumentation der API angegeben). Daher müssen Sie immer den Ressourcenkonfliktlöser der entsprechenden Anfrage (oder den tatsächlich verwendeten Konfliktlöser) festlegen.
Aufgaben, für die möglicherweise zusätzliche Arbeitsschritte erforderlich sind:
ContentElement
wird die Datenstruktur nicht aktualisiert (beim globalen Erstellen auf Basis von ContentFragment
wird sie jedoch aktualisiert).Bei AEM 6.4 ist die Client-seitige API intern.
Beachten Sie Folgendes:
filter.xml
filter.xml
für die Inhaltsfragmentverwaltung ist so konfiguriert, dass es sich nicht mit dem Hauptinhaltspaket für Assets überschneidet.
Eine Bearbeitungssitzung wird gestartet, wenn der Benutzer ein Inhaltsfragment in einer der Editor-Seiten öffnet. Die Bearbeitungssitzung ist beendet, wenn der Benutzer den Editor durch Auswählen von Speichern oder Abbrechen verlässt.
Für das Steuern einer Bearbeitungssitzung gelten folgende Voraussetzungen:
Folgende Prozesse sind involviert:
Starten einer Sitzung
Beenden einer Sitzung
Die automatische Speicherung wird angehalten.
Beim Speichern:
Beim Rollback:
Bearbeiten
Die möglichen Aktionen sind:
Einstieg in eine Seite
Überprüfen Sie, ob bereits eine Bearbeitungssitzung vorhanden ist. durch Überprüfung des entsprechenden Cookies.
Wenn eine existiert, überprüfen Sie, ob die Bearbeitungssitzung für das Inhaltsfragment gestartet wurde, das derzeit bearbeitet wird.
Wenn keine Bearbeitungssitzung vorhanden ist, warten Sie auf die erste vom Benutzer vorgenommene Änderung (siehe unten).
Überprüfen Sie, ob das Inhaltsfragment bereits auf einer Seite referenziert ist, und zeigen Sie entsprechende Informationen an, falls dies der Fall ist.
Inhaltsänderung
Verlassen einer Seite
Dazu können Sie die Ressource, die für die API steht, wie folgt anpassen:
com.adobe.cq.dam.cfm.ContentFragment
Beispiel:
// 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
}
Um programmgesteuert ein neues Inhaltsfragment zu erstellen, müssen Sie Folgendes verwenden:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Beispiel:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Das Intervall für das automatische Speichern (gemessen in Sekunden) kann mit dem Konfigurations-Manager (ConfMgr) definiert werden:
Knoten: <conf-root>/settings/dam/cfm/jcr:content
Eigenschaftsname: autoSaveInterval
Typ: Long
Standard: 600
(10 Minuten); wird definiert in /libs/settings/dam/cfm/jcr:content
Wenn Sie ein Intervall von 5 Minuten für das automatische Speichern festlegen möchten, müssen Sie die Eigenschaft auf dem Knoten definieren. Beispiel:
Knoten: /conf/global/settings/dam/cfm/jcr:content
Eigenschaftsname: autoSaveInterval
Typ: Long
Wert: 300
(5 Minuten entsprechen 300 Sekunden)
Siehe Inhaltsfragmentvorlagen für vollständige Informationen.
Weitere Informationen finden Sie unter