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!
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:
-
Openen en bewerken
react-app/src/components/Home.js
-
Importeer de
ResponsiveGrid
-component vanuit@adobe/aem-react-editable-components
en voeg deze toe aan deHome
-component. -
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 knooppuntresponsivegrid
dat is gedefinieerd in de AEMRemote SPA Page
en wordt automatisch gemaakt op nieuwe AEM pagina's die zijn gemaakt op basis van de AEMRemote 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:
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
-
Open het SPA project in uw winde
-
Een component React maken op
src/components/editable/core/Text.js
-
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; }
-
Een bewerkbare React-component maken op
src/components/editable/EditableText.js
-
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:
Afbeeldingscomponent
-
Open het SPA project in uw winde
-
Een component React maken op
src/components/editable/core/Image.js
-
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> ) };
-
Een bewerkbare React-component maken op
src/components/editable/EditableImage.js
-
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;
-
Maak een SCSS-bestand
src/components/editable/EditableImage.scss
dat aangepaste stijlen voor deEditableImage.scss
bevat. Deze stijlen zijn gericht op de CSS-klassen van de bewerkbare component React. -
Voeg de volgende SCSS toe aan
EditableImage.scss
code language-css .cmp-image__image { margin: 1rem 0; width: 100%; border: 0; }
-
Importeren
EditableImage.scss
inEditableImage.js
code language-javascript ... import './EditableImage.scss'; ...
De bewerkbare implementatie van de component Image moet er als volgt uitzien:
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
-
Open het SPA project in uw winde
-
Het bestand openen
src/Home.js
-
Importeerinstructies toevoegen voor
AEMText
enAEMImage
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:
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 aanwknd-app/components/title
EditableText
toegewezen aanwknd-app/components/text
EditableImage
toegewezen aanwknd-app/components/image
De reponsivegrid-container van de sjabloon Externe SPA pagina configureren:
-
Aanmelden bij AEM auteur
-
Navigeer aan Hulpmiddelen > Algemeen > Malplaatjes > app WKND
-
Bewerk Rapport SPA Pagina
-
Selecteer Structuur op de wijzeschakelaar in het hoogste recht
-
Tik om de Container van de Lay-out te selecteren
-
Tik het pictogram van het Beleid in popup bar
-
Op het recht, onder Toegestane Componenten lusje, breid APP WKND uit - INHOUD
-
Zorg ervoor dat alleen het volgende is geselecteerd:
- Afbeelding
- Tekst
- Titel
-
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.
-
Aanmelden bij AEM auteur
-
Navigeer aan Plaatsen > app WKND
-
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
-
Selecteer uitgeven van de wijze-selecteur in het hoogste recht van de Redacteur van de Pagina
-
Bepaal de plaats van de Container van de Lay-out editable gebied onder de Titel
-
Open de zijbar van de Redacteur van de Pagina, en selecteer de mening van Componenten
-
Sleep de volgende componenten in de Container van de Lay-out
- Afbeelding
- Titel
-
Sleep de componenten om deze in de volgende volgorde te plaatsen:
- Titel
- Afbeelding
- Tekst
-
Auteur de 3 component van de Titel {
-
Tik de component van de Titel, en tik het moersleutelpictogram ____ de component van de Titel uitgeven
-
Voeg de volgende tekst toe:
- Titel: Zomer komt, laten we het meesten van het maken!
- Type: H1
-
Tik Gereed
-
-
Auteur de component van het Beeld
- Sleep een afbeelding vanuit de zijbalk (na het schakelen naar de Assets-weergave) naar de afbeeldingscomponent
- Tik de component van het Beeld, en tik het moersleutel pictogram om uit te geven
- Controle het Beeld is decoratieve checkbox
- Tik Gereed
-
Auteur de ____ component van de Tekst
- Bewerk de component van de Tekst door de component van de Tekst te tikken, en het tikken van het moersleutelpictogram
- 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!
- Tik Gereed
-
Uw componenten zijn nu ontworpen, maar worden verticaal gestapeld.
Gebruik AEM modus Lay-out om de grootte en lay-out van de componenten aan te passen.
-
Schakelaar aan Wijze van de Lay-out gebruikend de wijze-selecteur in top-right
-
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
-
Voorproef uw veranderingen in AEM Redacteur van de Pagina
-
Vernieuw de WKND App die plaatselijk op http://localhost:3000loopt om de authored veranderingen te zien!
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.