Un fragment de contenu étend une ressource standard ; voir :
Création et gestion des fragments de contenu et Création de pages avec des fragments de contenu pour plus d’informations sur les fragments de contenu.
Gestion des ressources et Personnalisation et extension de ressources pour plus d’informations sur les ressources standard.
Les éléments de base d’un fragment de contenu sont les suivants :
Selon le type de fragment, des modèles sont également utilisés :
Les modèles de fragment de contenu sont désormais recommandés pour créer tous les fragments.
Les modèles de fragment de contenu sont utilisés pour tous les exemples dans WKND.
Avant la version 6.3 d’AEM, les fragments de contenu étaient créés à partir de modèles (templates) différents des modèles (models) actuels.
Les anciens modèles (templates) de fragment de contenu sont désormais obsolètes. Ils peuvent toujours être utilisés pour créer des fragments, mais il est recommandé d’utiliser à la place les nouveaux modèles de fragment de contenu. Aucune nouvelle fonctionnalité ne sera ajoutée aux modèles de fragment et elles seront supprimées dans une version ultérieure.
Modèles de fragment de contenu :
Toutes les modifications apportées à un modèle de fragment de contenu existant peuvent impacter les fragments dépendants, ce qui peut engendrer des propriétés orphelines dans ces fragments.
Modèles de fragment de contenu :
La gestion des fragments de contenu (CFM) fait partie d’AEM Assets en tant que :
Les fragments de contenu avec du contenu structuré (c’est-à-dire basé sur un modèle de fragment de contenu) sont mappés à une ressource unique :
L’ensemble du contenu est stocké sous le nœud jcr:content/data
de la ressource :
Les données d’éléments sont stockées sous le sous-nœud maître :
jcr:content/data/master
Les variations sont stockées sous un sous-nœud portant le nom de la variation :
par exemple, jcr:content/data/myvariation
.
Les données de chaque élément sont stockées dans le sous-nœud respectif en tant que propriété avec le nom d’élément :
par exemple, le contenu de l’élément text
est stocké en tant que propriété text
sur jcr:content/data/master
.
Les métadonnées et le contenu associé sont stockés sous jcr:content/metadata
Hormis le titre et la description, qui ne sont pas considérés comme des métadonnées traditionnelles et sont stockés sur jcr:content
.
Les fragments de contenu simples (basés sur un modèle) sont mappés à un composite constitué d’une ressource principale et de sous-ressources (facultatives) :
Toutes les informations autres que le contenu d’un fragment (titre, description, métadonnées, structure, etc.) sont gérées exclusivement sur la ressource principale.
Le contenu du premier élément d’un fragment est mappé au rendu d’origine de la ressource principale.
Les éléments supplémentaires (s’ils existent) sont mappés aux sous-ressources de la ressource principale.
Comme pour les ressources standard, un fragment de contenu est conservé sous :
/content/dam
Pour plus d’informations, voir Fragments de contenu – considérations sur la suppression.
Le composant de base Fragment de contenu est désormais recommandé. Voir Développement des composants principaux pour plus d’informations.
Les fragments de contenu peuvent être référencés à partir des pages d’AEM, comme tout autre type de ressource. AEM fournit la variable Fragment de contenu composant principal - a qui permet d’inclure des fragments de contenu sur vos pages. Vous pouvez également étendre ce composant principal Fragment de contenu.
Le composant utilise la propriété fragmentPath
pour référencer le fragment de contenu. La propriété fragmentPath
est traitée de la même façon que les propriétés similaires d’autres types de ressources, par exemple, lorsque le fragment de contenu est déplacé vers un autre emplacement.
Le composant permet de sélectionner la variation à afficher.
En outre, une plage de paragraphes peut être sélectionnée pour limiter la sortie ; par exemple, elle peut être utilisée pour la sortie à plusieurs colonnes.
Le composant permet contenu intermédiaire:
Ici, le composant vous permet de placer d’autres ressources (images, etc.) entre les paragraphes du fragment référencé.
Pour le contenu intermédiaire, vous devez :
Modèle de fragment de contenu :
Lors de l’utilisation d’un fragment de contenu basé sur un modèle de fragment de contenu sur une page, le modèle est référencé. Cela signifie que si le modèle n’a pas été publié lorsque vous publiez la page, celui-ci est marqué et le modèle ajouté aux ressources à publier avec la page.
Modèle de fragment de contenu :
Lors de l’utilisation d’un fragment de contenu qui était basé sur un modèle de fragment de contenu sur une page, il n’y a aucune référence car le modèle a été copié lors de la création du fragment.
L’implémentation principale des fragments de contenu est, par exemple, chargée de rendre les instances d’un fragment utilisé sur une page consultable ou de gérer le contenu multimédia mixte. Cette implémentation doit savoir quels composants sont utilisés pour le rendu des fragments et comment le rendu est paramétré.
Les paramètres correspondants peuvent être configurés dans la console Web pour le lot OSGi Configuration des composants de fragments de contenu.
Types de ressources
Une liste de sling:resourceTypes
peut être fournie de façon à définir les composants qui sont utilisés pour le rendu des fragments de contenu et l’endroit où le traitement en arrière-plan doit être appliqué.
Propriétés de référence
Une liste de propriétés peut être configurée pour spécifier l’emplacement où la référence au fragment est stockée pour le composant correspondant.
Il n’existe pas de mappage direct entre la propriété et le type de composant.
AEM utilise simplement la première propriété disponible sur un paragraphe. Vous devez donc choisir les propriétés avec soin.
Il existe d’autres instructions que vous devez respecter pour vous assurer que votre composant est compatible avec le traitement des fragments de contenu en arrière-plan :
Le nom de la propriété dans laquelle le ou les éléments dont le rendu doit être effectué sont définis doit être element
ou elementNames
.
Le nom de la propriété dans laquelle est définie la variation dont le rendu doit être effectué doit être variation
ou variationName
.
Si la sortie de plusieurs éléments est prise en charge (à l’aide de elementNames
pour spécifier plusieurs éléments), le mode d’affichage est défini par la propriétédisplayMode
:
singleText
(et qu’il n’y a qu’un seul élément configuré), l’élément est rendu en tant que texte avec du contenu intermédiaire, la prise en charge de disposition, etc. Il s’agit de la valeur par défaut des fragments dans lesquels un seul élément est rendu.Si le fragment est rendu pour displayMode
== singleText
(de manière implicite ou explicite), les propriétés supplémentaires suivantes entrent en jeu :
paragraphScope
définit si tous les paragraphes ou uniquement une plage de paragraphes doivent être rendus (valeurs all
ou range
).
Si paragraphScope
== range
, alors la propriété paragraphRange
définit la plage de paragraphes dont le rendu doit être effectué.
Les fragments de contenu peuvent être intégrés avec :
Des traductions
Les fragments de contenu sont entièrement intégrés au workflow de traduction AEM. Sur le plan architectural, cela signifie :
Les traductions individuelles d’un fragment de contenu sont en fait des fragments distincts, par exemple :
elles se trouvent sous différentes racines de langue :
/content/dam/<path>/en/<to>/<fragment>
ou
/content/dam/<path>/de/<to>/<fragment>
mais ils partagent exactement le même chemin relatif sous la racine de langue :
/content/dam/<path>/en/<to>/<fragment>
ou
/content/dam/<path>/de/<to>/<fragment>
Outre les chemins basés sur des règles, il n’existe aucune connexion entre les différentes versions linguistiques d’un fragment de contenu ; elles sont traitées comme deux fragments distincts, bien que l’IU fournisse les moyens de naviguer entre les variantes de langues.
Le workflow de traduction AEM fonctionne avec /content
:
Les modèles de fragment de contenu résidant dans /conf
; ils ne sont pas inclus dans ces traductions. Vous pouvez internationaliser les chaînes de l’IU.
Les modèles étant copiés pour créer le fragment, ce processus est donc implicite.
Des schémas de métadonnées
Les fragments de contenu (re-utiliser) schémas de métadonnées, qui peut être défini avec des ressources standard.
CFM fournit son propre schéma spécifique :
/libs/dam/content/schemaeditors/forms/contentfragment
il peut être étendu si nécessaire.
Le formulaire de schéma respectif est intégré à l’éditeur de fragments.
Vous pouvez utiliser l’API côté serveur pour accéder à vos fragments de contenu ; voir :
Il est vivement recommandé d’utiliser l’API côté serveur au lieu d’accéder directement à la structure de contenu.
Les trois interfaces suivantes peuvent faire office de points d’entrée :
Modèle de fragment (FragmentTemplate)
Utilisez FragmentTemplate.createFragment()
pour créer un fragment.
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Cette interface représente :
Ces informations peuvent inclure les éléments suivants :
Accès aux données de base (titre, description)
Accédez aux modèles/modèles pour les éléments du fragment :
ElementTemplate
)Accédez aux modèles pour les variantes du fragment :
VariationTemplate
)Obtenir le contenu associé initial
Interfaces qui représentent des informations importantes :
ElementTemplate
VariationTemplate
Fragment de contenu (ContentFragment)
Cette interface vous permet d’utiliser un fragment de contenu de manière abstraite.
Il est vivement recommandé d’accéder à un fragment via cette interface. La modification directe de la structure de contenu doit être évitée.
L’interface permet les actions suivantes :
Gestion des informations de base (par exemple, obtenir le nom ou obtenir/définir le titre/la description)
Accès aux métadonnées
Accès aux éléments :
Eléments de liste
Obtention des éléments par nom
Création des éléments (voir Restrictions)
Accès aux données des éléments (voir ContentElement
)
Variations de liste définies pour le fragment
Création de variations globalement
Gérer le contenu associé :
Accès au modèle du fragment (ancien ou nouveau)
Les interfaces qui représentent les éléments principaux d’un fragment sont les suivantes :
Élément de contenu (ContentElement)
Obtention des informations de base (nom, titre et description)
Obtenir/définir du contenu
Accéder aux variantes d’un élément :
ContentVariation
)Raccourci pour résoudre les variations (application d’une logique de secours supplémentaire spécifique à l’implémentation si la variation spécifiée n’est pas disponible pour un élément)
Variation de contenu (ContentVariation)
Chacune des trois interfaces (ContentFragment
, ContentElement
et ContentVariation
) étend l’interface Versionable
, ce qui ajoute des fonctionnalités de contrôle de version, requises pour les fragments de contenu :
Ce qui suit peut être adapté :
ContentFragment
peut être adapté en :
Resource
: la ressource sous-jacente de Sling ; notez que la mise à jour directe de la Resource
sous-jacente requiert la reconstruction de l’objet ContentFragment
;
Asset
– Abstraction Asset
de gestion des ressources numériques représentant le fragment de contenu ; la mise à jour directe de la Asset
sous-jacente nécessite la reconstruction de l’objet ContentFragment
.
ContentElement
peut être adapté en :
ElementTemplate
pour accéder aux informations structurelles de l’élément.FragmentTemplate
peut être adapté en :
Resource
: la Resource
déterminant le modèle référencé ou le modèle d’origine qui a été copié ;
Resource
ne sont pas répercutées automatiquement dans le FragmentTemplate
.Resource
peut être adapté en :
ContentFragment
FragmentTemplate
Il convient de noter les éléments suivants :
L’API est mise en oeuvre afin de fournir des fonctionnalités prises en charge par l’interface utilisateur.
L’API entière est conçue pour not conserver les modifications automatiquement (sauf indication contraire dans l’API JavaDoc) ; Vous devrez donc toujours valider le résolveur de ressources de la requête correspondante (ou le résolveur que vous utilisez réellement).
Tâches pouvant nécessiter un effort supplémentaire :
La création/suppression d’éléments ne met pas à jour la structure de données de fragments simples (basés sur un modèle de fragment).
La création de variations de ContentElement
ne met pas à jour la structure de données (tandis que la création globale à partir de ContentFragment
la met à jour).
La suppression de variations existantes ne met pas à jour la structure de données.
Pour AEM 6.5, l’API côté client est interne.
Reportez-vous aux informations suivantes :
filter.xml
Le fichier filter.xml
pour la gestion des fragments de contenu est configuré pour ne pas chevaucher le package de contenu de base d’Assets.
Une session de modification est lancée lorsque l’utilisateur ouvre un fragment de contenu dans l’une des pages de l’éditeur. La session de modification est terminée lorsque l’utilisateur quitte l’éditeur en sélectionnant Enregistrer ou Annuler.
Les conditions pour contrôler une session de modification sont les suivantes :
Les processus impliqués sont les suivants :
Démarrage d’une session
Fin d’une session
L’enregistrement automatique est arrêté.
Lors de la validation :
Lors du retour arrière :
Modification
Les actions possibles sont les suivantes :
Saisie d’une page
Vérifiez si une session de modification est déjà présente en vérifiant le cookie correspondant.
S’il en existe un, vérifiez que la session de modification a été lancée pour le fragment de contenu en cours de modification.
S’il n’existe aucune session de modification, attendez la première modification effectuée par l’utilisateur (voir ci-dessous).
Vérifiez si le fragment de contenu est déjà référencé sur une page et affichez les informations appropriées si tel est le cas.
Modification du contenu
Sortie d’une page
Pour ce faire, vous pouvez adapter la ressource qui représente l’API à :
com.adobe.cq.dam.cfm.ContentFragment
Par exemple :
// 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
}
Pour créer un fragment de contenu par programmation, vous devez utiliser :
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Par exemple :
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
L’intervalle d’enregistrement automatique (exprimé en secondes) peut être défini à l’aide de Configuration Manager (ConfMgr) :
Nœud : <*conf-root*>/settings/dam/cfm/jcr:content
Nom de la propriété : autoSaveInterval
Type : Long
Valeur par défaut : 600
(10 minutes) ; cette valeur est définie sur /libs/settings/dam/cfm/jcr:content
Si vous souhaitez définir un intervalle d’enregistrement automatique de 5 minutes, vous devez définir la propriété sur le nœud, par exemple :
Nœud : /conf/global/settings/dam/cfm/jcr:content
Nom de la propriété : autoSaveInterval
Type : Long
Valeur : 300
(5 minutes correspondent à 300 secondes).
Voir Modèles de fragment de contenu pour plus d’informations.
Pour plus d’informations, voir