Bewerkbare containercomponenten
- de Universele Redacteurvoor visueel het uitgeven van hoofdloze inhoud.
- de Redacteur van het Fragment van de Inhoudvoor op vorm-gebaseerde het uitgeven van hoofdloze inhoud.
Vaste componentenverstrekken wat flexibiliteit voor het ontwerpen van de inhoud van het KUUROORD, nochtans is deze benadering stijf en vereist ontwikkelaars om de nauwkeurige samenstelling van de editable inhoud te bepalen. Om de verwezenlijking van uitzonderlijke ervaringen door auteurs te steunen, steunt de Redacteur van het KUUROORD het gebruik van containercomponenten in het KUUROORD. 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 het KUUROORD.
De WKND-app bijwerken
Een containercomponent toevoegen aan de weergave Home:
- De component
ResponsiveGrid
van de AEM React Editable-component 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 deRemote SPA Page
AEM-sjabloon en wordt automatisch gemaakt op nieuwe AEM-pagina's die zijn gemaakt op basis van deRemote SPA Page
AEM-sjabloon.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 te krijgen verstrekt in de Redacteur van het KUUROORD. 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 project van het KUUROORD 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 project van het KUUROORD 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
De nieuwe EditableText
- en EditableImage
React-componenten worden vermeld in de SPA en worden dynamisch geïnstantieerd op basis van de JSON die door AEM wordt geretourneerd. Om ervoor te zorgen dat deze componenten aan SPA beschikbaar zijn, creeer de invoerverklaringen voor hen in Home.js
-
Open het project van het KUUROORD 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 toegestane componenten voor te schrijven. Dit is een kritieke configuratie wanneer het gebruiken van de Redacteur van het KUUROORD, aangezien slechts de Componenten van AEM die de componententegenhangers van het KUUROORD in kaart hebben gebracht door het KUUROORD kunnen worden teruggegeven. Verzeker slechts de componenten waarvoor wij implementaties van het KUUROORD hebben verstrekt worden toegestaan:
EditableTitle
toegewezen aanwknd-app/components/title
EditableText
toegewezen aanwknd-app/components/text
EditableImage
toegewezen aanwknd-app/components/image
Om de Verre container van het malplaatje van de Pagina van het KUUROORD te vormen reponsivegrid:
-
Aanmelden bij AEM-auteur
-
Navigeer aan Hulpmiddelen > Algemeen > Malplaatjes > app WKND
-
Bewerk Pagina van het Rapport SPA
-
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 SPA wordt bijgewerkt om <ResponsiveGrid...>
in te bedden, verpakt voor drie editable componenten van het Reageren (EditableTitle
, EditableText
, en EditableImage
), en AEM met een passend beleid van het Malplaatje wordt bijgewerkt, kunnen wij beginnen inhoud in de containercomponent te ontwerpen.
-
Aanmelden bij AEM-auteur
-
Navigeer aan Plaatsen > app WKND
-
Tik Huis en selecteer uitgeven van de hoogste actiebar
- De component "Hello World" Tekst wordt weergegeven, aangezien dit automatisch is toegevoegd bij het genereren van het project vanuit het AEM Project archetype
-
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 de AEM-lay-outmodus 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 de Redacteur van de Pagina van AEM
-
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 AEM React Editable-component
ResponsiveGrid
in de SPA gebruiken - Creeer en registreer editable React componenten (Tekst en Beeld) voor gebruik in SPA via de containercomponent
- Vorm het Verre malplaatje van de Pagina van SPA om de SPA-Toegelaten componenten toe te staan
- Bewerkbare componenten toevoegen aan de containercomponent
- Auteur en lay-outcomponenten in de Redacteur van het KUUROORD
Volgende stappen
De volgende stap gebruikt deze zelfde techniek om een editable component aan een route van de Details van het Avontuurin het KUUROORD toe te voegen.