Fragmentos de experiencias experience-fragments
Conceptos básicos the-basics
Un fragmento de experiencia es un grupo de uno o más componentes, incluido el contenido y el diseño, a los que se puede hacer referencia en las páginas.
Un fragmento de experiencia principal o variante utiliza:
sling:resourceType
:/libs/cq/experience-fragments/components/xfpage
Como no hay /libs/cq/experience-fragments/components/xfpage/xfpage.html
, vuelve a usarse
sling:resourceSuperType
:wcm/foundation/components/page
Representación HTML sin formato the-plain-html-rendition
Utilizando el selector .plain.
en la dirección URL, puede acceder a la representación de HTML sin formato.
Está disponible desde el explorador, pero su propósito principal es permitir que otras aplicaciones (por ejemplo, aplicaciones web de terceros o implementaciones móviles personalizadas) accedan al contenido del fragmento de experiencia directamente, únicamente mediante la dirección URL.
La representación de HTML sin formato agrega el protocolo, el host y la ruta de contexto a las rutas que son:
-
del tipo:
src
,href
oaction
-
o finalizar con:
-src
o-href
Por ejemplo:
.../brooklyn-coat/master.plain.html
El selector de representación sin formato usa un transformador en lugar de scripts adicionales; Sling Rewriter se usa como transformador. Esto se configura en
/libs/experience-fragments/config/rewriter/experiencefragments
Configuración de la generación de representaciones del HTML configuring-html-rendition-generation
La representación del HTML se genera mediante las canalizaciones de reescritura de Sling. La canalización se ha definido en /libs/experience-fragments/config/rewriter/experiencefragments
. El transformador de HTML admite las siguientes opciones:
-
allowedCssClasses
- Expresión de RegEx que coincide con las clases CSS que deben dejarse en la representación final.
- Esto resulta útil si el cliente desea eliminar algunas clases CSS específicas
-
allowedTags
- Una lista de etiquetas de HTML que se permitirán en la representación final.
- De forma predeterminada, se permiten las siguientes etiquetas (no se necesita configuración): html, head, title, body, img, p, span, ul, li, a, b, i, em, strong, h1, h2, h3, h4, h5, h6, br, noscript, div, link y script
Se recomienda configurar la reescritura mediante una superposición. Ver Superposiciones
Variaciones sociales social-variations
Las variantes sociales se pueden publicar en las redes sociales (texto e imagen). En Adobe Experience Manager AEM (), estas variantes sociales pueden contener componentes como, por ejemplo, componentes de texto o componentes de imagen.
La imagen y el texto de la publicación social se pueden tomar de cualquier tipo de recurso de imagen o de texto con cualquier nivel de profundidad (en el bloque de creación o en el contenedor de diseño).
Las variaciones sociales también permiten crear bloques y tenerlos en cuenta al realizar acciones sociales (en el entorno de publicación).
Para publicar el texto y la imagen correctos en la red de medios sociales, algunas convenciones deben respetarse si está desarrollando sus propios componentes personalizados.
Para ello, se deben utilizar las siguientes propiedades:
-
Para extraer la imagen
fileReference
fileName
-
Para extraer el texto
text
Los componentes que no utilizan esta convención no se tienen en cuenta.
Plantillas para fragmentos de experiencias templates-for-experience-fragments
Al desarrollar una nueva plantilla para fragmentos de experiencias, puede seguir las prácticas estándar para una plantilla editable.
Para crear una plantilla de fragmento de experiencia detectada por el asistente Crear fragmento de experiencia, debe seguir uno de estos conjuntos de reglas:
-
Ambos:
-
El tipo de recurso de la plantilla (el nodo inicial) debe heredar de:
cq/experience-fragments/components/xfpage
-
Y el nombre de la plantilla debe comenzar por:
experience-fragments
Esto permite a los usuarios crear fragmentos de experiencias en /content/experience-fragments, ya que la propiedadcq:allowedTemplates
de esta carpeta incluye todas las plantillas que tienen nombres que comienzan porexperience-fragment
. Los clientes pueden actualizar esta propiedad para incluir sus propios esquemas de nomenclatura o ubicaciones de plantillas.
-
-
Las plantillas permitidas se pueden configurar en la consola Fragmentos de experiencias.
Componentes para fragmentos de experiencias components-for-experience-fragments
El desarrollo de componentes para su uso con/en fragmentos de experiencias sigue las prácticas estándar.
La única configuración adicional es garantizar que los componentes estén permitidos en la plantilla; esto se logra con la directiva de contenido.
El proveedor del reescritor de vínculos de fragmentos de experiencias: HTML the-experience-fragment-link-rewriter-provider-html
AEM En tiene la posibilidad de crear Fragmentos de experiencias. Un fragmento de experiencia:
- consta de un grupo de componentes junto con un diseño,
- AEM puede existir de forma independiente de una página de.
Uno de los casos de uso de estos grupos es para incrustar contenido en puntos de contacto de terceros, como Adobe Target.
Reescritura de vínculos predeterminados default-link-rewriting
Con la característica Exportar a Target, puede:
- crear un fragmento de experiencia,
- añadir componentes a él,
- y, a continuación, exportarla como una oferta de Adobe Target, ya sea en formato de HTML o en formato JSON.
AEM Esta característica se puede habilitar en una instancia de autor de. Requiere una configuración de Adobe Target válida y configuraciones para el externalizador de vínculos.
El externalizador de vínculos se utiliza para determinar las direcciones URL correctas necesarias al crear la versión de HTML de la oferta de Target, que luego se envía a Adobe Target. Esto es necesario, ya que Adobe Target requiere que se pueda acceder públicamente a todos los vínculos dentro de la oferta de HTML de Target; esto significa que cualquier recurso al que hagan referencia los vínculos y el propio fragmento de experiencia deben publicarse antes de poder utilizarse.
De forma predeterminada, al crear una oferta de HTML AEM de Target, se envía una solicitud a un selector de Sling personalizado en, que se encuentra en el menú de configuración de la. Este selector se llama .nocloudconfigs.html
. Como su nombre indica, crea una representación HTML sin formato de un fragmento de experiencia, pero no incluye configuraciones de nube (lo que sería información superflua).
Después de generar la página HTML, la canalización Sling Rewriter realiza modificaciones en la salida:
-
Los elementos
html
,head
ybody
se reemplazan condiv
elementos. Se quitan los elementosmeta
,noscript
ytitle
(son elementos secundarios del elementohead
original y no se tienen en cuenta cuando se reemplaza por el elementodiv
).Esto se hace para garantizar que la oferta de HTML Target se pueda incluir en las actividades de Target.
-
AEM modifica cualquier vínculo interno presente en el HTML para que señale a un recurso publicado.
AEM Para determinar los vínculos que se van a modificar, el modelo sigue este patrón para los atributos de los elementos de HTML:
src
atributoshref
atributos*-src
atributos (como data-src, custom-src, etc.)*-href
atributos (comodata-href
,custom-href
,img-href
, etc.)
note note NOTE Normalmente, los vínculos internos del HTML son vínculos relativos, pero puede haber casos en los que los componentes personalizados proporcionen direcciones URL completas en el HTML. AEM De forma predeterminada, no tiene en cuenta estas direcciones URL completas y no realiza ninguna modificación. AEM Los vínculos de estos atributos se ejecutan a través del externalizador de vínculos de
publishLink()
para recrear la dirección URL como si estuviera en una instancia publicada y, como tal, disponible públicamente.
Al utilizar una implementación predeterminada, el proceso descrito anteriormente debe ser suficiente para generar la oferta de Target a partir del fragmento de experiencia y luego exportarla a Adobe Target. Sin embargo, hay algunos casos de uso que no se tienen en cuenta en este proceso, como los siguientes:
- Asignación de Sling solo disponible en la instancia de publicación
- Redirecciones de Dispatcher
AEM Para estos casos de uso, proporciona la interfaz del proveedor de reescritura de vínculos de manera predeterminada.
Interfaz de proveedor de reescritura de vínculos link-rewriter-provider-interface
AEM Para casos más complicados, no cubiertos por default, ofrece la interfaz del proveedor de reescritura de vínculos. Esta es una interfaz de ConsumerType
que puede implementar en sus paquetes como servicio. AEM Evita las modificaciones que realiza en los vínculos internos de una oferta de HTML que se representan desde un fragmento de experiencia. Esta interfaz le permite personalizar el proceso de reescritura de vínculos internos de HTML para adaptarlos a sus necesidades comerciales.
Algunos ejemplos de casos de uso para implementar esta interfaz como servicio son:
- Las asignaciones de Sling están habilitadas en las instancias de publicación, pero no en la instancia de autor
- Se utiliza un Dispatcher o una tecnología similar para redirigir las URL internamente
- Hay
sling:alias mechanisms
disponibles para los recursos
La interfaz del proveedor de reescritura de vínculos ( ExperienceFragmentLinkRewriterProvider
) es la siguiente:
public interface ExperienceFragmentLinkRewriterProvider {
String rewriteLink(String link, String tag, String attribute);
boolean shouldRewrite(ExperienceFragmentVariation experienceFragment);
int getPriority();
}
Cómo utilizar la interfaz del proveedor de reescritura de vínculos how-to-use-the-link-rewriter-provider-interface
Para utilizar la interfaz, primero debe crear un paquete que contenga un nuevo componente de servicio que implemente la interfaz del proveedor de reescritura de vínculos.
Este servicio se utiliza para conectarse a la reescritura de Exportación de fragmentos de experiencias a Target para tener acceso a los distintos vínculos.
Por ejemplo, ComponentService
:
import com.adobe.cq.xf.ExperienceFragmentLinkRewriterProvider;
import com.adobe.cq.xf.ExperienceFragmentVariation;
import org.osgi.service.component.annotations.Service;
import org.osgi.service.component.annotations.Component;
@Component
@Service
public class GeneralLinkRewriter implements ExperienceFragmentLinkRewriterProvider {
@Override
public String rewriteLink(String link, String tag, String attribute) {
return null;
}
@Override
public boolean shouldRewrite(ExperienceFragmentVariation experienceFragment) {
return false;
}
@Override
public int getPriority() {
return 0;
}
}
Para que el servicio funcione, ahora hay tres métodos que deben implementarse dentro del servicio:
-
[shouldRewrite](#shouldrewrite)
-
[rewriteLink](#rewritelink)
rewriteLinkExample2
-
[getPriority](#priorities-getpriority)
shouldRewrite shouldrewrite
Debe indicar al sistema si debe reescribir los vínculos cuando se realiza una llamada para Exportar a Target en una variación determinada del fragmento de experiencia. Para ello, implemente el método:
shouldRewrite(ExperienceFragmentVariation experienceFragment);
Por ejemplo:
@Override
public boolean shouldRewrite(ExperienceFragmentVariation experienceFragment) {
return experienceFragment.getPath().equals("/content/experience-fragment/master");
}
Este método recibe, como parámetro, la variación del fragmento de experiencia que el sistema Exportar a destino está reescribiendo en este momento.
En el ejemplo anterior, nos gustaría reescribir:
-
vínculos presentes en
src
-
Solo atributos de
href
-
para un fragmento de experiencia específico:
/content/experience-fragment/master
Cualquier otro fragmento de experiencia que pase por el sistema Exportar a destino se ignorará y no se verá afectado por los cambios implementados en este servicio.
rewriteLink rewritelink
Para la variación del fragmento de experiencia afectada por el proceso de reescritura, se permite al servicio gestionar la reescritura de vínculos. Cada vez que se encuentra un vínculo en el HTML interno, se invoca el siguiente método:
rewriteLink(String link, String tag, String attribute)
Como entrada, el método recibe los parámetros:
-
link
La representaciónString
del vínculo que se está procesando. Suele ser una dirección URL relativa que señala al recurso en la instancia de autor. -
tag
Nombre del elemento HTML que se está procesando. -
attribute
El nombre exacto del atributo.
Por ejemplo, si el sistema Exportar a destino está procesando este elemento, puede definir CSSInclude
como:
<link rel="stylesheet" href="/etc.clientlibs/foundation/clientlibs/main.css" type="text/css">
La llamada al método rewriteLink()
se realiza utilizando estos parámetros:
rewriteLink(link="/etc.clientlibs/foundation/clientlibs/main.css", tag="link", attribute="href" )
Al crear el servicio, puede tomar decisiones basadas en la entrada dada y, a continuación, reescribir el vínculo en consecuencia.
Para nuestro ejemplo, queremos eliminar la parte /etc.clientlibs
de la dirección URL y agregar el dominio externo correspondiente. Para simplificar las cosas, consideraremos que tenemos acceso a un Resource Resolver para su servicio, como en rewriteLinkExample2
:
private ResourceResolver resolver;
private Externalizer externalizer;
@Override
public String rewriteLink(String link, String tag, String attribute) {
// get the externalizer service
externalizer = resolver.adaptTo(Externalizer.class);
if(externalizer == null) {
// if there was an error, then we do not modify the link
return null;
}
// remove leading /etc.clientlibs from resource link before externalizing
link = link.replaceAll("/etc.clientlibs", "");
// considering that we configured our publish domain, we directly apply the publishLink() method
link = externalizer.publishLink(resolver, link);
return link;
}
null
, el sistema Exportar a destino deja el vínculo tal cual, un vínculo relativo a un recurso.Prioridades: getPriority priorities-getpriority
No es raro necesitar varios servicios para atender diferentes tipos de fragmentos de experiencias o incluso tener un servicio genérico que gestione la externalización y la asignación para todos los fragmentos de experiencias. AEM En estos casos, pueden surgir conflictos acerca del servicio que se va a usar, por lo que proporciona la posibilidad de definir Prioridades para diferentes servicios de manera que se puedan definir los mismos. Las prioridades se especifican mediante el método:
getPriority()
Este método permite el uso de varios servicios donde el método shouldRewrite()
devuelve true para el mismo fragmento de experiencia. El servicio que devuelve el número más alto de su método getPriority()
es el que administra la variación del fragmento de experiencia.
Por ejemplo, puede tener un GenericLinkRewriterProvider
que administra la asignación básica de todos los fragmentos de experiencias y cuando el método shouldRewrite()
devuelve true
para todas las variaciones de fragmentos de experiencias. Para varios fragmentos de experiencias específicos, es posible que desee una administración especial, por lo que en este caso, puede proporcionar un SpecificLinkRewriterProvider
para el cual el método shouldRewrite()
devuelva el valor "True" solo para algunas variaciones de fragmentos de experiencias. Para asegurarse de que SpecificLinkRewriterProvider
se elige para controlar esas variaciones de fragmento de experiencia, debe devolver en su método getPriority()
un número mayor que GenericLinkRewriterProvider.