Show Menu
ARGOMENTI×

Personalizzazione ed estensione dei frammenti di contenuto

All’interno di Adobe Experience Manager, come Cloud Service, un frammento di contenuto estende una risorsa standard; vedere:

Architettura

Le parti costitutive di base di un frammento di contenuto sono:
  • Un Frammento Di Contenuto,
  • costituito da uno o più elementi di contenuto,
  • e che può avere una o più varianti di contenuto.
I singoli frammenti di contenuto si basano su modelli di frammenti di contenuto:
  • I modelli di frammento di contenuto definiscono la struttura di un frammento di contenuto al momento della creazione.
  • Un frammento fa riferimento al modello; le modifiche apportate al modello possono quindi avere o avranno effetto su eventuali frammenti dipendenti.
  • I modelli sono composti di tipi di dati.
  • Le funzioni per aggiungere nuove varianti, ecc., devono aggiornare di conseguenza il frammento.
    Per visualizzare/eseguire il rendering di un frammento di contenuto, l'account deve disporre read delle autorizzazioni per il modello.
    Qualsiasi modifica apportata a un modello di frammento di contenuto esistente può avere un impatto sui frammenti dipendenti; in questo modo è possibile creare proprietà orfane nei frammenti.

Integrazione di Siti con Risorse

Content Fragment Management (CFM) fa parte di AEM Assets come:
  • I frammenti di contenuto sono risorse.
  • Utilizzano la funzionalità Risorse esistente.
  • Sono completamente integrati con le risorse (console di amministrazione, ecc.).
I frammenti di contenuto sono considerati una funzione Siti come:
  • Vengono utilizzati per la creazione delle pagine.

Mappatura di frammenti di contenuto in risorse

I frammenti di contenuto, basati su un modello di frammento di contenuto, sono mappati su una singola risorsa:
  • Tutto il contenuto è memorizzato nel jcr:content/data nodo della risorsa:
    • I dati dell'elemento vengono memorizzati sotto il nodo secondario principale:
      jcr:content/data/master
    • Le varianti sono memorizzate in un nodo secondario che contiene il nome della variante: ad esempio jcr:content/data/myvariation
    • I dati di ciascun elemento vengono memorizzati nel rispettivo nodo secondario come proprietà con il nome dell'elemento: Ad esempio, il contenuto dell'elemento text viene memorizzato come proprietà text in jcr:content/data/master
  • I metadati e il contenuto associato sono memorizzati sotto jcr:content/metadata Eccetto il titolo e la descrizione, che non sono considerati metadati tradizionali e memorizzati in jcr:content

Posizione risorsa

Come per le risorse standard, un frammento di contenuto è memorizzato in:
/content/dam

Autorizzazioni risorsa

Per ulteriori dettagli, vedere Frammento di contenuto - Considerazioni sull'eliminazione.

Integrazione delle funzionalità

Per integrare con il core Assets:
  • La funzione Content Fragment Management (CFM) si basa sul core Assets.
  • CFM fornisce le proprie implementazioni per gli elementi nelle viste scheda/colonna/elenco; questi plug-in nelle implementazioni di rendering dei contenuti di Assets.
  • Diversi componenti Risorse sono stati estesi per gestire i frammenti di contenuto.

Utilizzo di frammenti di contenuto nelle pagine

Il componente Frammento di contenuto fa parte dei componenti core. Per ulteriori informazioni, consulta Sviluppo di componenti di base.
È possibile fare riferimento ai frammenti di contenuto dalle AEM pagine, come qualsiasi altro tipo di risorsa. AEM fornisce il componente di base Frammento di contenuto, un componente che consente di includere nelle pagine frammenti di contenuto. È inoltre possibile estendere questo componente di base Frammento di contenuto.
  • Il componente utilizza la fragmentPath proprietà per fare riferimento al frammento di contenuto effettivo. La fragmentPath proprietà viene gestita allo stesso modo delle proprietà simili di altri tipi di risorse; ad esempio, quando il frammento di contenuto viene spostato in un'altra posizione.
  • Il componente consente di selezionare la variante da visualizzare.
  • È inoltre possibile selezionare una serie di paragrafi per limitare l'output; ad esempio, può essere utilizzato per l'output a più colonne.
  • Il componente permette il contenuto intermedio:
    • Qui il componente permette di inserire altre risorse (immagini, ecc.) tra i paragrafi del frammento a cui viene fatto riferimento.
    • Per il contenuto intermedio è necessario:
      • essere a conoscenza della possibilità di riferimenti instabili; il contenuto intermedio (aggiunto durante l’authoring di una pagina) non ha alcuna relazione fissa con il paragrafo a cui è posizionato accanto, inserendo un nuovo paragrafo (nell’editor dei frammenti di contenuto) prima che la posizione del contenuto intermedio possa perdere la posizione relativa
      • prendete in considerazione i parametri aggiuntivi (come i filtri per varianti e paragrafi) per configurare il rendering sulla pagina
