Einige Inhaltsfragmentfunktionen erfordern die Anwendung von AEM 6.4 Service Pack 2 (6.4.2.0).
Ein Inhaltsfragment erweitert ein Standard-Asset. Weitere Informationen zu Inhaltsfragmenten finden Sie unter:
Erstellen und Verwalten von Inhaltsfragmenten und Seitenbearbeitung mit Inhaltsfragmenten.
Weitere Informationen zu Standard-Assets finden Sie unter Verwalten von Assets und Anpassen und Erweitern von 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:
Beispiel: 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 Vorlagen) werden einem Composite aus Haupt-Asset und (optionalen) Unter-Assets zugeordnet:
Alle nicht inhaltsbezogenen Daten in einem Fragment (wie Titel, Beschreibung, Metadaten, Struktur) werden nur im Haupt-Asset verwaltet.
Der Inhalt des ersten Elements eines Fragments wird dem ursprünglichen Ausgabeformat des Haupt-Assets zugeordnet.
Zusätzliche Elemente (falls vorhanden) werden Unter-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 lässt auch Zwischeninhalte zu:
Bei Zwischeninhalten müssen Sie:
Inhaltsfragmentmodell:
Bei Verwendung eines auf einem Inhaltsfragmentmodell basierenden Inhaltsfragments auf einer Seite 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 des Fragments verwendet werden und wie das Rendern parametrisiert wird.
Die erforderlichen Parameter können in der Web-Konsole für das OSGi-Bundle unter DAM Content Fragments Configuration konfiguriert werden.
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.
Eigenschaft und Komponententyp werden nicht direkt zugeordnet.
AEM verwendet einfach die erste Eigenschaft im Absatz. Deshalb 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, für die 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 die Varianten des Fragments:
VariationTemplate
)Abrufen anfänglich zugeordneter Inhalte
Schnittstellen, die für wichtige Daten stehen:
ElementTemplate
VariationTemplate
Inhaltsfragment
ContentFragment
In dieser Schnittstelle können Sie abstrakt mit einem Inhaltsfragment arbeiten.
Es wird dringend empfohlen, über diese Schnittstelle auf ein Fragment zuzugreifen. Das direkte Ändern 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 wird implementiert, um die von der Benutzeroberfläche unterstützte Funktionalität bereitzustellen.
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
Das automatische Speichern wird beendet.
Beim Speichern:
Beim Zurücksetzen:
Bearbeiten
Folgende Aktionen sind möglich:
Aufrufen einer Seite
Überprüfen Sie, ob bereits eine Bearbeitungssitzung läuft, indem Sie das entsprechende Cookie überprüfen.
Falls ja, überprüfen Sie, ob die Bearbeitungssitzung für das derzeit bearbeitete Inhaltsfragment gestartet wurde.
Falls keine Bearbeitungssitzung vorhanden ist, warten Sie, bis der Benutzer die erste Änderung vorgenommen hat (siehe unten).
Überprüfen Sie, ob bereits eine Seite auf das Inhaltsfragment verweist, und zeigen Sie die Daten an, falls zutreffend.
Ändern von Inhalten
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 ein neues Inhaltsfragment zu programmieren, verwenden Sie:
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)
Ausführliche Informationen finden Sie unter Inhaltsfragmentvorlagen.
Weitere Informationen finden Sie unter