Alcune funzionalità per i frammenti di contenuto richiedono l'applicazione di AEM 6.4 Service Pack 2 (6.4.2.0).
Un frammento di contenuto estende una risorsa standard; vedere:
Creazione e gestione di frammenti di contenuto e creazione di 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 parti costitutive di base di un frammento di contenuto sono:
A seconda del tipo di frammento, vengono utilizzati anche modelli o modelli:
Per la creazione di tutti i frammenti è ora consigliabile utilizzare i modelli di frammento di contenuto.
I modelli di frammento di contenuto vengono utilizzati per tutti gli esempi in We.Retail.
Modelli per frammenti di contenuto:
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.
Modelli di frammento di contenuto:
Content Fragment Management (CFM) fa parte di AEM Assets come:
I frammenti di contenuto con contenuto strutturato (ovvero basato su un modello di frammento di contenuto) vengono mappati su una singola risorsa:
Tutto il contenuto è memorizzato nel nodo jcr:content/data
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
è memorizzato come proprietà text
in jcr:content/data/master
I metadati e il contenuto associato sono memorizzati sotto jcr:content/metadata
Ad eccezione del titolo e della descrizione, che non sono considerati metadati tradizionali e memorizzati in jcr:content
I frammenti di contenuto semplici (basati su un modello) sono mappati su un composito costituito da una risorsa principale e (facoltativamente) da risorse secondarie:
Tutte le informazioni non di contenuto di un frammento (ad esempio titolo, descrizione, metadati, struttura) vengono gestite esclusivamente sulla risorsa principale.
Il contenuto del primo elemento di un frammento viene mappato sulla rappresentazione originale della risorsa principale.
Eventuali elementi aggiuntivi (se esistenti) sono mappati alle risorse secondarie della risorsa principale.
Come per le risorse standard, un frammento di contenuto è memorizzato in:
/content/dam
Per ulteriori dettagli, vedere Frammento di contenuto - Elimina considerazioni.
È ora consigliabile Componente di base frammento di contenuto. Per ulteriori informazioni, vedere Sviluppo di componenti core.
È 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 frammenti di contenuto nelle pagine. È inoltre possibile estendere questo componente di base Frammento di contenuto.
Il componente utilizza la proprietà fragmentPath
per fare riferimento al frammento di contenuto effettivo. La proprietà fragmentPath
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 consente di inserire contenuto intermedio:
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 in una pagina, viene fatto riferimento al modello. 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.
Modello frammento di contenuto:
Quando si utilizza un frammento di contenuto basato su un modello di frammento di contenuto in una pagina, non è presente alcun riferimento in quanto il modello è stato copiato al momento della creazione del frammento.
L’implementazione di back-end dei frammenti di contenuto, ad esempio, consente di rendere ricercabili le istanze di un frammento utilizzate in una pagina o di gestire contenuti multimediali diversi. Questa implementazione deve sapere quali componenti vengono utilizzati per il rendering dei frammenti e come viene parametrizzato il rendering.
I parametri per questo possono essere configurati nella console Web, per il bundle OSGi Configurazione frammenti di contenuto DAM.
Tipi di risorse
È possibile fornire un elenco di sling:resourceTypes
per definire i componenti utilizzati per il rendering dei frammenti di contenuto e a cui applicare l'elaborazione in background.
Proprietà di riferimento
È possibile configurare un elenco di proprietà per specificare la posizione in cui viene memorizzato il riferimento al frammento per il rispettivo componente.
Non esiste una mappatura diretta tra proprietà e tipo di componente.
AEM considera semplicemente la prima proprietà che è possibile trovare su un paragrafo. Quindi dovreste scegliere le proprietà con attenzione.
Esistono ancora alcune linee guida da seguire per garantire che il componente sia compatibile con l’elaborazione in background del frammento di contenuto:
Il nome della proprietà in cui è definito l'elemento o gli elementi da sottoporre a rendering deve essere element
o elementNames
.
Il nome della proprietà in cui è definito il rendering della variante deve essere variation
o variationName
.
Se l'output di più elementi è supportato (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 di layout e così via. 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
(in modo implicito o esplicito), vengono visualizzate 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
vs range
)paragraphScope
== range
la proprietà paragraphRange
definisce l'intervallo di paragrafi da sottoporre a renderingI frammenti di contenuto possono essere integrati con:
Traduzioni
I frammenti di contenuto sono completamente integrati con il 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 in diverse radici linguistiche:
/content/dam/<path>/en/<to>/<fragment>
vs
/content/dam/<path>/de/<to>/<fragment>
ma condividono esattamente lo stesso percorso relativo sotto la radice della lingua:
/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
:
/conf
, questi non sono inclusi in tali traduzioni. È possibile internazionalizzare le stringhe dell'interfaccia utente.Schemi metadati
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.
È possibile utilizzare l'API lato server per accedere ai frammenti di contenuto; vedere:
com.adobe.cq.dam.cfm
È vivamente consigliato utilizzare l'API lato server invece di accedere direttamente alla struttura del contenuto.
Le tre interfacce seguenti possono fungere da punti di ingresso:
Modello frammento
FragmentTemplate
Utilizzare FragmentTemplate.createFragment()
per creare 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:
Accesso ai dati di base (titolo, descrizione)
Accesso a modelli/modelli per gli elementi del frammento:
ElementTemplate
)Modelli di accesso per le varianti del frammento:
VariationTemplate
)Ottenere il contenuto associato iniziale
Interfacce che rappresentano informazioni importanti:
ElementTemplate
VariationTemplate
Frammento di contenuto
ContentFragment
Questa interfaccia consente di utilizzare un frammento di contenuto in modo astratto.
È vivamente consigliato accedere a un frammento tramite questa interfaccia. È necessario evitare di modificare direttamente la struttura del contenuto.
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:
ContentElement
)Elenca le varianti definite per il frammento
Creare nuove varianti a livello globale
Gestire il contenuto associato:
Accesso al modello o 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:
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
Tutte e tre le interfacce ( ContentFragment
, ContentElement
, ContentVariation
) estendono l'interfaccia Versionable
, che aggiunge funzionalità di controllo delle versioni necessarie per i frammenti di contenuto:
È possibile adattare quanto segue:
ContentFragment
può essere adattato a:
Resource
- la risorsa Sling sottostante; tenere presente che l'aggiornamento Resource
diretto del sottostante richiede la ricostruzione dell' ContentFragment
oggetto.Asset
- l' Asset
astrazione DAM che rappresenta il frammento di contenuto; tenere presente che l'aggiornamento Asset
diretto dell'oggetto richiede la ricostruzione dell' ContentFragment
oggetto.ContentElement
può essere adattato a:
ElementTemplate
- per accedere alle informazioni strutturali dell'elemento.FragmentTemplate
può essere adattato a:
Resource
- la Resource
determinazione del modello di riferimento o del modello originale copiato;
Resource
non vengono riportate automaticamente nella cartella FragmentTemplate
.Resource
può essere adattato a:
ContentFragment
FragmentTemplate
Va osservato che:
L'API è implementata per fornire funzionalità supportate dall'interfaccia utente.
L'intera API è progettata per not 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:
ContentElement
non comporterà l'aggiornamento della struttura dei dati (ma la loro creazione a livello globale da ContentFragment
sarà possibile).Per AEM 6.4 l'API lato client è interna.
Consulta:
filter.xml
La filter.xml
per la gestione dei frammenti di contenuto è configurata in modo che non si sovrapponga al pacchetto di contenuti 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 è terminata quando l'utente esce dall'editor selezionando Salva o Annulla.
Requisiti per il controllo di una sessione di modifica:
I processi coinvolti sono:
Avvio di una sessione
Completamento di una sessione
Salvataggio automatico interrotto.
Al momento del commit:
Al ripristino:
Modifica
Le azioni possibili sono:
Inserimento di una pagina
Verificate la presenza di una sessione di modifica; controllando il rispettivo cookie.
Se esistente, verificate che la sessione di modifica sia stata avviata per il frammento di contenuto in corso di modifica
Se non esiste alcuna sessione di modifica, attendete la prima modifica apportata dall’utente (vedete di seguito).
Verificate che in una pagina sia già presente un riferimento al frammento di contenuto e visualizzate le informazioni appropriate in tal caso.
Modifica del contenuto
Uscire da una pagina
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
}
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 (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
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)
Per ulteriori informazioni, vedere Modelli di frammento di contenuto.
Per ulteriori informazioni, consulta