Personalizzazione ed estensione dei frammenti di contenuto customizing-and-extending-content-fragments
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 di pagine con frammenti di contenuto per ulteriori informazioni sui frammenti di contenuto.
-
Gestione di Assets per ulteriori informazioni sulle risorse standard.
Architettura architecture
Le parti di base di un frammento di contenuto sono le seguenti:
- Un frammento di contenuto stesso
- È costituito da uno o più elementi contenuto
- Può avere una o più Varianti di contenuto
I singoli frammenti di contenuto sono basati su modelli per frammenti di contenuto:
-
I modelli per frammenti di contenuto definiscono la struttura di un frammento di contenuto al momento della creazione.
-
Un frammento fa riferimento al modello, pertanto le modifiche apportate al modello possono influire su qualsiasi frammento dipendente o influire su di esso.
-
I modelli sono costituiti da tipi di dati.
-
Le funzioni per aggiungere nuove varianti e così via devono aggiornare di conseguenza il frammento.
note note NOTE Per visualizzare/eseguire il rendering di un frammento di contenuto, il tuo account deve disporre di autorizzazioni read
per il modello.note caution CAUTION Eventuali modifiche apportate a un modello per frammenti di contenuto esistente possono influire sui frammenti dipendenti, con conseguenti proprietà orfane.
Integrazione di Sites con Assets integration-of-sites-with-assets
La gestione dei frammenti di contenuto (CFM) fa parte di Adobe Experience Manager (AEM) Assets in quanto:
- I frammenti di contenuto sono risorse.
- Utilizzano le funzionalità esistenti di Assets.
- Sono completamente integrati con Assets (console di amministrazione, ecc.).
I frammenti di contenuto sono considerati una funzione di AEM Sites in quanto:
- Vengono utilizzati per la creazione delle pagine.
Mappatura di frammenti di contenuto su Assets mapping-content-fragments-to-assets
I frammenti di contenuto, basati su un modello per frammenti di contenuto, sono mappati su una singola risorsa:
-
Tutto il contenuto è archiviato nel nodo
jcr:content/data
della risorsa:-
I dati dell’elemento vengono memorizzati nel sottonodo principale:
jcr:content/data/master
-
Le varianti vengono memorizzate in un sottonodo 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'elementotext
è archiviato come proprietàtext
injcr: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 injcr:content
Posizione risorsa asset-location
Come per le risorse standard, un frammento di contenuto si trova in:
/content/dam
Autorizzazioni risorse asset-permissions
Vedi Frammento di contenuto - Considerazioni sull'eliminazione.
Integrazione delle funzioni feature-integration
Per l’integrazione con Assets Core:
-
La funzione di gestione dei frammenti di contenuto (CFM) si basa sul core Assets.
-
CFM fornisce le proprie implementazioni per gli elementi nelle viste a schede/colonne/elenchi; queste si collegano alle implementazioni esistenti di rendering dei contenuti Assets.
-
Diversi componenti Assets sono stati estesi per gestire i frammenti di contenuto.
Utilizzo dei frammenti di contenuto nelle pagine using-content-fragments-in-pages
È possibile fare riferimento ai frammenti di contenuto dalle pagine AEM, come qualsiasi altro tipo di risorsa. AEM fornisce il componente core Frammento di contenuto - un componente che consente di includere frammenti di contenuto nelle pagine. Puoi anche estendere questo componente core Frammento di contenuto.
-
Il componente utilizza la proprietà
fragmentPath
per fare riferimento al frammento di contenuto effettivo. La proprietàfragmentPath
viene gestita nello stesso modo di proprietà simili di altri tipi di risorse, 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 un intervallo di paragrafi per limitare l’output; ad esempio, può essere utilizzato per l’output a più colonne.
-
Il componente consente il contenuto intermedio:
-
In questo caso, il componente consente di inserire altre risorse (immagini e così via) tra i paragrafi del frammento di riferimento.
-
Per il contenuto intermedio:
-
Presta attenzione alla possibilità di riferimenti instabili. Il contenuto intermedio (aggiunto durante l’authoring di una pagina) non ha una relazione fissa con il paragrafo posizionato accanto a esso. L’inserimento di un nuovo paragrafo (nell’editor frammento di contenuto) prima che la posizione del contenuto intermedio possa perdere la posizione relativa.
-
Considera i parametri aggiuntivi (come i filtri di variante e di paragrafo) per configurare ciò che viene renderizzato sulla pagina.
-
-
Integrazione con altri framework integration-with-other-frameworks
I 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 frammenti separati; ad esempio:
-
si trovano in diverse directory principali della lingua, ma condividono il percorso relativo sotto la directory principale della lingua pertinente:
/content/dam/<path>/en/<to>/<fragment>
rispetto a
/content/dam/<path>/de/<to>/<fragment>
-
-
Oltre ai percorsi basati su regole, non esiste un’altra 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 navigare tra le varianti di lingua.
note note NOTE Il flusso di lavoro di traduzione AEM funziona con /content
:- Poiché i modelli per frammenti di contenuto risiedono in
/conf
, non sono inclusi in tali traduzioni. Puoi internazionalizzare le stringhe dell’interfaccia utente.
-
-
Schemi metadati
-
I frammenti di contenuto utilizzano e riutilizzano gli schemi di metadati che possono essere definiti con risorse standard.
-
CFM fornisce uno schema specifico:
/libs/dam/content/schemaeditors/forms/contentfragment
se necessario, tale periodo può essere prolungato.
-
Il rispettivo modulo schema è integrato con l’editor di frammenti.
-
API di gestione dei frammenti di contenuto - Lato server the-content-fragment-management-api-server-side
Puoi utilizzare l’API lato server per accedere ai frammenti di contenuto; vedi:
Interfacce chiave key-interfaces
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 consente di:
-
Gestisci dati di base (ad esempio, nome, titolo/descrizione get/set)
-
Accedere ai metadati
-
Elementi di accesso:
-
Elementi elenco
-
Ottieni elementi per nome
-
Crea elementi (vedi Avvertenze)
-
Accedere ai dati degli elementi (vedere
ContentElement
)
-
-
Elenca le varianti definite per il frammento
-
Creare varianti a livello globale
-
Gestisci contenuto associato:
- Elencare raccolte
- Aggiungere raccolte
- Rimuovi raccolte
-
Accedere al modello del frammento
Le interfacce che rappresentano gli elementi principali di un frammento sono:
-
Elemento contenuto (Elemento contenuto)
-
Ottenere dati di base (nome, titolo, descrizione)
-
Ottieni/Imposta contenuto
-
Accedere alle varianti di un elemento:
- Varianti elenco
- Ottieni varianti per nome
- Crea varianti (vedi Avvertenze)
- Rimuovi varianti (vedi Avvertenze)
- Accedere ai dati della variante (vedere
ContentVariation
)
-
Scelta rapida per la risoluzione delle varianti (applicazione di alcune logiche di fallback aggiuntive specifiche per l’implementazione se la variante specificata non è disponibile per un elemento)
-
-
Variante contenuto (Variante contenuto)
- Ottenere dati di base (nome, titolo, descrizione)
- Ottieni/Imposta contenuto
- Sincronizzazione semplice, basata sulle informazioni modificate più di recente
Tutte e tre le interfacce (
ContentFragment
,ContentElement
,ContentVariation
) estendono l'interfacciaVersionable
, che aggiunge funzionalità di controllo delle versioni, necessarie per i frammenti di contenuto:- Creare una versione dell’elemento
- Elencare le versioni dell’elemento
- Ottenere il contenuto di una versione specifica dell'elemento con versione
-
Adattamento - Utilizzo di adaptTo() adapting-using-adaptto
È possibile adattare:
-
ContentFragment
può essere adattato a:-
Resource
- la risorsa Sling sottostante; per aggiornareResource
sottostante è necessario ricompilare direttamente l'oggettoContentFragment
. -
Asset
- L'astrazione DAMAsset
che rappresenta il frammento di contenuto; l'aggiornamento diAsset
richiede direttamente la ricostruzione dell'oggettoContentFragment
.
-
-
ContentElement
può essere adattato a:ElementTemplate
- per accedere alle informazioni strutturali dell'elemento.
-
Resource
può essere adattato a:ContentFragment
Avvertenze caveats
Si noti che:
-
L'intera API è progettata per non mantenere le modifiche automaticamente (a meno che non sia indicato diversamente in API JavaDoc). Pertanto, esegui sempre il commit del risolutore risorse della rispettiva richiesta (o del risolutore effettivamente in uso).
-
Attività che potrebbero richiedere un ulteriore impegno:
-
Adobe consiglia di creare varianti da
ContentFragment
. In questo modo tutti gli elementi condividono questa variante e le strutture globali di dati appropriate vengono aggiornate secondo necessità per riflettere la nuova variante nella struttura del contenuto. -
La rimozione delle varianti esistenti tramite un elemento, utilizzando
ContentElement.removeVariation()
, non aggiorna le strutture di dati globali assegnate alla variante. Per garantire la sincronizzazione di queste strutture di dati, utilizzare inveceContentFragment.removeVariation()
, che rimuove una variante a livello globale.
-
API di gestione dei frammenti di contenuto - Lato client the-content-fragment-management-api-client-side
Informazioni aggiuntive additional-information
Consulta le seguenti risorse:
-
filter.xml
filter.xml
per la gestione dei frammenti di contenuto è configurato in modo da non sovrapporsi al pacchetto di contenuti di base di Assets.
Modifica sessioni edit-sessions
La modifica di un frammento di contenuto, che può estendersi su più visualizzazioni (= pagine HTML), è atomica. Poiché le funzionalità di modifica atomiche di più viste non sono un tipico concetto AEM, i frammenti di contenuto utilizzano ciò che viene definita sessione di modifica.
Quando l’utente apre un frammento di contenuto nell’editor, viene avviata una sessione di modifica. La sessione di modifica è terminata quando l'utente esce dall'editor selezionando Salva o Annulla.
Tecnicamente, tutte le modifiche vengono eseguite sul contenuto live, come con tutte le altre modifiche AEM. All'avvio della sessione di modifica, viene creata una versione dello stato corrente non modificato. Se un utente annulla una modifica, la versione viene ripristinata. Se l'utente fa clic su Salva, non viene eseguita alcuna operazione specifica, perché la modifica è stata eseguita sul contenuto live, pertanto tutte le modifiche sono già persistenti. Inoltre, facendo clic su Salva vengono attivate alcune elaborazioni in background, ad esempio la creazione di informazioni di ricerca full-text, la gestione di risorse multimediali diverse o entrambe.
Esistono alcune misure di sicurezza per i casi limite; 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.
Due utenti possono modificare lo stesso frammento di contenuto contemporaneamente e quindi sovrascrivere le modifiche l’uno dell’altro. Per evitare questo problema, il frammento di contenuto deve essere bloccato applicando l'azione Estrai dell'amministrazione DAM al frammento.
Esempi examples
Esempio: accesso a un frammento di contenuto esistente example-accessing-an-existing-content-fragment
A questo scopo, puoi adattare la risorsa che rappresenta l’API a:
com.adobe.cq.dam.cfm.ContentFragment
Ad 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 frammento di contenuto example-creating-a-new-content-fragment
Per creare un frammento di contenuto a livello di programmazione, utilizzare un FragmentTemplate
adattato da una risorsa modello.
Ad 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 example-specifying-the-auto-save-interval
L'intervallo di salvataggio automatico (misurato in secondi) può essere definito utilizzando Gestione configurazione (ConfMgr):
-
Nodo:
<conf-root>/settings/dam/cfm/jcr:content
-
Nome proprietà:
autoSaveInterval
-
Tipo:
Long
-
Predefinito:
600
(10 minuti); definito il/libs/settings/dam/cfm/jcr:content
Se desideri impostare un intervallo di salvataggio automatico di 5 minuti, definisci la proprietà sul nodo.
Ad esempio:
-
Nodo:
/conf/global/settings/dam/cfm/jcr:content
-
Nome proprietà:
autoSaveInterval
-
Tipo:
Long
-
Valore:
300
(5 minuti equivalgono a 300 secondi)
Componenti per l’authoring delle pagine components-for-page-authoring
Per ulteriori informazioni, consulta
- Componenti core - Componente frammento di contenuto (consigliato)