Personalizar y ampliar fragmentos de contenido customizing-and-extending-content-fragments
Dentro de Adobe Experience Manager as a Cloud Service, un fragmento de contenido amplía un recurso estándar; consulte:
-
Creación y administración de fragmentos de contenido y Creación de páginas con fragmentos de contenido para obtener más información acerca de los fragmentos de contenido.
-
Administración de Assets para obtener más información sobre los recursos estándar.
Arquitectura architecture
Las partes constitutivas básicas de un fragmento de contenido son las siguientes:
- Un fragmento de contenido
- Consiste en uno o más elementos de contenido
- Puede tener una o más variaciones de contenido
Los fragmentos de contenido individuales se basan en modelos de fragmentos de contenido:
-
Los modelos de fragmento de contenido definen la estructura de un fragmento de contenido cuando se crea.
-
Un fragmento hace referencia al modelo, por lo que los cambios realizados en el modelo pueden afectar a cualquier fragmento dependiente o no.
-
Los modelos son una compilación de tipos de datos.
-
Las funciones para agregar nuevas variaciones, etc., deben actualizar el fragmento en consecuencia.
note note NOTE Para que pueda mostrar/procesar un fragmento de contenido, su cuenta debe tener read
permisos para el modelo.note caution CAUTION Cualquier cambio en un modelo de fragmento de contenido existente puede afectar a los fragmentos dependientes, lo que puede generar propiedades huérfanas en esos fragmentos.
Integración de Sites con Assets integration-of-sites-with-assets
La administración de fragmentos de contenido (CFM) forma parte de Adobe Experience Manager AEM () Assets como:
- Los fragmentos de contenido son recursos.
- Utilizan la funcionalidad existente de Assets.
- Están totalmente integrados con Assets (Admin Consoles, etc.).
Los fragmentos de contenido se consideran una función de AEM Sites como:
- Se utilizan para crear páginas.
Asignación de fragmentos de contenido a Assets mapping-content-fragments-to-assets
Los fragmentos de contenido, basados en un modelo de fragmento de contenido, se asignan a un único recurso:
-
Todo el contenido se almacena en el nodo
jcr:content/data
del recurso:-
Los datos del elemento se almacenan en el subnodo maestro:
jcr:content/data/master
-
Las variaciones se almacenan en un subnodo que lleva el nombre de la variación:
por ejemplo,jcr:content/data/myvariation
-
Los datos de cada elemento se almacenan en el subnodo respectivo como una propiedad con el nombre del elemento:
por ejemplo, el contenido del elementotext
se almacena como propiedadtext
enjcr:content/data/master
-
-
Los metadatos y el contenido asociado se almacenan debajo de
jcr:content/metadata
Excepto el título y la descripción, que no se consideran metadatos tradicionales y se almacenan enjcr:content
Ubicación del recurso asset-location
Al igual que con los recursos estándar, un fragmento de contenido se encuentra en:
/content/dam
Permisos de recursos asset-permissions
Ver Fragmento de contenido: eliminar consideraciones.
Integración de funciones feature-integration
Para integrar con Assets Core:
-
La función Administración de fragmentos de contenido (CFM) se basa en el núcleo de Assets.
-
CFM proporciona sus propias implementaciones para elementos en las vistas de tarjeta, columna o lista; estos se conectan a las implementaciones existentes de representación de contenido de Assets.
-
Varios componentes de Assets se han ampliado para adaptarse a los fragmentos de contenido.
Uso de fragmentos de contenido en páginas using-content-fragments-in-pages
AEM Se puede hacer referencia a los fragmentos de contenido desde páginas de recursos de la misma manera que desde cualquier otro tipo de recurso. AEM proporciona el componente principal del fragmento de contenido: un componente que permite incluir fragmentos de contenido en las páginas. También puede ampliar este fragmento de contenido componente principal.
-
El componente utiliza la propiedad
fragmentPath
para hacer referencia al fragmento de contenido real. La propiedadfragmentPath
se administra de la misma manera que propiedades similares de otros tipos de recursos; por ejemplo, cuando el fragmento de contenido se mueve a otra ubicación. -
El componente permite seleccionar la variación que se desea mostrar.
-
Además, se puede seleccionar un rango de párrafos para restringir la salida; por ejemplo, esto se puede utilizar para la salida de varias columnas.
-
El componente permite contenido intermedio:
-
En este caso, el componente le permite colocar otros recursos (imágenes, etc.) entre los párrafos del fragmento al que se hace referencia.
-
Para contenido intermedio:
-
Tenga en cuenta la posibilidad de referencias inestables. El contenido intermedio (añadido al crear una página) no tiene relación fija con el párrafo situado junto a él. La inserción de un nuevo párrafo (en el editor de fragmentos de contenido) antes de la posición del contenido intermedio puede perder la posición relativa.
-
Tenga en cuenta los parámetros adicionales (como los filtros de variación y de párrafo) para configurar lo que se procesa en la página.
-
-
Integración con otros marcos integration-with-other-frameworks
Los fragmentos de contenido se pueden integrar con:
-
Traducciones
AEM Los fragmentos de contenido están totalmente integrados con el flujo de trabajo de traducción de la. A nivel arquitectónico, esto significa:
-
Las traducciones individuales de un fragmento de contenido son fragmentos independientes; por ejemplo:
-
se encuentran en diferentes raíces de idioma, pero comparten la ruta relativa debajo de la raíz de idioma correspondiente:
/content/dam/<path>/en/<to>/<fragment>
frente a
/content/dam/<path>/de/<to>/<fragment>
-
-
Además de las rutas basadas en reglas, no hay otra conexión entre las diferentes versiones de idioma de un fragmento de contenido. Se gestionan como dos fragmentos independientes, aunque la interfaz de usuario proporciona los medios para navegar entre las variantes de idioma.
note note NOTE AEM El flujo de trabajo de traducción de funciona con /content
:- Como los modelos de fragmento de contenido residen en
/conf
, no se incluyen en dichas traducciones. Puede internacionalizar las cadenas de interfaz de usuario.
-
-
Esquemas de metadatos
-
Los fragmentos de contenido utilizan y reutilizan los esquemas de metadatos que se pueden definir con recursos estándar.
-
CFM proporciona su propio esquema específico:
/libs/dam/content/schemaeditors/forms/contentfragment
esto se puede ampliar, si es necesario.
-
El formulario de esquema respectivo se integra con el editor de fragmentos.
-
La API de administración de fragmentos de contenido: del lado del servidor the-content-fragment-management-api-server-side
Puede utilizar la API del lado del servidor para acceder a sus fragmentos de contenido; consulte:
Interfaces clave key-interfaces
Las tres interfaces siguientes pueden servir como puntos de entrada:
-
Fragmento de contenido (Fragmento de contenido)
Esta interfaz permite trabajar con un fragmento de contenido de forma abstracta.
La interfaz de le proporciona los medios para lo siguiente:
-
Administrar datos básicos (por ejemplo, obtener nombre; obtener/establecer título/descripción)
-
Acceso a metadatos
-
Elementos de acceso:
-
Lista de elementos
-
Obtener elementos por nombre
-
Crear elementos (vea Advertencias)
-
Acceder a datos de elementos (consulte
ContentElement
)
-
-
Variaciones de lista definidas para el fragmento
-
Crear variaciones globalmente
-
Administrar contenido asociado:
- Enumerar colecciones
- Agregar colecciones
- Quitar colecciones
-
Acceso al modelo del fragmento
Las interfaces que representan los elementos principales de un fragmento son:
-
Elemento de contenido (Elemento de contenido)
-
Obtener datos básicos (nombre, título, descripción)
-
Obtener/establecer contenido
-
Variaciones de acceso de un elemento:
- Variaciones de lista
- Obtener variaciones por nombre
- Crear variaciones (consulte Advertencias)
- Eliminar variaciones (consulte Advertencias)
- Datos de variación de acceso (consulte
ContentVariation
)
-
Método abreviado para resolver variaciones (aplicar alguna lógica de reserva adicional específica de la implementación si la variación especificada no está disponible para un elemento)
-
-
Variación de contenido (Variación de contenido)
- Obtener datos básicos (nombre, título, descripción)
- Obtener/establecer contenido
- Sincronización simple, basada en la información de la última modificación
Las tres interfaces (
ContentFragment
,ContentElement
,ContentVariation
) amplían la interfazVersionable
, que agrega capacidades de versiones, necesarias para los fragmentos de contenido:- Crear una versión del elemento
- Enumerar versiones del elemento
- Obtener el contenido de una versión específica del elemento con versión
-
Adaptación: uso de adaptTo() adapting-using-adaptto
Se pueden adaptar las siguientes opciones:
-
ContentFragment
se puede adaptar a:-
Resource
: el recurso de Sling subyacente; la actualización deResource
subyacente requiere directamente la reconstrucción del objetoContentFragment
. -
Asset
: la abstracción de DAMAsset
que representa el fragmento de contenido; actualizarAsset
requiere directamente la reconstrucción del objetoContentFragment
.
-
-
ContentElement
se puede adaptar a:ElementTemplate
- para obtener acceso a la información estructural del elemento.
-
Resource
se puede adaptar a:ContentFragment
Advertencias caveats
Cabe señalar que:
-
La API completa está diseñada para no mantener los cambios automáticamente (a menos que se indique lo contrario en el JavaDoc de la API). Por lo tanto, asigne siempre el solucionador de recursos de la solicitud correspondiente (o el solucionador que esté utilizando).
-
Tareas que pueden requerir un esfuerzo adicional:
-
El Adobe recomienda crear variaciones a partir de
ContentFragment
. Esto garantiza que todos los elementos compartan esta variación y que las estructuras de datos globales adecuadas se actualicen según sea necesario para reflejar la nueva variación en la estructura de contenido. -
Al eliminar las variaciones existentes mediante un elemento, mediante
ContentElement.removeVariation()
, no se actualizan las estructuras de datos globales asignadas a la variación. Para asegurarse de que estas estructuras de datos se mantienen sincronizadas, useContentFragment.removeVariation()
en su lugar, lo que elimina una variación de forma global.
-
La API de administración de fragmentos de contenido: del lado del cliente the-content-fragment-management-api-client-side
Información adicional additional-information
Consulte lo siguiente:
-
filter.xml
El
filter.xml
para la administración de fragmentos de contenido está configurado de modo que no se superponga con el paquete de contenido principal de Assets.
Editar sesiones edit-sessions
La edición de un fragmento de contenido, que puede abarcar varias vistas (= páginas de HTML), es atómica. AEM Como estas capacidades atómicas de edición con varias vistas no son un concepto típico de la edición, los fragmentos de contenido utilizan lo que se denomina una sesión de edición.
Se inicia una sesión de edición cuando el usuario abre un fragmento de contenido en el editor. La sesión de edición finaliza cuando el usuario abandona el editor seleccionando Guardar o Cancelar.
AEM Técnicamente, todas las ediciones se realizan en contenido live, al igual que con todas las demás ediciones de la. Cuando se inicia la sesión de edición, se crea una versión del estado actual sin editar. Si un usuario cancela una edición, se restaura esa versión. Si el usuario hace clic en Guardar, no se realiza ninguna acción específica, ya que la edición se ejecutó en contenido de live, por lo que todos los cambios ya se han mantenido. Además, hacer clic en Guardar déclencheur algunos procesos en segundo plano, como la creación de información de búsqueda de texto completo, la administración de recursos de medios mixtos o ambos.
Existen algunas medidas de seguridad para los casos extremos; por ejemplo, si el usuario intenta salir del editor sin guardar o cancelar la sesión de edición. Además, hay disponible un guardado automático periódico para evitar la pérdida de datos.
Dos usuarios pueden editar el mismo fragmento de contenido simultáneamente y, por lo tanto, sobrescribir los cambios de los demás. Para evitarlo, el fragmento de contenido debe bloquearse aplicando la acción Checkout de la administración DAM en el fragmento.
Ejemplos examples
Ejemplo: Acceso a un fragmento de contenido existente example-accessing-an-existing-content-fragment
Para lograrlo, puede adaptar el recurso que representa la API a:
com.adobe.cq.dam.cfm.ContentFragment
Por ejemplo:
// 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
}
Ejemplo: Creación de un fragmento de contenido example-creating-a-new-content-fragment
Para crear un fragmento de contenido mediante programación, use un FragmentTemplate
adaptado de un recurso de modelo.
Por ejemplo:
Resource modelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = modelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Ejemplo: Especificación del intervalo de guardado automático example-specifying-the-auto-save-interval
El intervalo de guardado automático (medido en segundos) se puede definir mediante el administrador de configuración (ConfMgr):
-
Nodo:
<conf-root>/settings/dam/cfm/jcr:content
-
Nombre de propiedad:
autoSaveInterval
-
Tipo:
Long
-
Predeterminado:
600
(10 minutos); definido en/libs/settings/dam/cfm/jcr:content
Si desea establecer un intervalo de guardado automático de 5 minutos, defina la propiedad en el nodo.
Por ejemplo:
-
Nodo:
/conf/global/settings/dam/cfm/jcr:content
-
Nombre de propiedad:
autoSaveInterval
-
Tipo:
Long
-
Valor:
300
(5 minutos equivalen a 300 segundos)
Componentes para la creación de páginas components-for-page-authoring
Para obtener más información, consulte