Bewerkbare containercomponenten

Vaste componentenverstrekken wat flexibiliteit voor het ontwerpen SPA inhoud, nochtans is deze benadering stijf en vereist ontwikkelaars om de nauwkeurige samenstelling van de editable inhoud te bepalen. Om het creëren van uitzonderlijke ervaringen door auteurs te steunen, steunt SPA Redacteur het gebruik van containercomponenten in de SPA. Met containercomponenten kunnen auteurs toegestane componenten naar de container slepen en neerzetten, en ze ontwerpen, net als bij traditionele AEM Sites-ontwerpen!

Bewerkbare containercomponenten

In dit hoofdstuk, voegen wij een editable container aan de huismening toe die auteurs toestaat om rijke inhoudservaringen samen te stellen en te lay-out gebruikend de Bewerkbare componenten van het Reageren direct in de SPA.

De WKND-app bijwerken

Een containercomponent toevoegen aan de weergave Home:

  • De component ResponsiveGrid van de component React Editable AEM importeren
  • Aangepaste bewerkbare reactiecomponenten (tekst en afbeelding) importeren en registreren voor gebruik in de component ResponsiveGrid

De component ResponsiveGrid gebruiken

Een bewerkbaar gebied toevoegen aan de weergave Home:

  1. Openen en bewerken react-app/src/components/Home.js

  2. Importeer de ResponsiveGrid -component vanuit @adobe/aem-react-editable-components en voeg deze toe aan de Home -component.

  3. De volgende kenmerken instellen voor de component <ResponsiveGrid...>

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

    Hierdoor krijgt de component ResponsiveGrid de opdracht om de inhoud ervan op te halen uit de AEM bron:

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

    De itemPath verwijst naar het knooppunt responsivegrid dat is gedefinieerd in de AEM Remote SPA Page en wordt automatisch gemaakt op nieuwe AEM pagina's die zijn gemaakt op basis van de AEM Remote SPA Page .

    Werk Home.js bij om de component <ResponsiveGrid...> toe te voegen.

    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>
        );
    }
    

Het bestand Home.js moet er als volgt uitzien:

Home.js

Bewerkbare componenten maken

Om het volledige effect van de flexibele auteurservaringscontainers in SPA Redacteur te krijgen. We hebben al een bewerkbare component Titel gemaakt, maar laten we er nog een paar maken waarmee auteurs bewerkbare componenten Tekst en Afbeelding kunnen gebruiken in de zojuist toegevoegde component ResponsiveGrid.

De nieuwe editable componenten van het Reageren van de Tekst en van het Beeld worden gecreeerd gebruikend het editable patroon van de componentendefinitie die in wordt uitgevoerd editable vaste componenten.

Bewerkbare tekstcomponent

  1. Open het SPA project in uw winde

  2. Een component React maken op src/components/editable/core/Text.js

  3. De volgende code toevoegen aan 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. Een bewerkbare React-component maken op src/components/editable/EditableText.js

  5. De volgende code toevoegen aan 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;
    

De bewerkbare implementatie van de component Text moet er als volgt uitzien:

Editable tekstcomponent

Afbeeldingscomponent

  1. Open het SPA project in uw winde

  2. Een component React maken op src/components/editable/core/Image.js

  3. De volgende code toevoegen aan 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. Een bewerkbare React-component maken op src/components/editable/EditableImage.js

  5. De volgende code toevoegen aan 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. Maak een SCSS-bestand src/components/editable/EditableImage.scss dat aangepaste stijlen voor de EditableImage.scss bevat. Deze stijlen zijn gericht op de CSS-klassen van de bewerkbare component React.

  2. Voeg de volgende SCSS toe aan EditableImage.scss

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

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

De bewerkbare implementatie van de component Image moet er als volgt uitzien:

Bewerkbare beeldcomponent

De bewerkbare componenten importeren

Naar de nieuwe EditableText - en EditableImage React-componenten wordt in de SPA verwezen en deze worden dynamisch geïnstantieerd op basis van de JSON die door AEM wordt geretourneerd. Om ervoor te zorgen dat deze componenten beschikbaar zijn voor de SPA, maakt u importinstructies voor deze componenten in Home.js

  1. Open het SPA project in uw winde

  2. Het bestand openen src/Home.js

  3. Importeerinstructies toevoegen voor AEMText en 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';
    ...
    

Het resultaat moet er als volgt uitzien:

Home.js

Als deze invoer niet wordt toegevoegd, wordt de EditableText en EditableImage code niet aangehaald door SPA, en zo, worden de componenten niet in kaart gebracht aan de verstrekte middeltypes.

De container configureren in AEM

AEM containercomponenten gebruiken beleid om hun toegestane componenten te dicteren. Dit is een kritieke configuratie wanneer het gebruiken van SPA Redacteur, aangezien slechts AEM Componenten die SPA componententegenhangers in kaart hebben gebracht door de SPA renderbaar zijn. Zorg ervoor dat alleen de onderdelen waarvoor we SPA implementaties hebben geleverd, zijn toegestaan:

  • EditableTitle toegewezen aan wknd-app/components/title
  • EditableText toegewezen aan wknd-app/components/text
  • EditableImage toegewezen aan wknd-app/components/image

