Componentes de contenedor editables
SPA Los componentes fijos proporcionan cierta flexibilidad para la creación de contenido de la aplicación, pero este enfoque es rígido y requiere que los desarrolladores definan la composición exacta del contenido editable. SPA SPA Para admitir la creación de experiencias excepcionales por parte de los autores, Editor de la admite el uso de componentes de contenedor en la creación de experiencias de los autores. Los componentes de contenedor permiten a los autores arrastrar y soltar los componentes permitidos en el contenedor y crearlos, tal como lo pueden hacer en la creación tradicional de AEM Sites.
SPA En este capítulo, agregamos un contenedor editable a la vista de inicio que permite a los autores componer y diseñar experiencias de contenido enriquecido mediante componentes de React editables directamente en la.
Actualización de la aplicación WKND
Para agregar un componente de contenedor a la vista Inicio:
- AEM Importar el componente
ResponsiveGrid
del componente editable de React de la - Importar y registrar componentes React editables personalizados (texto e imagen) para utilizarlos en el componente Cuadrícula interactiva
Uso del componente Cuadrícula interactiva
Para agregar un área editable a la vista Inicio:
-
Abrir y editar
react-app/src/components/Home.js
-
Importar el componente
ResponsiveGrid
desde@adobe/aem-react-editable-components
y agregarlo al componenteHome
. -
Establezca los siguientes atributos en el componente
<ResponsiveGrid...>
pagePath = '/content/wknd-app/us/en/home'
itemPath = 'root/responsivegrid'
AEM Esto indica al componente
ResponsiveGrid
que recupere su contenido del recurso de la:/content/wknd-app/us/en/home/jcr:content/root/responsivegrid
AEM AEM AEM El elemento
itemPath
se asigna al nodoresponsivegrid
definido en la plantilla deRemote SPA Page
y se crea automáticamente en las nuevas páginas de creadas a partir de la plantilla de publicaciónRemote SPA Page
.Actualice
Home.js
para agregar el componente<ResponsiveGrid...>
.code language-javascript ... import { ResponsiveGrid } from '@adobe/aem-react-editable-components'; ... function Home() { return ( <div className="Home"> <ResponsiveGrid pagePath='/content/wknd-app/us/en/home' itemPath='root/responsivegrid'/> <EditableTitle pagePath='/content/wknd-app/us/en/home' itemPath='title'/> <Adventures /> </div> ); }
El archivo Home.js
debe tener el siguiente aspecto:
Crear componentes editables
SPA Para obtener el máximo efecto de la flexibilidad que ofrecen los contenedores de experiencia de creación en el Editor de. Ya hemos creado un componente Título editable, pero vamos a hacer algunos más que permitan a los autores utilizar componentes Texto e Imagen editables en el componente Cuadrícula interactiva recién agregado.
Los nuevos componentes Texto editable y Reacción de imagen se crean utilizando el patrón de definición de componente editable exportado en componentes fijos editables.
Componente de texto editable
-
SPA Abra el proyecto de la en su IDE
-
Crear un componente de React en
src/components/editable/core/Text.js
-
Agregar el siguiente código a
Text.js
code language-javascript import React from 'react' const TextPlain = (props) => <div className={props.baseCssClass}><p className="cmp-text__paragraph">{props.text}</p></div>; const TextRich = (props) => { const text = props.text; const id = (props.id) ? props.id : (props.cqPath ? props.cqPath.substr(props.cqPath.lastIndexOf('/') + 1) : ""); return <div className={props.baseCssClass} id={id} data-rte-editelement dangerouslySetInnerHTML={{ __html: text }} /> }; export const Text = (props) => { if (!props.baseCssClass) { props.baseCssClass = 'cmp-text' } const { richText = false } = props return richText ? <TextRich {...props} /> : <TextPlain {...props} /> } export function textIsEmpty(props) { return props.text == null || props.text.length === 0; }
-
Crear un componente React editable en
src/components/editable/EditableText.js
-
Agregar el siguiente código a
EditableText.js
code language-javascript import React from 'react' import { EditableComponent, MapTo } from '@adobe/aem-react-editable-components'; import { Text, textIsEmpty } from "./core/Text"; import { withConditionalPlaceHolder } from "./core/util/withConditionalPlaceholder"; import { withStandardBaseCssClass } from "./core/util/withStandardBaseCssClass"; const RESOURCE_TYPE = "wknd-app/components/text"; const EditConfig = { emptyLabel: "Text", isEmpty: textIsEmpty, resourceType: RESOURCE_TYPE }; export const WrappedText = (props) => { const Wrapped = withConditionalPlaceHolder(withStandardBaseCssClass(Text, "cmp-text"), textIsEmpty, "Text V2") return <Wrapped {...props} /> }; const EditableText = (props) => <EditableComponent config={EditConfig} {...props}><WrappedText /></EditableComponent> MapTo(RESOURCE_TYPE)(EditableText); export default EditableText;
La implementación del componente Texto editable debería tener un aspecto similar al siguiente:
Componente de imagen
-
SPA Abra el proyecto de la en su IDE
-
Crear un componente de React en
src/components/editable/core/Image.js
-
Agregar el siguiente código a
Image.js
code language-javascript import React from 'react' import { RoutedLink } from "./RoutedLink"; export const imageIsEmpty = (props) => (!props.src) || props.src.trim().length === 0 const ImageInnerContents = (props) => { return (<> <img src={props.src} className={props.baseCssClass + '__image'} alt={props.alt} /> { !!(props.title) && <span className={props.baseCssClass + '__title'} itemProp="caption">{props.title}</span> } { props.displayPopupTitle && (!!props.title) && <meta itemProp="caption" content={props.title} /> } </>); }; const ImageContents = (props) => { if (props.link && props.link.trim().length > 0) { return ( <RoutedLink className={props.baseCssClass + '__link'} isRouted={props.routed} to={props.link}> <ImageInnerContents {...props} /> </RoutedLink> ) } return <ImageInnerContents {...props} /> }; export const Image = (props) => { if (!props.baseCssClass) { props.baseCssClass = 'cmp-image' } const { isInEditor = false } = props; const cssClassName = (isInEditor) ? props.baseCssClass + ' cq-dd-image' : props.baseCssClass; return ( <div className={cssClassName}> <ImageContents {...props} /> </div> ) };
-
Crear un componente React editable en
src/components/editable/EditableImage.js
-
Agregar el siguiente código a
EditableImage.js
import { EditableComponent, MapTo } from '@adobe/aem-react-editable-components';
import { Image, imageIsEmpty } from "./core/Image";
import React from 'react'
import { withConditionalPlaceHolder } from "./core/util/withConditionalPlaceholder";
import { withStandardBaseCssClass } from "./core/util/withStandardBaseCssClass";
const RESOURCE_TYPE = "wknd-app/components/image";
const EditConfig = {
emptyLabel: "Image",
isEmpty: imageIsEmpty,
resourceType: RESOURCE_TYPE
};
const WrappedImage = (props) => {
const Wrapped = withConditionalPlaceHolder(withStandardBaseCssClass(Image, "cmp-image"), imageIsEmpty, "Image V2");
return <Wrapped {...props}/>
}
const EditableImage = (props) => <EditableComponent config={EditConfig} {...props}><WrappedImage /></EditableComponent>
MapTo(RESOURCE_TYPE)(EditableImage);
export default EditableImage;
-
Cree un archivo SCSS
src/components/editable/EditableImage.scss
que proporcione estilos personalizados paraEditableImage.scss
. Estos estilos se dirigen a las clases CSS del componente React editable. -
Agregar el SCSS siguiente a
EditableImage.scss
code language-css .cmp-image__image { margin: 1rem 0; width: 100%; border: 0; }
-
Importar
EditableImage.scss
enEditableImage.js
code language-javascript ... import './EditableImage.scss'; ...
La implementación del componente Imagen editable debe tener un aspecto similar al siguiente:
Importar los componentes editables
SPA AEM Se hace referencia en el documento a los componentes EditableText
y EditableImage
React recién creados y se crean instancias de manera dinámica en función del JSON devuelto por los componentes de React. SPA Para asegurarse de que estos componentes están disponibles para los usuarios, cree instrucciones de importación para ellos en Home.js
-
SPA Abra el proyecto de la en su IDE
-
Abrir el archivo
src/Home.js
-
Agregar instrucciones de importación para
AEMText
yAEMImage
code language-javascript ... // The following need to be imported, so that MapTo is run for the components import EditableText from './editable/EditableText'; import EditableImage from './editable/EditableImage'; ...
El resultado debería ser similar al siguiente:
SPA Si se agregan estas importaciones no, el código EditableText
y EditableImage
no se invocará por parte de los usuarios, y por lo tanto, los componentes no se asignan a los tipos de recursos proporcionados.
AEM Configuración del contenedor en la
AEM Los componentes de contenedor de utilizan directivas para dictar los componentes permitidos. SPA AEM SPA SPA Se trata de una configuración esencial al utilizar el Editor de componentes, ya que solo los componentes de la aplicación que tienen asignados componentes de la interfaz de usuario de la aplicación de componentes se pueden procesar mediante el Editor de componentes de la. SPA Asegúrese de que solo se permiten los componentes para los que hemos proporcionado implementaciones de la:
EditableTitle
se asignó awknd-app/components/title
EditableText
se asignó awknd-app/components/text
EditableImage
se asignó awknd-app/components/image
SPA Para configurar el contenedor de cuadrícula adaptable de la plantilla de página de remoto:
-
AEM Iniciar sesión en el autor de la
-
Vaya a Herramientas > General > Plantillas > Aplicación WKND
-
SPA Editar Página de informes
-
Seleccione Estructura en el conmutador de modo en la parte superior derecha
-
Pulse para seleccionar Contenedor de diseño
-
Pulse el icono Directiva en la barra emergente
-
A la derecha, en la ficha Componentes permitidos, expanda WKND APP - CONTENT
-
Asegúrese de que solo están seleccionadas las siguientes opciones:
- Imagen
- Texto
- Título
SPA
-
Pulse Listo
AEM Creación del contenedor en la
SPA AEM Después de actualizar el elemento para incrustar el elemento <ResponsiveGrid...>
, los contenedores para tres componentes editables de React (EditableTitle
, EditableText
y EditableImage
), y de actualizar el elemento con una directiva de plantilla coincidente, se puede empezar a crear contenido en el componente contenedor, lo cual se actualiza de forma independiente.
-
AEM Iniciar sesión en el autor de la
-
Vaya a Sitios > Aplicación WKND
-
Pulse Inicio y seleccione Editar en la barra de acciones superior
- AEM Se muestra un componente de texto "Hello World", ya que este se añadió automáticamente al generar el proyecto a partir del arquetipo de proyecto de la lista de tipos de archivo
-
Seleccione Editar en el selector de modo en la parte superior derecha del Editor de páginas
-
Busque el área editable Contenedor de diseño debajo del título
-
Abra la barra lateral del editor de páginas y seleccione la vista Componentes
-
Arrastre los siguientes componentes al contenedor de diseño
- Imagen
- Título
-
Arrastre los componentes para reordenarlos al siguiente orden:
- Título
- Imagen
- Texto
-
Autor del componente Título
-
Pulse el componente Título y pulse el icono llave inglesa para editar el componente Título
-
Añada el siguiente texto:
- Título: Se acerca el verano, aprovechemos al máximo
- Tipo: H1
-
Pulse Listo
-
-
Autor del componente Imagen
- Arrastre una imagen desde la barra lateral (después de cambiar a la vista de Assets) en el componente Imagen
- Pulse el componente Imagen y pulse el icono llave inglesa para editar
- Marque la casilla La imagen es decorativa
- Pulse Listo
-
Autor del componente Texto
- Edite el componente Texto tocando el componente Texto y pulsando el icono wrench
- Añada el siguiente texto:
- Ahora mismo, puedes obtener un 15% de descuento en todas las aventuras de una semana y un 20% de descuento en todas las aventuras de dos semanas o más. Al finalizar la compra, agrega el código de campaña SUMMERISCOMING para obtener tus descuentos.
- Pulse Listo
-
Los componentes ya se han creado, pero se apilan verticalmente.
AEM Utilice el modo Diseño de la para permitirnos ajustar el tamaño y el diseño de los componentes.
-
Cambie a Modo de diseño con el selector de modo en la esquina superior derecha
-
Cambiar el tamaño de los componentes Imagen y Texto, de manera que estén uno al lado del otro
- El componente Image debe tener 8 columnas de ancho
- El componente Texto debe tener 3 columnas de ancho
-
AEM Vista previa de sus cambios en el Editor de páginas de la página de la
-
Actualice la aplicación WKND que se ejecuta localmente en http://localhost:3000 para ver los cambios creados.
SPA
Enhorabuena.
Ha agregado un componente contenedor que permite a los autores agregar componentes editables a la aplicación WKND. Ahora ya sabe cómo:
- AEM SPA Usar el componente
ResponsiveGrid
del componente editable de React de la - SPA Cree y registre componentes React editables (texto e imagen) para usarlos en la lista de componentes a través del componente de contenedor de
- SPA SPA Configure la plantilla Página de administración remota de para permitir los componentes habilitados para la creación de informes
- Agregar componentes editables al componente contenedor
- SPA Componentes de autor y diseño en el editor de
Siguientes pasos
SPA El siguiente paso usa esta misma técnica para agregar un componente editable a una ruta de detalles de aventura en el.