Redigerbara behållarkomponenter

Fasta komponenter ger viss flexibilitet vid redigering SPA innehåll, men det här tillvägagångssättet är stelt och kräver att utvecklare definierar den exakta kompositionen för det redigerbara innehållet. SPA Editor stöder användningen av behållarkomponenter i SPA för att skapa exceptionella upplevelser för författare. Med behållarkomponenter kan författare dra och släppa tillåtna komponenter i behållaren och redigera dem, precis som i traditionell AEM Sites-redigering!

Redigerbara behållarkomponenter

I det här kapitlet lägger vi till en redigerbar behållare i hemvyn som gör att författare kan skapa och layouta avancerat innehåll med hjälp av redigerbara React-komponenter direkt i SPA.

Uppdatera WKND-appen

Så här lägger du till en behållarkomponent i hemvyn:

  • Importera AEM React Editable Components ResponsiveGrid-komponent
  • Importera och registrera anpassade redigerbara React-komponenter (text och bild) för användning i ResponsiveGrid-komponenten

Använda komponenten ResponsiveGrid

Så här lägger du till ett redigerbart område i hemvyn:

  1. Öppna och redigera react-app/src/components/Home.js

  2. Importera komponenten ResponsiveGrid från @adobe/aem-react-editable-components och lägg till den i komponenten Home.

  3. Ange följande attribut för komponenten <ResponsiveGrid...>

    • pagePath = '/content/wknd-app/us/en/home'
    • itemPath = 'root/responsivegrid'

    Detta instruerar komponenten ResponsiveGrid att hämta sitt innehåll från den AEM resursen:

    • /content/wknd-app/us/en/home/jcr:content/root/responsivegrid

    itemPath mappar till noden responsivegrid som definieras i AEM Remote SPA Page och skapas automatiskt på nya AEM sidor som skapas från AEM Remote SPA Page.

    Uppdatera Home.js om du vill lägga till komponenten <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>
        );
    }
    

Filen Home.js ska se ut så här:

Home.js

Skapa redigerbara komponenter

För att få full effekt av de flexibla redigeringsfunktionerna i SPA. Vi har redan skapat en redigerbar Title-komponent, men vi ska göra några till så att författarna kan använda redigerbar text och bilder i den nyligen tillagda ResponsiveGrid-komponenten.

De nya redigerbara komponenterna Text och Bildredigering skapas med hjälp av det redigerbara komponentdefinitionsmönstret som exporteras i redigerbara fasta komponenter.

Redigerbar textkomponent

  1. Öppna SPA i din utvecklingsmiljö

  2. Skapa en React-komponent på src/components/editable/core/Text.js

  3. Lägg till följande kod i 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;
    }
    
  4. Skapa en redigerbar React-komponent på src/components/editable/EditableText.js

  5. Lägg till följande kod i 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;
    

Implementeringen av den redigerbara textkomponenten ska se ut så här:

Redigerbar textkomponent

Bildkomponent

  1. Öppna SPA i din utvecklingsmiljö

  2. Skapa en React-komponent på src/components/editable/core/Image.js

  3. Lägg till följande kod i 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>
        )
    };
    
  4. Skapa en redigerbar React-komponent på src/components/editable/EditableImage.js

  5. Lägg till följande kod i 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;
  1. Skapa en SCSS-fil src/components/editable/EditableImage.scss som innehåller anpassade format för EditableImage.scss. Dessa format har CSS-klasserna för den redigerbara React-komponenten som mål.

  2. Lägg till följande SCSS i EditableImage.scss

    code language-css
    .cmp-image__image {
        margin: 1rem 0;
        width: 100%;
        border: 0;
     }
    
  3. Importera EditableImage.scss i EditableImage.js

    code language-javascript
    ...
    import './EditableImage.scss';
    ...
    

Implementeringen av den redigerbara bildkomponenten ska se ut så här:

Redigerbar bildkomponent

Importera redigerbara komponenter

De nyskapade komponenterna EditableText och EditableImage React refereras i SPA och instansieras dynamiskt baserat på den JSON som returneras av AEM. Om du vill vara säker på att de här komponenterna är tillgängliga för SPA skapar du importprogramsatser för dem i Home.js

  1. Öppna SPA i din utvecklingsmiljö

  2. Öppna filen src/Home.js

  3. Lägg till importprogramsatser för AEMText och AEMImage

    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';
    ...
    

Resultatet ska se ut så här:

Home.js

Om dessa importer inte läggs till anropas inte EditableText- och EditableImage-koden av SPA, och komponenterna mappas därför inte till de angivna resurstyperna.

Konfigurera behållaren i AEM