De reponsivegrid-container van de sjabloon Externe SPA pagina configureren:

  1. Aanmelden bij AEM auteur

  2. Navigeer aan Hulpmiddelen > Algemeen > Malplaatjes > app WKND

  3. Bewerk Rapport SPA Pagina

    Responsief beleid van het Net

  4. Selecteer Structuur op de wijzeschakelaar in het hoogste recht

  5. Tik om de Container van de Lay-out te selecteren

  6. Tik het pictogram van het Beleid in popup bar

    Responsief beleid van het Net

  7. Op het recht, onder Toegestane Componenten lusje, breid APP WKND uit - INHOUD

  8. Zorg ervoor dat alleen het volgende is geselecteerd:

    • Afbeelding
    • Tekst
    • Titel

    Verre SPA Pagina

  9. Tik Gereed

De container ontwerpen in AEM

Nadat de SPA is bijgewerkt om <ResponsiveGrid...> in te sluiten, de inhoud van drie bewerkbare React-componenten (EditableTitle, EditableText en EditableImage) inpakt en AEM wordt bijgewerkt met een overeenkomend sjabloonbeleid, kunnen we beginnen met het ontwerpen van inhoud in de containercomponent.

  1. Aanmelden bij AEM auteur

  2. Navigeer aan Plaatsen > app WKND

  3. Tik Huis en selecteer uitgeven van de hoogste actiebar

    • De componentenvertoningen van de Tekst van de "Wereld van Hello"aangezien dit automatisch werd toegevoegd toen het produceren van het project van het archetype van het AEM Project
  4. Selecteer uitgeven van de wijze-selecteur in het hoogste recht van de Redacteur van de Pagina

  5. Bepaal de plaats van de Container van de Lay-out editable gebied onder de Titel

  6. Open de zijbar van de Redacteur van de Pagina, en selecteer de mening van Componenten

  7. Sleep de volgende componenten in de Container van de Lay-out

    • Afbeelding
    • Titel
  8. Sleep de componenten om deze in de volgende volgorde te plaatsen:

    1. Titel
    2. Afbeelding
    3. Tekst
  9. Auteur de 3 component van de Titel {

    1. Tik de component van de Titel, en tik het moersleutelpictogram ____ de component van de Titel uitgeven

    2. Voeg de volgende tekst toe:

      • Titel: Zomer komt, laten we het meesten van het maken!
      • Type: H1
    3. Tik Gereed

  10. Auteur de component van het Beeld

    1. Sleep een afbeelding vanuit de zijbalk (na het schakelen naar de Assets-weergave) naar de afbeeldingscomponent
    2. Tik de component van het Beeld, en tik het moersleutel pictogram om uit te geven
    3. Controle het Beeld is decoratieve checkbox
    4. Tik Gereed
  11. Auteur de ____ component van de Tekst

    1. Bewerk de component van de Tekst door de component van de Tekst te tikken, en het tikken van het moersleutelpictogram
    2. Voeg de volgende tekst toe:
      • Op dit ogenblik, kunt u 15% op alle avonturen van 1 week krijgen, en 20% korting op alle avonturen die 2 weken of langer zijn! Bij controle, voeg de campagnecode toe SUMMERISCOMING om uw kortingen te krijgen!
    3. Tik Gereed
  12. Uw componenten zijn nu ontworpen, maar worden verticaal gestapeld.

    Authored componenten

Gebruik AEM modus Lay-out om de grootte en lay-out van de componenten aan te passen.

  1. Schakelaar aan Wijze van de Lay-out gebruikend de wijze-selecteur in top-right

  2. vergroot de componenten van het Beeld en van de Tekst, dusdanig dat zij zij aan zij zijn

    • de component van het 1} Beeld zou 8 kolommen breed moeten zijn
    • de component van de Tekst 3 kolommen breed zou moeten zijn

    componenten van de Lay-out

  3. Voorproef uw veranderingen in AEM Redacteur van de Pagina

  4. Vernieuw de WKND App die plaatselijk op http://localhost:3000loopt om de authored veranderingen te zien!

    component van de Container in SPA

Gefeliciteerd!

U hebt een containercomponent toegevoegd waarmee bewerkbare componenten door auteurs aan de WKND App kunnen worden toegevoegd! Nu weet u hoe:

  • De component AEM React Editable Component ResponsiveGrid in de SPA gebruiken
  • Bewerkbare React-componenten (tekst en afbeelding) maken en registreren voor gebruik in de SPA via de containercomponent
  • Vorm het Verre malplaatje van de Pagina van de SPA om de SPA-toegelaten componenten toe te staan
  • Bewerkbare componenten toevoegen aan de containercomponent
  • Auteur- en indelingscomponenten in SPA Editor

Volgende stappen

De volgende stap gebruikt deze zelfde techniek om een editable component aan een route van de Details van het Avontuurin de SPA toe te voegen.

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