Algunas funciones de fragmento de contenido requieren la aplicación de AEM 6.4 Service Pack 2 (6.4.2.0).
Un fragmento de contenido extiende 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 sobre los fragmentos de contenido.
Administración de recursos y personalización y ampliación de recursos para obtener más información sobre los recursos estándar.
Las partes constituyentes básicas de un fragmento de contenido son:
Según el tipo de fragmento, también se utilizan modelos o plantillas:
Ahora se recomiendan los modelos de fragmentos de contenido para crear todos los fragmentos.
Los modelos de fragmentos de contenido se utilizan en todos los ejemplos de We.Retail.
Modelos de fragmento de contenido:
Cualquier cambio en un modelo de fragmento de contenido existente puede afectar a los fragmentos dependientes; esto puede llevar a propiedades huérfanas en esos fragmentos.
Plantillas de fragmento de contenido:
Content Fragment Management (CFM) es parte de AEM Assets como:
Los fragmentos de contenido con contenido estructurado (es decir, basados en un modelo de fragmento de contenido) se asignan a un solo 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 bajo un subnodo que lleva el nombre de la variación:
p. ej. jcr:content/data/myvariation
Los datos de cada elemento se almacenan en el subnodo correspondiente como una propiedad con el nombre del elemento:
Por ejemplo: el contenido del elemento text
se almacena como propiedad text
en jcr:content/data/master
Los metadatos y el contenido asociado se almacenan por debajo de jcr:content/metadata
Excepto el título y la descripción, que no se consideran metadatos tradicionales y se almacenan en jcr:content
Los fragmentos de contenido simple (basados en una plantilla) se asignan a una composición compuesta por un recurso principal y subrecursos (opcionales):
Toda la información que no sea de contenido de un fragmento (como título, descripción, metadatos, estructura) se administra exclusivamente en el recurso principal.
El contenido del primer elemento de un fragmento se asigna a la representación original del recurso principal.
Los elementos adicionales (si existen) se asignan a subrecursos del recurso principal.
Al igual que con los recursos estándar, un fragmento de contenido se incluye en:
/content/dam
Para obtener más información, consulte Fragmento de contenido - Eliminar consideraciones.
Ahora se recomienda el componente principal del fragmento de contenido. Consulte Desarrollo de componentes principales para obtener más detalles.
Se puede hacer referencia a los fragmentos de contenido desde AEM páginas, al igual que a cualquier otro tipo de recurso. AEM proporciona el componente principal Fragmento de contenido, un componente que permite incluir fragmentos de contenido en las páginas. También puede ampliar este componente principal Fragmento de contenido.
El componente utiliza la propiedad fragmentPath
para hacer referencia al fragmento de contenido real. La propiedad fragmentPath
se administra de la misma manera que otras 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 va a mostrar.
Además, se puede seleccionar un rango de párrafos para restringir el resultado; por ejemplo, esto se puede utilizar para la salida de varias columnas.
El componente permite contenido intermedio:
Para el contenido intermedio debe:
Modelo de fragmento de contenido:
Cuando se utiliza un fragmento de contenido basado en un modelo de fragmento de contenido en una página, se hace referencia al modelo. Esto significa que si el modelo no se ha publicado en el momento de publicar la página, se marcará y el modelo se agregará a los recursos que se publicarán con la página.
Plantilla de fragmento de contenido:
Cuando se utiliza un fragmento de contenido basado en una plantilla de fragmento de contenido en una página, no hay referencia ya que la plantilla se copió al crear el fragmento.
La implementación back-end de fragmentos de contenido es, por ejemplo, responsable de hacer que las instancias de un fragmento se utilicen en una página en la que se pueda buscar o de administrar el contenido de medios mixtos. Esta implementación necesita saber qué componentes se utilizan para procesar fragmentos y cómo se parametriza el procesamiento.
Los parámetros para esto se pueden configurar en la Consola Web, para el paquete OSGi Configuración de fragmentos de contenido DAM.
Tipos de recursos
Se puede proporcionar una lista de sling:resourceTypes
para definir los componentes que se utilizan para procesar fragmentos de contenido y a los que se debe aplicar el procesamiento en segundo plano.
Propiedades de referencia
Se puede configurar una lista de propiedades para especificar dónde se almacena la referencia al fragmento para el componente correspondiente.
No existe una asignación directa entre el tipo de componente y la propiedad.
AEM simplemente toma la primera propiedad que se encuentra en un párrafo. Así que debe elegir las propiedades con cuidado.
Aún hay algunas directrices que debe seguir para garantizar que el componente sea compatible con el procesamiento en segundo plano del fragmento de contenido:
El nombre de la propiedad donde se definen los elementos que se van a procesar debe ser element
o elementNames
.
El nombre de la propiedad donde se define la variación que se va a representar debe ser variation
o variationName
.
Si se admite la salida de varios elementos (mediante elementNames
para especificar varios elementos), el modo de visualización real se define con la propiedad displayMode
:
singleText
(y sólo hay un elemento configurado), el elemento se representa como texto con contenido intermedio, compatibilidad con el diseño, etc. Es el valor predeterminado para los fragmentos en los que solo se procesa un solo elemento.Si el fragmento se procesa para displayMode
== singleText
(implícita o explícitamente), entran en juego las siguientes propiedades adicionales:
paragraphScope
define si se deben representar todos los párrafos, o solo un rango de párrafos (valores: all
vs. range
)paragraphScope
== range
la propiedad paragraphRange
define el rango de párrafos que se van a procesarLos fragmentos de contenido se pueden integrar con:
Traducciones
Los fragmentos de contenido están completamente integrados con el flujo de trabajo de traducción de AEM. A nivel arquitectónico, esto significa:
Las traducciones individuales de un fragmento de contenido son en realidad fragmentos independientes; por ejemplo:
están situadas bajo diferentes raíces lingüísticas:
/content/dam/<path>/en/<to>/<fragment>
vs.
/content/dam/<path>/de/<to>/<fragment>
pero comparten exactamente la misma ruta relativa debajo de la raíz del idioma:
/content/dam/<path>/en/<to>/<fragment>
vs.
/content/dam/<path>/de/<to>/<fragment>
Además de las rutas basadas en reglas, no hay más conexión entre las distintas versiones de idioma de un fragmento de contenido; se gestionan como dos fragmentos independientes, aunque la interfaz de usuario proporciona los medios para desplazarse entre las variantes de idioma.
El flujo de trabajo de traducción AEM funciona con /content
:
/conf
, no se incluyen en dichas traducciones. Puede internacionalizar las cadenas de IU.Esquemas de metadatos
CFM ofrece su propio esquema específico:
/libs/dam/content/schemaeditors/forms/contentfragment
esto se puede ampliar si es necesario.
El formulario de esquema correspondiente se integra con el editor de fragmentos.
Puede utilizar la API del lado del servidor para acceder a los fragmentos de contenido; consulte:
com.adobe.cq.dam.cfm
Se recomienda encarecidamente utilizar la API del lado del servidor en lugar de acceder directamente a la estructura de contenido.
Las tres interfaces siguientes pueden servir como puntos de entrada:
Plantilla de fragmento
FragmentTemplate
Utilice FragmentTemplate.createFragment()
para crear un nuevo fragmento.
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Esta interfaz representa:
Esta información puede incluir:
Acceso a datos básicos (título, descripción)
Obtenga acceso a plantillas y modelos para los elementos del fragmento:
ElementTemplate
)Acceder a plantillas para las variaciones del fragmento:
VariationTemplate
)Obtener contenido asociado inicial
Interfaces que representan información importante:
ElementTemplate
VariationTemplate
Fragmento de contenido
ContentFragment
Esta interfaz le permite trabajar con un fragmento de contenido de forma abstracta.
Se recomienda enfáticamente acceder a un fragmento a través de esta interfaz. Se debe evitar cambiar directamente la estructura de contenido.
La interfaz le proporciona los medios para:
Administrar datos básicos (por ejemplo, obtener nombre; get/set title/description)
Acceso a metadatos
Elementos de acceso:
ContentElement
)Variaciones de lista definidas para el fragmento
Crear nuevas variaciones globalmente
Administrar contenido asociado:
Acceso al modelo o plantilla del fragmento
Las interfaces que representan los elementos principales de un fragmento son:
Elemento Contenido
ContentElement
Obtener datos básicos (nombre, título, descripción)
Obtener o definir contenido
Variaciones de acceso de un elemento:
ContentVariation
)Método abreviado para resolver variaciones (aplicando alguna lógica adicional de reserva específica para la implementación si la variación especificada no está disponible para un elemento)
Variación de contenido
ContentVariation
Las tres interfaces ( ContentFragment
, ContentElement
, ContentVariation
) extienden la interfaz Versionable
, que agrega capacidades de versiones, requeridas para los fragmentos de contenido:
Se pueden adaptar los siguientes elementos:
ContentFragment
puede adaptarse a:
Resource
- el recurso Sling subyacente; tenga en cuenta que la actualización del subyacente Resource
directamente requiere la reconstrucción del ContentFragment
objeto.Asset
- la Asset
abstracción DAM que representa el fragmento de contenido; tenga en cuenta que la actualización Asset
directa requiere la reconstrucción del ContentFragment
objeto.ContentElement
puede adaptarse a:
ElementTemplate
- para acceder a la información estructural del elemento.FragmentTemplate
puede adaptarse a:
Resource
- Resource
determinar el modelo al que se hace referencia o la plantilla original copiada;
Resource
no se reflejan automáticamente en el FragmentTemplate
.Resource
puede adaptarse a:
ContentFragment
FragmentTemplate
Cabe señalar que:
La API se implementa para proporcionar funcionalidad admitida por la interfaz de usuario.
Toda la API está diseñada para no persistir cambios automáticamente (a menos que se indique lo contrario en el JavaDoc de API). Por lo tanto, siempre tendrá que transferir la resolución de recursos de la solicitud correspondiente (o la resolución que esté utilizando).
Tareas que podrían requerir un esfuerzo adicional:
ContentElement
no actualizará la estructura de datos (pero crearlas globalmente desde ContentFragment
sí lo hará).Para AEM 6.4, la API del lado del cliente es interna.
Consulte lo siguiente:
filter.xml
El filter.xml
para la administración de fragmentos de contenido está configurado para que no se superponga con el paquete de contenido principal de Recursos.
Una sesión de edición se inicia cuando el usuario abre un fragmento de contenido en una de las páginas del editor. La sesión de edición finaliza cuando el usuario abandona el editor seleccionando Guardar o Cancelar.
Los requisitos para controlar una sesión de edición son:
Los procesos involucrados son:
Inicio de una sesión
Finalización de una sesión
Se ha detenido el guardado automático.
Al confirmar:
Al revertir:
Edición
Las acciones posibles son:
Introducción de una página
Compruebe si ya hay una sesión de edición; comprobando la cookie correspondiente.
Si existe una, compruebe que la sesión de edición se inició para el fragmento de contenido que se está editando actualmente
Si no existe ninguna sesión de edición, espere a que el usuario realice el primer cambio (véase más abajo).
Compruebe si ya se hace referencia al fragmento de contenido en una página y, en caso afirmativo, muestre la información adecuada.
Cambio de contenido
Salida de una página
Para conseguirlo, 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
}
Para crear un nuevo fragmento de contenido mediante programación, debe utilizar:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Por ejemplo:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
El intervalo de guardado automático (medido en segundos) se puede definir con el administrador de configuración (ConfMgr):
Nodo: <conf-root>/settings/dam/cfm/jcr:content
Nombre de propiedad: autoSaveInterval
Tipo: Long
Predeterminado: 600
(10 minutos); esto se define en /libs/settings/dam/cfm/jcr:content
Si desea establecer un intervalo de guardado automático de 5 minutos, debe definir 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 equivale a 300 segundos)
Consulte Plantillas de fragmento de contenido para obtener información completa.
Para obtener más información, consulte