Componenti contenitore modificabili
- Editor universale per la modifica visiva di contenuti headless.
- Editor frammenti di contenuto per la modifica di contenuti headless basata su modulo.
I componenti fissi offrono una certa flessibilità per l'authoring dei contenuti SPA, tuttavia questo approccio è rigido e richiede agli sviluppatori di definire la composizione esatta dei contenuti modificabili. Per supportare la creazione di esperienze eccezionali da parte degli autori, l’Editor SPA supporta l’utilizzo di componenti contenitore nell’SPA. I componenti contenitore consentono agli autori di trascinare e rilasciare i componenti consentiti nel contenitore e di crearli, come fanno nell’authoring AEM Sites tradizionale.
In questo capitolo, viene aggiunto un contenitore modificabile alla visualizzazione Home che consente agli autori di comporre e creare il layout di esperienze con contenuti avanzati utilizzando i componenti React modificabili direttamente nell’applicazione a pagina singola.
Aggiornare l’app WKND
Per aggiungere un componente contenitore alla vista Home:
- Importa il componente
ResponsiveGriddel componente AEM React Editable - Importare e registrare componenti React modificabili personalizzati (testo e immagine) da utilizzare nel componente ResponsiveGrid
Utilizzare il componente ResponsiveGrid
Per aggiungere un'area modificabile alla vista Home:
-
Apri e modifica
react-app/src/components/Home.js -
Importare il componente
ResponsiveGridda@adobe/aem-react-editable-componentse aggiungerlo al componenteHome. -
Imposta i seguenti attributi sul componente
<ResponsiveGrid...>pagePath = '/content/wknd-app/us/en/home'itemPath = 'root/responsivegrid'
Questo indica al componente
ResponsiveGriddi recuperare il contenuto dalla risorsa AEM:/content/wknd-app/us/en/home/jcr:content/root/responsivegrid
itemPathè mappato al nodoresponsivegriddefinito nel modello AEMRemote SPA Pagee viene creato automaticamente nelle nuove pagine AEM create dal modello AEMRemote SPA Page.Aggiornare
Home.jsper aggiungere il 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> ); }
Il file Home.js deve essere simile al seguente:
Creare componenti modificabili
Ottenere il pieno effetto dei contenitori di esperienza di authoring flessibili forniti nell’editor SPA. È già stato creato un componente Titolo modificabile, ma creiamo alcuni altri che consentono agli autori di utilizzare componenti Testo e Immagine modificabili nel componente ResponsiveGrid appena aggiunto.
I nuovi componenti Text e Image React modificabili vengono creati utilizzando il modello di definizione del componente modificabile esportato in componenti fissi modificabili.
Componente testo modificabile
-
Apri il progetto SPA nell’IDE
-
Crea un componente React in
src/components/editable/core/Text.js -
Aggiungi il seguente codice a
Text.jscode 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; } -
Crea un componente React modificabile in
src/components/editable/EditableText.js -
Aggiungi il seguente codice a
EditableText.jscode 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;
L’implementazione del componente Testo modificabile deve essere simile alla seguente:
Componente immagine
-
Apri il progetto SPA nell’IDE
-
Crea un componente React in
src/components/editable/core/Image.js -
Aggiungi il seguente codice a
Image.jscode 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> ) }; -
Crea un componente React modificabile in
src/components/editable/EditableImage.js -
Aggiungi il seguente codice 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;
-
Creare un file SCSS
src/components/editable/EditableImage.scssche fornisce stili personalizzati perEditableImage.scss. Questi stili sono destinati alle classi CSS del componente React modificabile. -
Aggiungi il seguente SCSS a
EditableImage.scsscode language-css .cmp-image__image { margin: 1rem 0; width: 100%; border: 0; } -
Importa
EditableImage.scssinEditableImage.jscode language-javascript ... import './EditableImage.scss'; ...
L’implementazione del componente Immagine modificabile sarà simile alla seguente:
Importare i componenti modificabili
Nell'applicazione a pagina singola viene fatto riferimento ai componenti React EditableText e EditableImage appena creati e vengono create dinamicamente in base al JSON restituito da AEM. Per assicurarsi che questi componenti siano disponibili per l'applicazione a pagina singola, creare le relative istruzioni di importazione in Home.js
-
Apri il progetto SPA nell’IDE
-
Apri il file in
src/Home.js -
Aggiungi istruzioni di importazione per
AEMTexteAEMImagecode 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'; ...
The result should look like:
If these imports are not added, the EditableText and EditableImage code is not be invoked by SPA, and thus, the components are not mapped to the provided resource types.
Configuring the container in AEM
AEM container components use policies to dictate their allowed components. This is a critical configuration when using SPA Editor, since only AEM Components that have mapped SPA component counterparts are render-able by the SPA. Ensure only the components which we've provided SPA implementations for are allowed:
EditableTitlemapped towknd-app/components/titleEditableTextmapped towknd-app/components/textEditableImagemapped towknd-app/components/image
To configure the Remote SPA Page template's reponsivegrid container:
-
Accedi ad AEM Author
-
Navigate to Tools > General > Templates > WKND App
-
Edit Report SPA Page
-
Select Structure in the mode switcher in the top right
-
Tap to select the Layout Container
-
Tap the Policy icon in the popup bar
-
On the right, under the Allowed Components tab, expand WKND APP - CONTENT
-
Ensure only following are selected:
- Immagine
- Testo
- Titolo
-
Tocca Fine
Authoring the container in AEM
After the SPA updated to embed the <ResponsiveGrid...>, wrappers for three editable React components (EditableTitle, EditableText, and EditableImage), and AEM is updated with a matching Template policy, we can start authoring content in the container component.
-
Accedi ad AEM Author
-
Passa a Sites > App WKND
-
Tocca Home e seleziona Modifica dalla barra delle azioni superiore
- A "Hello World" Text component displays, as this was automatically added when generating the project from the AEM Project archetype
-
Select Edit from the mode-selector in the top right of the Page Editor
-
Locate the Layout Container editable area beneath the Title
-
Apri la barra laterale dell'Editor pagine e seleziona la visualizzazione Componenti
-
Drag the following components into the Layout Container
- Immagine
- Titolo
-
Drag the components to reorder them to the following order:
- Titolo
- Immagine
- Testo
-
Author the Title component
-
Tap the Title component, and tap the wrench icon to edit the Title component
-
Add the following text:
- Title: Summer is coming, let's make the most of it!
- Type: H1
-
Tocca Fine
-
-
Author the Image component
- Drag an image in from the Side bar (after switching to the Assets view) on the Image component
- Tap the Image component, and tap the wrench icon to edit
- Check the Image is decorative checkbox
- Tocca Fine
-
Author the Text component
- Edit the Text component by tapping the Text component, and tapping the wrench icon
- Add the following text:
- Right now, you can get 15% on all 1-week adventures, and 20% off on all adventures that are 2 weeks or longer! At checkout, add the campaign code SUMMERISCOMING to get your discounts!
- Tocca Fine
-
I componenti ora sono creati, ma si sovrappongono in verticale.
Utilizza la modalità Layout di AEM per regolare le dimensioni e il layout dei componenti.
-
Passa a Modalità layout utilizzando il selettore modalità in alto a destra
-
Ridimensiona i componenti Immagine e Testo in modo che siano affiancati
- Il componente Immagine deve avere 8 colonne
- Il componente Testo deve avere 3 colonne
-
Visualizza in anteprima le modifiche nell'Editor pagina di AEM
-
Aggiorna l'app WKND in esecuzione localmente su http://localhost:3000 per visualizzare le modifiche create.
Congratulazioni.
Hai aggiunto un componente contenitore che consente agli autori di aggiungere componenti modificabili all’app WKND. Ora sai come:
- Utilizzare il componente
ResponsiveGriddel componente modificabile AEM React nell'applicazione a pagina singola - Creare e registrare componenti React modificabili (testo e immagine) da utilizzare nell’applicazione a pagina singola tramite il componente contenitore
- Configura il modello Pagina applicazione a pagina singola remota per consentire i componenti abilitati per l’applicazione a pagina singola
- Aggiungere componenti modificabili al componente contenitore
- Componenti di authoring e layout nell’editor SPA
Passaggi successivi
Il passaggio successivo utilizza la stessa tecnica per aggiungere un componente modificabile a un percorso Dettagli avventura nell'applicazione a pagina singola.