Show Menu
THEMEN×

Anpassen und Erweitern von Inhaltsfragmenten

In Adobe Experience Manager as a Cloud Service erweitert ein Inhaltsfragment ein Standard-Asset. Siehe:

Architektur

Ein Inhaltsfragment umfasst die folgenden grundlegenden Bestandteile :
  • Ein Inhaltsfragment ,
  • das ein oder mehrere Inhaltselemente enthält,
  • und eine oder mehrere Inhaltsvarianten aufweisen kann.
Die einzelnen Inhaltsfragmente basieren auf Inhaltsfragmentmodellen:
  • Inhaltsfragmentmodelle definieren die Struktur eines Inhaltsfragments, wenn dieses erstellt wird.
  • Ein Fragment verweist auf das Modell. Änderungen am Modell können sich daher auf alle abhängigen Fragmente auswirken.
  • Modelle werden anhand von Datentypen erstellt.
  • Funktionen zum Hinzufügen neuer Varianten und dergleichen müssen das Fragment entsprechend aktualisieren.
    Damit Sie ein Inhaltsfragment anzeigen/rendern können, muss Ihr Konto über read -Rechte für das Modell verfügen.
    Alle Änderungen an einem vorhandenen Inhaltsfragmentmodell können sich auf abhängige Fragmente auswirken. Daher kann es zu verwaisten Eigenschaften in diesen Fragmenten kommen.

Integration von Sites mit Assets

Die Inhaltsfragmentverwaltung (Content Fragment Management, CFM) ist Teil von AEM Assets:
  • Inhaltsfragmente sind Assets.
  • Sie verwenden vorhandene Assets-Funktionen.
  • Sie sind vollständig mit Assets integriert (Admin-Konsole usw.).
Inhaltsfragmente werden als Sites-Funktion betrachtet, da:
  • sie beim Authoring von Seiten verwendet werden.

Zuordnen von Inhaltsfragmenten zu Assets

Inhaltsfragmente, die auf einem Inhaltsfragmentmodell basieren, werden einem einzelnen Asset zugeordnet:
  • Alle Inhalte werden im Knoten jcr:content/data des Assets gespeichert:
    • Die Elementdaten werden im Master-Unterknoten gespeichert:
      jcr:content/data/master
    • Varianten werden in einem Unterknoten gespeichert, der den Namen der Variante hat: z. B. jcr:content/data/myvariation
    • Die Daten der einzelnen Elemente werden im entsprechenden Unterknoten als Eigenschaft mit dem Elementnamen gespeichert: Das Inhaltselement  text wird beispielsweise mit der Eigenschaft text in jcr:content/data/master gespeichert.
  • Metadaten und verknüpfte Inhalte werden unter jcr:content/metadata gespeichert. Eine Ausnahme bilden der Titel und die Beschreibung, die nicht als Metadaten im herkömmlichen Sinne gelten und hier gespeichert werden: jcr:content

Asset-Speicherort

Wie bei Standard-Assets wird das Inhaltsfragment gespeichert in:
/content/dam

Asset-Berechtigungen

Weitere Informationen finden Sie unter Inhaltsfragmente – Überlegungen zum Löschen .

Funktionsintegration

Integration mit dem Assets-Kern:
  • Die Funktion „Inhaltsfragmentverwaltung“ (Content Fragment Management, CFM) baut auf dem Asset-Kern auf.
  • CFM stellt eigene Implementierungen für Elemente in der Karten-, Spalten- und Listenansicht bereit. Diese sind mit den Ausgabeformatimplementierungen vorhandener Asset-Inhalte verknüpft.
  • Einige Asset-Komponenten wurden für Inhaltsfragmente erweitert.