Modello per frammenti di contenuto:
Quando un frammento di contenuto viene utilizzato in una pagina, viene fatto riferimento al modello di frammento di contenuto su cui si basa.
Questo significa che se il modello non è stato pubblicato al momento della pubblicazione della pagina, verrà contrassegnato e il modello verrà aggiunto alle risorse da pubblicare insieme alla pagina.

Integrazione con altri framework

I frammenti di contenuto possono essere integrati con:
  • Traduzioni
    I frammenti di contenuto sono completamente integrati nel flusso di lavoro di traduzione AEM. A livello architettonico, ciò significa:
    • Le singole traduzioni di un frammento di contenuto sono in realtà frammenti separati; ad esempio:
      • sono situati in radici linguistiche diverse; ma condividono esattamente lo stesso percorso relativo sotto la radice della lingua pertinente:
        /content/dam/<path>/en/<to>/<fragment>
        vs
        /content/dam/<path>/de/<to>/<fragment>
    • Oltre ai percorsi basati su regole, non esiste un'ulteriore connessione tra le diverse versioni linguistiche di un frammento di contenuto; sono gestiti come due frammenti separati, anche se l’interfaccia utente fornisce i mezzi per spostarsi tra le varianti di lingua.
    Il flusso di lavoro di traduzione AEM funziona con /content :
    • Poiché i modelli di frammento di contenuto risiedono in /conf , questi non sono inclusi in tali traduzioni. Potete internazionalizzare le stringhe di interfaccia.
  • Schemi metadati
    • I frammenti di contenuto (re)utilizzano gli schemi di metadati, che possono essere definiti con risorse standard.
    • CFM fornisce uno schema specifico proprio:
      /libs/dam/content/schemaeditors/forms/contentfragment
      può essere esteso, se necessario.
    • Il modulo schema corrispondente è integrato con l'editor frammento.

API di gestione dei frammenti di contenuto - Lato server

È possibile utilizzare l'API lato server per accedere ai frammenti di contenuto; vedere:
È vivamente consigliato utilizzare l'API lato server invece di accedere direttamente alla struttura del contenuto.

Interfacce chiave

