All’interno di Adobe Experience Manager as a Cloud Service un frammento di contenuto estende una risorsa standard; vedi:
Creazione e gestione di frammenti di contenuto e Authoring delle pagine con frammenti di contenuto per ulteriori informazioni sui frammenti di contenuto.
Gestione delle risorse per ulteriori informazioni sulle risorse standard.
Le basi parti costituenti di un frammento 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 al modello possono quindi influire su eventuali frammenti dipendenti.
I modelli sono formati da 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 di read
autorizzazioni per il modello.
Qualsiasi modifica apportata a un modello di frammento di contenuto esistente può avere un impatto sui frammenti dipendenti; questo può portare a proprietà orfane in tali frammenti.
Content Fragment Management (CFM) fa parte di AEM Assets come:
I frammenti di contenuto sono considerati una funzione di Sites come:
I frammenti di contenuto, basati su un modello di frammento di contenuto, sono mappati su una singola risorsa:
Tutti i contenuti sono memorizzati nella jcr:content/data
nodo della risorsa:
I dati dell’elemento vengono memorizzati sotto il sotto-nodo principale:
jcr:content/data/master
Le varianti sono memorizzate sotto un nodo secondario che porta il nome della variante: ad esempio jcr:content/data/myvariation
I dati di ciascun elemento vengono memorizzati nel rispettivo sottonodo come proprietà con il nome dell’elemento: Ad esempio, il contenuto dell’elemento text
viene memorizzato come proprietà text
su jcr:content/data/master
I metadati e il contenuto associato sono memorizzati di seguito jcr:content/metadata
Ad eccezione del titolo e della descrizione, che non sono considerati metadati tradizionali e memorizzati su
jcr:content
Come per le risorse standard, un frammento di contenuto è conservato in:
/content/dam
Per maggiori dettagli vedi Frammento di contenuto - Considerazioni sull’eliminazione.
Per integrare con Assets core:
La funzione Content Fragment Management (CFM) si basa sul core Assets.
CFM fornisce le proprie implementazioni per gli elementi nelle viste a schede/colonne/elenco; questi plug in nelle implementazioni di rendering dei contenuti di Assets esistenti.
Sono stati estesi diversi componenti di Assets per gestire i frammenti di contenuto.
La Il componente Frammento di contenuto fa parte dei componenti core. Vedi Sviluppo di componenti core per ulteriori dettagli.
È possibile fare riferimento ai frammenti di contenuto da AEM pagine, come per qualsiasi altro tipo di risorsa. AEM fornisce Componente core Frammento di contenuto - a che consente di includere frammenti di contenuto nelle pagine. Puoi anche estendere questo Frammento di contenuto componente di base.
Il componente utilizza il fragmentPath
per fare riferimento al frammento di contenuto effettivo. La fragmentPath
la proprietà è gestita allo stesso modo di proprietà simili di altri tipi di attività; ad esempio, quando il frammento di contenuto viene spostato in un’altra posizione.
Il componente ti 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 consente il contenuto intermedio:
Qui il componente permette di inserire altre risorse (immagini, ecc.) tra i paragrafi del frammento a cui si fa riferimento.
Per il contenuto intermedio è necessario:
essere consapevole della possibilità di riferimenti instabili; il contenuto intermedio (aggiunto durante l’authoring di una pagina) non presenta alcuna relazione fissa con il paragrafo accanto al quale è posizionato, mediante l’inserimento di un nuovo paragrafo (nell’editor dei frammenti di contenuto) prima che la posizione del contenuto intermedio perda la posizione relativa
prendi in considerazione i parametri aggiuntivi (come 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.
Ciò 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 con la pagina.
I frammenti di contenuto possono essere integrati con:
Traduzioni
I frammenti di contenuto sono completamente integrati con 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:
si trovano sotto radici linguistiche diverse; ma condividono esattamente lo stesso percorso relativo sotto la radice linguistica pertinente:
/content/dam/<path>/en/<to>/<fragment>
rispetto a
/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; vengono gestiti come due frammenti separati, anche se l’interfaccia utente fornisce i mezzi per navigare tra le varianti di lingua.
Il flusso di lavoro di traduzione AEM funziona con /content
:
/conf
, non sono incluse in tali traduzioni. Puoi internazionalizzare le stringhe di interfaccia utente.Schemi metadati
Frammenti di contenuto (ri)utilizza l’ schemi di metadati, che può essere definito con risorse standard.
CFM fornisce il proprio schema specifico:
/libs/dam/content/schemaeditors/forms/contentfragment
se necessario, può essere esteso.
Il rispettivo modulo schema viene integrato con l’editor frammento.
Puoi utilizzare l’API lato server per accedere ai frammenti di contenuto; vedi:
È consigliabile utilizzare l’API lato server invece di accedere direttamente alla struttura dei contenuti.
Le tre interfacce seguenti possono fungere da punti di ingresso:
Frammento di contenuto (Frammento di contenuto)
Questa interfaccia consente di lavorare con un frammento di contenuto in modo astratto.
L’interfaccia ti fornisce i mezzi per:
Gestire i dati di base (ad esempio nome get; get/set title/description)
Accedere ai metadati
Elementi di accesso:
Elementi elenco
Ottieni elementi per nome
Crea nuovi elementi (vedi Avvertenze)
Accedere ai dati degli elementi (vedi ContentElement
)
Varianti di elenco definite per il frammento
Crea nuove varianti a livello globale
Gestisci il contenuto associato:
Accedere al modello del frammento
Le interfacce che rappresentano gli elementi principali di un frammento sono:
Elemento contenuto (ContentElement)
Ottenere dati di base (nome, titolo, descrizione)
Ottieni/Imposta contenuto
Accedere alle varianti di un elemento:
ContentVariation
)Collegamento per la risoluzione delle varianti (se la variante specificata non è disponibile per un elemento, è possibile applicare una logica di fallback aggiuntiva specifica per l’implementazione)
Variazione di contenuto (ContentVariation)
Tutte e tre le interfacce ( ContentFragment
, ContentElement
, ContentVariation
) estendi Versionable
Interfaccia, che aggiunge funzionalità di controllo delle versioni, necessaria per i frammenti di contenuto:
È possibile adattare quanto segue:
ContentFragment
può essere adattato a:
Resource
- la risorsa Sling sottostante; aggiornamento del sottostante Resource
richiede direttamente la ricostruzione del ContentFragment
oggetto.
Asset
- DAM Asset
astrazione che rappresenta il frammento di contenuto; aggiornamento Asset
richiede direttamente la ricostruzione del ContentFragment
oggetto.
ContentElement
può essere adattato a:
ElementTemplate
- per accedere alle informazioni strutturali dell'elemento.Resource
può essere adattato a:
ContentFragment
Va osservato che:
L’intera API è progettata per not le modifiche persistono automaticamente (salvo diversa indicazione nel JavaDoc API). Quindi sarà sempre necessario impegnare il risolutore risorse della rispettiva richiesta (o il resolver che si sta effettivamente utilizzando).
Attività che potrebbero richiedere ulteriore sforzo:
Si consiglia vivamente di creare nuove varianti da ContentFragment
. In questo modo tutti gli elementi condivideranno questa variante e le strutture di dati globali appropriate verranno aggiornate secondo le necessità per riflettere la variante appena creata nella struttura del contenuto.
Rimozione di varianti esistenti tramite un elemento, utilizzando ContentElement.removeVariation()
, non aggiorna le strutture di dati globali assegnate alla variante. Per garantire che queste strutture di dati siano mantenute sincronizzate, utilizza ContentFragment.removeVariation()
rimuove una variante a livello globale.
L’API lato client è interna.
Consulta le seguenti risorse:
filter.xml
La filter.xml
per la gestione dei frammenti di contenuto è configurata in modo che non si sovrapponga al pacchetto di contenuto core Assets.
Considera queste informazioni di base. Non si deve cambiare nulla qui (in quanto è contrassegnato come area privata nell'archivio), ma potrebbe aiutare in alcuni casi a capire come funzionano le cose sotto il cofano.
La modifica di un frammento di contenuto, che può estendersi su più visualizzazioni (= pagine di HTML), è atomica. Poiché le funzionalità di modifica a più visualizzazioni atomiche non sono un concetto AEM tipico, i frammenti di contenuto utilizzano ciò che viene chiamato 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 eseguite su live come per tutte le altre modifiche AEM. Quando la sessione di modifica viene avviata, viene creata una versione dello stato corrente e non modificato. Se un utente annulla una modifica, questa viene ripristinata. Se l'utente fa clic su Salva, non viene fatto nulla di specifico, in quanto tutte le modifiche sono state eseguite live di conseguenza, tutte le modifiche sono già persistenti. Inoltre, facendo clic su Salva attiverà alcune elaborazioni in background (ad esempio la creazione di informazioni di ricerca full-text e/o la gestione di risorse con file multimediali diversi).
Esistono alcune misure di sicurezza per i casi di bordo; 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.
Tieni presente che due utenti possono modificare contemporaneamente lo stesso frammento di contenuto e pertanto possono sovrascrivere le rispettive modifiche. Per evitare questo problema, il frammento di contenuto deve essere bloccato applicando il Pagamento sul frammento.
A questo scopo, puoi 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
}
Per creare un nuovo frammento di contenuto a livello di programmazione, è necessario utilizzare un
FragmentTemplate
adattato da una risorsa modello.
Esempio:
Resource modelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = modelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
La intervallo di salvataggio automatico (misurato 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); questo è definito in /libs/settings/dam/cfm/jcr:content
Se desideri impostare un intervallo di salvataggio automatico di 5 minuti, devi 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)
Per ulteriori informazioni, consulta