Verwenden von Inhaltsfragmenten in Seiten

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:
    • Die Komponente ermöglicht es Ihnen, andere Assets (Bilder usw.) zwischen den Absätzen des Fragments zu platzieren, auf das verwiesen wird.
    • Bei Zwischeninhalten müssen Sie:
      • beachten, dass Verweise möglicherweise instabil sind. Bei der Seitenbearbeitung hinzugefügte Zwischeninhalte haben keine feste Beziehung zu dem Absatz, neben dem sie platziert werden; es wird ein neuer Absatz (im Inhaltsfragment-Editor) eingefügt, bevor der Zwischeninhalt die relative Position verlieren kann.
      • die zusätzlichen Parameter (wie Varianten- und Absatzfilter) berücksichtigen, um zu konfigurieren, was auf der Seite dargestellt wird.
Inhaltsfragmentmodell:
Wenn ein Inhaltsfragment auf einer Seite verwendet wird, wird auf das Inhaltsfragmentmodell verwiesen, auf dem es basiert.
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.

Integration mit anderen Frameworks

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, verwenden aber genau denselben relativen Pfad unterhalb des entsprechenden 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 :
    • Da sich die Inhaltsfragmentmodelle in /conf befinden, sind sie nicht in diesen Übersetzungen beinhaltet. Sie können die Strings der Benutzeroberfläche internationalisieren.
  • Metadatenschemata
    • Inhaltsfragmente verwenden Metadatenschemata (wieder), die mit Standard-Assets definiert werden können.
    • CFM bietet ein eigenes, spezifisches Schema:
      /libs/dam/content/schemaeditors/forms/contentfragment
      dieses kann bei Bedarf erweitert werden.
    • Das entsprechende Schemaformular ist mit dem Fragment-Editor integriert.

Server-seitige API für die Inhaltsfragmentverwaltung

Sie können die serverseitige API für den Zugriff auf Inhaltsfragmente verwenden, siehe:
Es wird dringend empfohlen, die serverseitige API zu verwenden, anstatt direkt auf die Inhaltsstruktur zuzugreifen.

Hauptschnittstellen

Die folgenden drei Schnittstellen können als Einstiegspunkte dienen:
  • Inhaltsfragment  ( ContentFragment )
    In dieser Schnittstelle können Sie abstrakt mit einem Inhaltsfragment arbeiten.
    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:
      • Auflisten von Elementen
      • Abrufen von Elementen nach Name
      • Erstellen neuer Elemente (siehe Einschränkungen )
      • Zugriff auf Elementdaten (siehe ContentElement )
    • Auflisten der für das Fragment definierten Varianten
    • Globales Erstellen neuer Varianten
    • Verwalten zugeordneter Inhalte:
      • Auflisten von Sammlungen
      • Hinzufügen von Sammlungen
      • Entfernen von Sammlungen
    • Zugreifen auf das Fragmentmodell
    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:
        • Auflisten von Varianten
        • Abrufen von Varianten nach Name
        • Erstellen neuer Varianten (siehe Einschränkungen )
        • Entfernen von Varianten (siehe Einschränkungen )
        • Zugriff auf Variantendaten (siehe 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 )
      • Abrufen grundlegender Daten (Name, Titel, Beschreibung)
      • Abrufen/Festlegen von Inhalten
      • Einfache Synchronisierung basierend auf den zuletzt geänderten Informationen
    Alle drei Schnittstellen ( ContentFragment , ContentElement , ContentVariation ) erweitern die Versionable -Schnittstelle durch zusätzliche, für Inhaltsfragmente erforderliche Versionierungsfunktionen:
    • Erstellen neuer Versionen des Elements
    • Auflisten der Versionen des Elements
    • Abrufen des Inhalts einer spezifischen Version des versionierten Elements

Anpassen mit adaptTo()

Folgendes kann angepasst werden:
  • ContentFragment kann angepasst werden an:
    • Resource : die zugrunde liegende Sling-Ressource. Um die zugrunde liegende Resource direkt zu aktualisieren, muss das ContentFragment -Objekt neu erstellt werden.
    • Asset : die DAM- Asset -Abstrahierung, die für das Inhaltsfragment steht. Um das zugrunde liegende Asset direkt zu aktualisieren, muss das ContentFragment -Objekt neu erstellt werden.
  • ContentElement kann angepasst werden an:
  • Resource kann angepasst werden an:
    • ContentFragment