Le tre interfacce seguenti possono fungere da punti di ingresso:
  • Frammento di contenuto ( ContentFragment )
    Questa interfaccia consente di utilizzare un frammento di contenuto in modo astratto.
    L'interfaccia fornisce i mezzi per:
    • Gestire i dati di base (ad es. get name; get/set title/description)
    • Accesso ai metadati
    • Elementi di accesso:
      • Elementi elenco
      • Ottieni elementi per nome
      • Creare nuovi elementi (vedere Caveats )
      • Dati degli elementi di accesso (vedere ContentElement )
    • Elenca le varianti definite per il frammento
    • Creare nuove varianti a livello globale
    • Gestire il contenuto associato:
      • Elenca raccolte
      • Aggiungere raccolte
      • Rimuovere le raccolte
    • Accesso al modello del frammento
    Le interfacce che rappresentano gli elementi primari di un frammento sono:
    • Elemento contenuto ( ContentElement )
      • Ottenere i dati di base (nome, titolo, descrizione)
      • Ottenere/impostare il contenuto
      • Accesso alle varianti di un elemento:
        • Varianti elenco
        • Ottieni varianti per nome
        • Creare nuove varianti (vedere Caveats )
        • Rimuovere le varianti (vedere Caveats )
        • Accedere ai dati delle varianti (vedere ContentVariation )
      • Tasti di scelta rapida per la risoluzione delle varianti (applicazione di una logica di fallback specifica per l'implementazione, se la variante specificata non è disponibile per un elemento)
    • Variazione contenuto ( ContentVariation )
      • Ottenere i dati di base (nome, titolo, descrizione)
      • Ottenere/impostare il contenuto
      • Sincronizzazione semplice, in base alle ultime informazioni modificate
    Tutte e tre le interfacce ( ContentFragment , ContentElement , ContentVariation ) estendono l' Versionable interfaccia, che aggiunge funzionalità di controllo delle versioni, necessarie per i frammenti di contenuto:
    • Creare una nuova versione dell'elemento
    • Elenca versioni dell'elemento
    • Ottenete il contenuto di una versione specifica dell’elemento con versione

Adattamento - Utilizzo di adaptTo()

È possibile adattare quanto segue:
  • ContentFragment può essere adattato a:
    • Resource - la risorsa Sling sottostante; per aggiornare Resource direttamente il sottostante è necessario ricreare l' ContentFragment oggetto.
    • Asset - l' Asset astrazione DAM che rappresenta il frammento di contenuto; per aggiornare Asset direttamente l'oggetto è necessario ricrearlo ContentFragment .
  • ContentElement può essere adattato a:
  • Resource può essere adattato a:
    • ContentFragment

Caveats

Va osservato che:
  • L'intera API è progettata per non mantenere le modifiche automaticamente (se non diversamente specificato nel JavaDoc API). Sarà quindi sempre necessario impegnare il risolutore delle risorse della rispettiva richiesta (o il risolutore che si sta utilizzando).
  • Attività che potrebbero richiedere ulteriore sforzo:
    • È vivamente consigliato creare nuove varianti da ContentFragment . In questo modo tutti gli elementi condivideranno questa variante e le strutture di dati globali appropriate saranno aggiornate in base alle esigenze per riflettere la nuova variante creata nella struttura del contenuto.
    • La rimozione delle varianti esistenti tramite un elemento, tramite ContentElement.removeVariation() , non aggiornerà le strutture dati globali assegnate alla variante. Per assicurare che queste strutture di dati siano mantenute sincronizzate, utilizzate ContentFragment.removeVariation() invece, il che rimuove una variante a livello globale.

API di gestione dei frammenti di contenuto - Lato client

L'API lato client è interna.

Informazioni aggiuntive

Consulta:
  • filter.xml
    La filter.xml gestione dei frammenti di contenuto è configurata in modo da non sovrapporsi al pacchetto di contenuto di base di Risorse.

Modifica sessioni

Considerare queste informazioni di base. Non dovete cambiare nulla qui (come è indicato come area ** privata nel repository), ma potrebbe aiutare in alcuni casi a capire come funzionano le cose sotto il coperchio.
La modifica di un frammento di contenuto, che può estendersi su più viste (= pagine HTML), è atomica. Poiché le funzionalità di modifica per più viste atomiche non sono un concetto AEM tipico, i frammenti di contenuto utilizzano quella che viene definita una sessione di modifica.
Una sessione di modifica viene avviata quando l'utente apre un frammento di contenuto nell'editor. La sessione di modifica viene terminata quando l’utente esce dall’editor selezionando Salva o Annulla .
Tecnicamente, tutte le modifiche vengono effettuate sui contenuti live , come per tutte le altre AEM di modifica. Quando la sessione di modifica viene avviata, viene creata una versione dello stato corrente e non modificato. Se un utente annulla una modifica, tale versione viene ripristinata. Se l'utente fa clic su Salva , non viene eseguita alcuna operazione specifica, poiché tutte le modifiche sono state eseguite sul contenuto live , pertanto tutte le modifiche sono già persistenti. Inoltre, se si fa clic su Salva , viene attivata l’elaborazione in background (ad esempio, la creazione di informazioni di ricerca full-text e/o la gestione di risorse multimediali miste).
Esistono alcune misure di sicurezza per i casi Edge; ad esempio, se l’utente tenta di uscire dall’editor senza salvare o annullare la sessione di modifica. È inoltre disponibile un salvataggio automatico periodico per evitare la perdita di dati. Si noti che due utenti possono modificare contemporaneamente lo stesso frammento di contenuto e, di conseguenza, sovrascrivere reciprocamente le modifiche. Per evitare questo problema, è necessario bloccare il frammento di contenuto applicando l'azione Checkout dell'amministrazione DAM sul frammento.

Esempi

Esempio: Accesso a un frammento di contenuto esistente

A tal fine, potete adattare la risorsa che rappresenta l'API a:
com.adobe.cq.dam.cfm.ContentFragment
Esempio:
// 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
}

Esempio: Creazione di un nuovo frammento di contenuto

Per creare un nuovo frammento di contenuto a livello di programmazione, è necessario utilizzare una FragmentTemplate risorsa modello adattata.
Esempio:
Resource modelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = modelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");

Esempio: Specifica dell'intervallo di salvataggio automatico

L’intervallo di salvataggio automatico (espresso in secondi) può essere definito utilizzando il gestore di configurazione (ConfMgr):
  • Nodo: <conf-root>/settings/dam/cfm/jcr:content
  • Nome proprietà: autoSaveInterval
  • Tipo: Long
  • Predefinito: 600 (10 minuti); è definito in /libs/settings/dam/cfm/jcr:content
Per impostare un intervallo di salvataggio automatico di 5 minuti è necessario definire la proprietà sul nodo; ad esempio:
  • Nodo: /conf/global/settings/dam/cfm/jcr:content
  • Nome proprietà: autoSaveInterval
  • Tipo: Long
  • Valore: 300 (5 minuti equivale a 300 secondi)

Componenti per l’authoring delle pagine

Per ulteriori informazioni, consulta