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 e Personalizzazione ed estensione delle risorse per ulteriori informazioni sulle risorse standard.
Le basi parti costituenti di un frammento di contenuto:
A seconda del tipo di frammento, vengono utilizzati anche modelli o modelli:
Modelli per frammenti di contenuto sono consigliati per la creazione di tutti i nuovi frammenti.
I modelli per frammenti di contenuto vengono utilizzati per tutti gli esempi in WKND.
Prima di AEM 6.3, i frammenti di contenuto venivano creati in base a modelli anziché a modelli.
I modelli per frammenti di contenuto sono diventati obsoleti. Possono ancora essere utilizzati per creare frammenti, ma si consiglia invece di utilizzare Modelli per frammenti di contenuto . Non verranno aggiunte nuove funzioni ai modelli di frammento e verranno rimosse in una versione futura.
Modelli per frammenti di contenuto:
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.
Modelli di frammento di contenuto:
Content Fragment Management (CFM) fa parte di AEM Assets come:
I frammenti di contenuto con contenuto strutturato (ovvero basati su un modello di frammento di contenuto) vengono mappati su un’unica 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
I frammenti di contenuto semplice (basati su un modello) sono mappati su un composito costituito da una risorsa principale e (facoltativo) da risorse secondarie:
Tutte le informazioni non relative al contenuto di un frammento (ad esempio titolo, descrizione, metadati, struttura) vengono gestite esclusivamente sulla risorsa principale.
Il contenuto del primo elemento di un frammento è mappato al rendering originale della risorsa principale.
Eventuali elementi aggiuntivi (se esistenti) sono mappati su risorse secondarie della risorsa principale.
Come per le risorse standard, un frammento di contenuto è conservato in:
/content/dam
Per maggiori dettagli vedi Frammento di contenuto - Considerazioni sull’eliminazione.
La Componente core frammento di contenuto è ora consigliato. 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 Frammento di contenuto componente principale - 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 permette 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:
Modello per frammenti di contenuto:
Quando si utilizza un frammento di contenuto basato su un modello di frammento di contenuto su una pagina, viene fatto riferimento al modello. 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.
Modello per frammento di contenuto:
Quando si utilizza un frammento di contenuto basato su un modello di frammento di contenuto in una pagina, non esiste alcun riferimento in quanto il modello è stato copiato al momento della creazione del frammento.
L’implementazione back-end dei frammenti di contenuto, ad esempio, è responsabile della possibilità di cercare le istanze di un frammento utilizzato in una pagina o della gestione di contenuti multimediali diversi. Questa implementazione deve sapere quali componenti vengono utilizzati per il rendering dei frammenti e come viene parametrizzato il rendering.
I parametri di questo possono essere configurati nel Console web, per il bundle OSGi Configurazione del componente Frammento di contenuto.
Tipi di risorse
Un elenco di
sling:resourceTypes
può essere fornito per definire i componenti utilizzati per il rendering dei frammenti di contenuto e a cui applicare l’elaborazione in background.
Proprietà riferimento
È possibile configurare un elenco di proprietà per specificare dove memorizzare il riferimento al frammento per il rispettivo componente.
Non esiste una mappatura diretta tra proprietà e tipo di componente.
AEM semplicemente la prima proprietà che si trova in un paragrafo. Quindi dovreste scegliere le proprietà con attenzione.
Per garantire la compatibilità del componente con l’elaborazione in background del frammento di contenuto, è necessario seguire alcune linee guida:
Il nome della proprietà in cui è definito l’elemento o gli elementi di cui eseguire il rendering deve essere element
o elementNames
.
Il nome della proprietà in cui è definita la variante di cui eseguire il rendering deve essere variation
o variationName
.
Se è supportato l’output di più elementi (utilizzando elementNames
per specificare più elementi), la modalità di visualizzazione effettiva è definita dalla proprietà displayMode
:
singleText
(e è configurato un solo elemento) l’elemento viene rappresentato come un testo con contenuto intermedio, supporto del layout, ecc. Questa è l’impostazione predefinita per i frammenti in cui viene eseguito il rendering di un solo elemento.Se viene eseguito il rendering del frammento per displayMode
== singleText
(implicitamente o esplicitamente) entrano in gioco le seguenti proprietà aggiuntive:
paragraphScope
definisce se deve essere eseguito il rendering di tutti i paragrafi o solo di un intervallo di paragrafi (valori: all
rispetto a range
)
if paragraphScope
== range
quindi la proprietà paragraphRange
definisce l’intervallo di paragrafi da sottoporre a rendering
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 diverse radici linguistiche:
/content/dam/<path>/en/<to>/<fragment>
rispetto a
/content/dam/<path>/de/<to>/<fragment>
ma condividono esattamente lo stesso percorso relativo sotto la radice della lingua:
/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
:
Poiché i modelli di frammento di contenuto risiedono in /conf
, non sono incluse in tali traduzioni. È possibile internazionalizzare le stringhe di interfaccia utente.
I modelli vengono copiati per creare il frammento in modo che ciò sia implicito.
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:
Modello frammento (FragmentTemplate)
Utilizzo FragmentTemplate.createFragment()
per la creazione di un nuovo frammento.
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Questa interfaccia rappresenta:
Queste informazioni possono includere:
Accedere ai dati di base (titolo, descrizione)
Accedere a modelli/modelli per gli elementi del frammento:
ElementTemplate
)Modelli di accesso per le varianti del frammento:
VariationTemplate
)Ottieni contenuto associato iniziale
Interfacce che rappresentano informazioni importanti:
ElementTemplate
VariationTemplate
Frammento di contenuto (Frammento di contenuto)
Questa interfaccia consente di lavorare con un frammento di contenuto in modo astratto.
È consigliabile accedere a un frammento tramite questa interfaccia. È necessario evitare di modificare direttamente la struttura del contenuto.
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 o 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; tenere presente che l'aggiornamento del sottostante Resource
direttamente, richiede la ricostruzione del ContentFragment
oggetto.
Asset
- DAM Asset
astrazione che rappresenta il frammento di contenuto; nota che l'aggiornamento Asset
direttamente, richiede la ricostruzione del ContentFragment
oggetto.
ContentElement
può essere adattato a:
ElementTemplate
- per accedere alle informazioni strutturali dell'elemento.FragmentTemplate
può essere adattato a:
Resource
- il Resource
determinazione del modello di riferimento o del modello originale copiato;
Resource
non vengono riflessi automaticamente nel FragmentTemplate
.Resource
può essere adattato a:
ContentFragment
FragmentTemplate
Va osservato che:
L’API viene implementata per fornire funzionalità supportate dall’interfaccia utente.
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:
La creazione e la rimozione di nuovi elementi non comporta l’aggiornamento della struttura dati di frammenti semplici (basati su un modello di frammento).
Creazione di nuove varianti da ContentElement
non aggiornerà la struttura dei dati (ma le creerà a livello globale da ContentFragment
).
La rimozione di varianti esistenti non aggiornerà la struttura dati.
Per AEM 6.5 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.
Una sessione di modifica viene avviata quando l’utente apre un frammento di contenuto in una delle pagine dell’editor. La sessione di modifica viene terminata quando l’utente esce dall’editor selezionando Salva o Annulla.
Requisiti per il controllo di una sessione di modifica:
I processi in questione sono i seguenti:
Avvio di una sessione
Completamento di una sessione
Il salvataggio automatico viene interrotto.
Al momento del commit:
Al momento del ripristino:
Modifica
Le azioni possibili sono:
Inserimento di una pagina
Controlla se è già presente una sessione di modifica; controllando il rispettivo cookie.
Se esiste, verifica che la sessione di modifica sia stata avviata per il frammento di contenuto in fase di modifica
Se non esiste alcuna sessione di modifica, attendi la prima modifica apportata dall’utente (vedi di seguito).
Controlla se in una pagina è già presente un riferimento al frammento di contenuto e visualizza le informazioni appropriate in tal caso.
Modifica del contenuto
Uscita da una pagina
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:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Esempio:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
L'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)
Vedi Modelli per frammenti di contenuto per informazioni complete.
Per ulteriori informazioni, consulta