Einschränkungen

Beachten Sie Folgendes:
  • 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:
    • Es wird dringend empfohlen, neue Varianten zu erstellen ContentFragment . Auf diese Weise wird sichergestellt, dass alle Elemente diese Variation gemeinsam nutzen und dass geeignete globale Datenstrukturen bei Bedarf aktualisiert werden, um die neu erstellte Variation in der Inhaltsstruktur widerzuspiegeln.
    • Durch das Entfernen vorhandener Varianten eines Elements mithilfe von ContentElement.removeVariation() werden die der Variante zugewiesenen globalen Datenstrukturen nicht aktualisiert. Verwenden Sie stattdessen ContentFragment.removeVariation() , um sicherzustellen, dass diese Datenstrukturen synchron bleiben, wodurch eine Variante global entfernt wird.

Client-seitige API für die Inhaltsfragmentverwaltung

Die Client-seitige API ist intern.

Zusätzliche Informationen

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.

Bearbeitungssitzungen

Beachten Sie diese Hintergrundinformationen. Sie sollten hier nichts ändern (da dies im Repository als privater Bereich gekennzeichnet ist). Es kann aber in einigen Fällen hilfreich sein, die internen Prozesses zu verstehen.
Das Bearbeiten eines Inhaltsfragments, das mehrere Ansichten (d. h. HTML-Seiten) umspannen kann, ist atomisch. Da die atomischen Bearbeitungsfunktionen für mehrere Ansichten kein typisches AEM-Konzept sind, verwenden Inhaltsfragmente eine sogenannte Bearbeitungssitzung .
Eine Bearbeitungssitzung wird gestartet, wenn der Benutzer ein Inhaltsfragment im Editor öffnet. Die Bearbeitungssitzung ist beendet, wenn der Benutzer den Editor durch Auswählen von Speichern oder Abbrechen verlässt.
Technisch gesehen werden alle Änderungen an Live -Inhalten wie bei allen anderen AEM-Bearbeitungen vorgenommen. Beim Starten der Bearbeitungssitzung wird eine Version des aktuellen, nicht bearbeiteten Status erstellt. Wenn ein Benutzer eine Bearbeitung abbricht, wird diese Version wiederhergestellt. Wenn der Benutzer auf Speichern klickt, wird nichts Bestimmtes ausgeführt, da die Bearbeitung an Live -Inhalten ausgeführt wurde. Daher bleiben alle Änderungen bereits erhalten. Durch Klicken auf Speichern wird auch eine Hintergrundverarbeitung ausgelöst (z. B. das Erstellen von Volltextsuchinformationen und/oder das Bearbeiten von gemischten Medien-Assets).
Es gibt einige Sicherheitsmaßnahmen für Randfälle, beispielsweise, wenn der Benutzer versucht, den Editor zu verlassen, ohne die Bearbeitungssitzung zu speichern oder abzubrechen. Außerdem ist eine regelmäßige automatische Speicherung verfügbar, um Datenverluste zu vermeiden. Beachten Sie, dass zwei Benutzer möglicherweise dasselbe Inhaltsfragment gleichzeitig bearbeiten und daher gegenseitig die Änderungen überschreiben können. Um dies zu verhindern, muss das Inhaltsfragment gesperrt werden, indem die Checkout -Aktion der DAM-Verwaltung auf das Fragment angewendet wird.

Beispiele

Beispiel: Zugreifen auf ein vorhandenes Inhaltsfragment

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
}

Beispiel: Erstellen eines neuen Inhaltsfragments

Um programmgesteuert ein neues Inhaltsfragment zu erstellen, verwenden Sie eine FragmentTemplate , die von einer Modellressource angepasst wurde.
Beispiel:
Resource modelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = modelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");

Beispiel: Angeben des Intervalls für das automatische Speichern

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)

Komponenten für die Seitenbearbeitung

Weitere Informationen finden Sie unter