AEM behållarkomponenter använder profiler för att styra deras tillåtna komponenter. Detta är en viktig konfiguration när du använder SPA Editor, eftersom endast AEM komponenter som har mappade SPA komponentmotsvarigheter kan återges av SPA. Se till att endast de komponenter som vi har SPA implementeringar för tillåts:

  • EditableTitle har mappats till wknd-app/components/title
  • EditableText har mappats till wknd-app/components/text
  • EditableImage har mappats till wknd-app/components/image

Så här konfigurerar du SPA på fjärrsidmallens reponsivegrid-behållare:

  1. Logga in på AEM författare

  2. Navigera till Verktyg > Allmänt > Mallar > WKND-app

  3. Redigera SPA

    Principer för responsiva stödraster

  4. Välj Struktur i lägesväljaren i det övre högra hörnet

  5. Tryck för att välja layoutbehållaren

  6. Tryck på ikonen Policy i popup-fältet

    Principer för responsiva stödraster

  7. Till höger, under fliken Tillåtna komponenter, expanderar du WKND APP - CONTENT

  8. Se till att endast följande är markerade:

    • Bild
    • Text
    • Titel

    SPA

  9. Tryck på Klar

Redigerar behållaren i AEM

När SPA har uppdaterats för att bädda in <ResponsiveGrid...>, omslutningar för tre redigerbara React-komponenter (EditableTitle, EditableText och EditableImage) och AEM har uppdaterats med en matchande Template-princip, kan vi börja skapa innehåll i behållarkomponenten.

  1. Logga in på AEM författare

  2. Navigera till Webbplatser > WKND-app

  3. Tryck på Hem och välj Redigera i det övre åtgärdsfältet

    • En"Hello World"-textkomponent visas, eftersom den lades till automatiskt när projektet genererades från den AEM projekttypen
  4. Välj Redigera i lägesväljaren längst upp till höger i sidredigeraren

  5. Leta reda på det redigerbara området Layoutbehållare under rubriken

  6. Öppna sidredigerarens sidfält och välj vyn Komponenter

  7. Dra följande komponenter till layoutbehållaren

    • Bild
    • Titel
  8. Dra komponenterna för att ordna om dem till följande ordning:

    1. Titel
    2. Bild
    3. Text
  9. Författare komponenten Title

    1. Tryck på komponenten Title (Rubrik) och tryck på ikonen wrench för att redigera komponenten Title (Rubrik)

    2. Lägg till följande text:

      • Titel: Sommaren kommer, vi får ut det mesta av den!
      • Typ: H1
    3. Tryck på Klar

  10. Författare komponenten Bild

    1. Dra en bild i från sidfältet (efter att du växlat till Assets-vyn) på bildkomponenten
    2. Tryck på bildkomponenten och tryck på ikonen skiftnyckel för att redigera
    3. Markera kryssrutan Bilden är dekorativ
    4. Tryck på Klar
  11. Författare komponenten Text

    1. Redigera textkomponenten genom att trycka på textkomponenten och trycka på ikonen skiftnyckel
    2. Lägg till följande text:
      • Just nu kan du få 15 % på alla veckolånga äventyr och 20 % rabatt på alla äventyr som är två veckor eller längre! Lägg till kampanjkoden SUMMERISCOMING för att få dina rabatter i kassan!
    3. Tryck på Klar
  12. Dina komponenter är nu redigerade, men staplas lodrätt.

    Skapade komponenter

Använd AEM layoutläge för att justera komponenternas storlek och layout.

  1. Växla till layoutläge med lägesväljaren i det övre högra hörnet

  2. Ändra storlek på bild- och textkomponenterna så att de visas sida vid sida

    • Bild-komponenten ska vara 8 kolumner bred
    • Komponenten Text ska vara 3 kolumner bred

    Layoutkomponenter

  3. Förhandsgranska dina ändringar i AEM Page Editor

  4. Uppdatera WKND-appen som körs lokalt på http://localhost:3000 om du vill se de ändringar som har skapats.

    Behållarkomponent i SPA

Grattis!

Du har lagt till en behållarkomponent som gör att redigerbara komponenter kan läggas till av författare i WKND-appen! Nu kan du:

  • Använd AEM React Editable Components ResponsiveGrid i SPA
  • Skapa och registrera redigerbara React-komponenter (text och bild) för användning i SPA via behållarkomponenten
  • Konfigurera SPA för att tillåta de SPA komponenterna
  • Lägga till redigerbara komponenter i behållarkomponenten
  • Författar och layoutkomponenter i SPA Editor

Nästa steg

I nästa steg används samma teknik för att lägga till en redigerbar komponent i en Adventure Details-väg i SPA.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4