Grundläggande om komponenter component-basics
I det här kapitlet ska vi utforska den underliggande tekniken i en Adobe Experience Manager (AEM) Sites Component genom ett enkelt HelloWorld
-exempel. Små ändringar görs i en befintlig komponent, som omfattar ämnen som redigering, HTML, segmenteringsmodeller och klientbibliotek.
Förutsättningar prerequisites
Granska de verktyg och instruktioner som krävs för att konfigurera en lokal utvecklingsmiljö.
Den IDE som används i videoklippen är Visual Studio Code och plugin-programmet VSCode AEM Sync .
Syfte objective
- Lär dig vilken roll HTML-mallar och Sling-modeller har för att dynamiskt återge HTML.
- Förstå hur dialogrutor används för att underlätta framtagning av innehåll.
- Lär dig grunderna i bibliotek på klientsidan som inkluderar CSS och JavaScript som stöd för en komponent.
Vad du ska bygga what-build
I det här kapitlet utför du flera ändringar av en enkel HelloWorld
-komponent. När du uppdaterar komponenten HelloWorld
får du lära dig mer om de viktigaste områdena AEM komponentutveckling.
Startprojekt för kapitel starter-project
Det här kapitlet bygger på ett generiskt projekt som genererats av AEM Project Archetype. Titta på videon nedan och se förutsättningarna för att komma igång!
Öppna en ny kommandoradsterminal och utför följande åtgärder.
-
Klona aem-guides-wknd-databasen i en tom katalog:
code language-shell $ git clone git@github.com:adobe/aem-guides-wknd.git --branch tutorial/component-basics-start --single-branch
note note NOTE Du kan också fortsätta använda projektet som skapades i det föregående kapitlet, Projektinställningar. -
Navigera till mappen
aem-guides-wknd
.code language-shell $ cd aem-guides-wknd
-
Bygg och distribuera projektet till en lokal instans av AEM med följande kommando:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Om du använder AEM 6.5 eller 6.4 lägger du till profilen classic
till eventuella Maven-kommandon.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
-
Importera projektet till din egen utvecklingsmiljö genom att följa instruktionerna för att konfigurera en lokal utvecklingsmiljö.
Komponentutveckling component-authoring
Komponenter kan ses som små modulära byggstenar på en webbsida. Komponenterna måste vara konfigurerbara för att kunna återanvända dem. Detta sker via författardialogrutan. Låt oss sedan skapa en enkel komponent och kontrollera hur värden från dialogrutan bevaras i AEM.
Nedan visas de steg på hög nivå som utförs i videon ovan.
- Skapa en sida med namnet Komponentgrunder under WKND-plats
>
US>
en. - Lägg till Hello World-komponenten på den nya sidan.
- Öppna komponentens dialogruta och ange text. Spara ändringarna för att visa meddelandet på sidan.
- Växla till utvecklarläge, visa innehållssökvägen i CRXDE-Lite och kontrollera komponentinstansens egenskaper.
- Använd CRXDE-Lite för att visa skriptet
cq:dialog
ochhelloworld.html
från/apps/wknd/components/content/helloworld
.
HTML (HTML Template Language) och dialogrutor htl-dialogs
HTML-mallspråk eller HTML är ett lättviktsmallspråk på serversidan som används av AEM komponenter för att återge innehåll.
Dialogrutor definierar de konfigurationer som är tillgängliga för en komponent.
Nu uppdaterar vi HelloWorld
HTML-skriptet för att visa en extra hälsning före textmeddelandet.
Nedan visas de steg på hög nivå som utförs i videon ovan.
-
Växla till IDE och öppna projektet i modulen
ui.apps
. -
Öppna filen
helloworld.html
och uppdatera HTML Markup. -
Använd IDE-verktygen som VSCode AEM Sync för att synkronisera filändringen med den lokala AEM.
-
Återgå till webbläsaren och observera att komponentåtergivningen har ändrats.
-
Öppna filen
.content.xml
som definierar dialogrutan för komponentenHelloWorld
på:code language-plain <code>/aem-guides-wknd/ui.apps/src/main/content/jcr_root/apps/wknd/components/helloworld/_cq_dialog/.content.xml
-
Uppdatera dialogrutan för att lägga till ett extra textfält med namnet Title med namnet
./title
:code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="Properties" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <title jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="Title" name="./title"/> <text jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="Text" name="./text"/> </items> </column> </items> </content> </jcr:root>
-
Öppna filen
helloworld.html
igen, som representerar det huvudsakliga HTL-skriptet som ansvarar för återgivningen av komponentenHelloWorld
nedanför sökvägen:code language-plain <code>/aem-guides-wknd.ui.apps/src/main/content/jcr_root/apps/wknd/components/helloworld/helloworld.html
-
Uppdatera
helloworld.html
för att återge värdet för textfältet Greeting som en del av enH1
-tagg:code language-html <div class="cmp-helloworld" data-cmp-is="helloworld"> <h1 class="cmp-helloworld__title">${properties.title}</h1> ... </div>
-
Distribuera ändringarna till en lokal instans av AEM med utvecklarpluginen eller med dina Maven-kunskaper.
Sling Models sling-models
Sling Models är annoteringsdrivna Java™ "POJOs" (Plain Old Java™ Objects) som gör det enklare att mappa data från JCR till Java™-variabler. De erbjuder också flera andra institutioner när de utvecklas i samband med AEM.
Sedan gör vi några uppdateringar av HelloWorldModel
-delningsmodellen för att tillämpa viss affärslogik på de värden som lagras i JCR innan vi skickar dem till sidan.
-
Öppna filen
HelloWorldModel.java
, som är den Sling-modell som används med komponentenHelloWorld
.code language-plain <code>/aem-guides-wknd.core/src/main/java/com/adobe/aem/guides/wknd/core/models/HelloWorldModel.java
-
Lägg till följande importsatser:
code language-java import org.apache.commons.lang3.StringUtils; import org.apache.sling.models.annotations.DefaultInjectionStrategy;
-
Uppdatera
@Model
-anteckningen så att den använder enDefaultInjectionStrategy
:code language-java @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class HelloWorldModel { ...
-
Lägg till följande rader i klassen
HelloWorldModel
för att mappa värdena för komponentens JCR-egenskapertitle
ochtext
till Java™-variabler:code language-java ... @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class HelloWorldModel { ... @ValueMapValue private String title; @ValueMapValue private String text; @PostConstruct protected void init() { ...
-
Lägg till följande metod
getTitle()
i klassenHelloWorldModel
som returnerar värdet för egenskapentitle
. Den här metoden lägger till ytterligare logik för att returnera strängvärdet "Default Value here!" om egenskapentitle
är null eller tom:code language-java /*** * * @return the value of title, if null or blank returns "Default Value here!" */ public String getTitle() { return StringUtils.isNotBlank(title) ? title : "Default Value here!"; }
-
Lägg till följande metod
getText()
i klassenHelloWorldModel
som returnerar värdet för egenskapentext
. Med den här metoden omvandlas strängen till alla versaler.code language-java /*** * * @return All caps variation of the text value */ public String getText() { return StringUtils.isNotBlank(this.text) ? this.text.toUpperCase() : null; }
-
Skapa och distribuera paketet från modulen
core
:code language-shell $ cd core $ mvn clean install -PautoInstallBundle
note note NOTE Använd mvn clean install -PautoInstallBundle -Pclassic
för AEM 6.4/6.5 -
Uppdatera filen
helloworld.html
vidaem-guides-wknd.ui.apps/src/main/content/jcr_root/apps/wknd/components/content/helloworld/helloworld.html
om du vill använda de nya metoderna i modellenHelloWorld
.Modellen
HelloWorld
instansieras för den här komponentinstansen via HTML-direktivet:data-sly-use.model="com.adobe.aem.guides.wknd.core.models.HelloWorldModel"
, och instansen sparas i variabelnmodel
.Modellinstansen
HelloWorld
är nu tillgänglig i HTML via variabelnmodel
med hjälp avHelloWord
. De här metoderna kan använda förkortad metodsyntax:${model.getTitle()}
kan förkortas till${model.title}
.På samma sätt injiceras alla HTML-skript med globala objekt som du kan komma åt med samma syntax som för Sling Model-objekt.
code language-html <div class="cmp-helloworld" data-cmp-is="helloworld" data-sly-use.model="com.adobe.aem.guides.wknd.core.models.HelloWorldModel"> <h1 class="cmp-helloworld__title">${model.title}</h1> <div class="cmp-helloworld__item" data-sly-test="${properties.text}"> <p class="cmp-helloworld__item-label">Text property:</p> <pre class="cmp-helloworld__item-output" data-cmp-hook-helloworld="property">${properties.text}</pre> </div> <div class="cmp-helloworld__item" data-sly-test="${model.text}"> <p class="cmp-helloworld__item-label">Sling Model getText() property:</p> <pre class="cmp-helloworld__item-output" data-cmp-hook-helloworld="property">${model.text}</pre> </div> </div>
-
Distribuera ändringarna till en lokal instans av AEM med Eclipse Developer plugin eller med dina Maven-kunskaper.
Bibliotek på klientsidan client-side-libraries
Klientbibliotek, clientlibs
för kort, innehåller en mekanism för att organisera och hantera CSS- och JavaScript-filer som krävs för en AEM Sites-implementering. Klientbibliotek är standardsättet att inkludera CSS och JavaScript på en sida i AEM.
Modulen ui.front är ett frikopplat webpack -projekt som är integrerat i byggprocessen. Detta gör att du kan använda populära front-end-bibliotek som Sass, LESS och TypeScript. Modulen ui.frontend
har utforskats mer ingående i kapitlet Bibliotek på klientsidan.
Uppdatera sedan CSS-formaten för komponenten HelloWorld
.
Nedan visas de steg på hög nivå som utförs i videon ovan.
-
Öppna ett terminalfönster och navigera till katalogen
ui.frontend
-
Om du befinner dig i katalogen
ui.frontend
kör du kommandotnpm install npm-run-all --save-dev
för att installera nodmodulen npm-run-all . Det här steget är obligatoriskt i Archetype 39-genererat AEM-projekt. I kommande Archetype-version är detta inte nödvändigt. -
Kör sedan kommandot
npm run watch
:code language-shell $ npm run watch
-
Växla till IDE och öppna projektet i modulen
ui.frontend
. -
Öppna filen
ui.frontend/src/main/webpack/components/_helloworld.scss
. -
Uppdatera filen så att den visar en röd titel:
code language-scss .cmp-helloworld {} .cmp-helloworld__title { color: red; }
-
I terminalen ska du se aktivitet som anger att modulen
ui.frontend
kompilerar och synkroniserar ändringarna med den lokala instansen av AEM.code language-shell Entrypoint site 214 KiB = clientlib-site/site.css 8.45 KiB clientlib-site/site.js 206 KiB 2022-02-22 17:28:51: webpack 5.69.1 compiled successfully in 119 ms change:dist/index.html + jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css + jcr_root/apps/wknd/clientlibs/clientlib-site/css + jcr_root/apps/wknd/clientlibs/clientlib-site/js/site.js + jcr_root/apps/wknd/clientlibs/clientlib-site/js + jcr_root/apps/wknd/clientlibs/clientlib-site + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/css.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/js.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies
-
Återgå till webbläsaren och observera att titelfärgen har ändrats.
Grattis! congratulations
Grattis, du har lärt dig grunderna i komponentutveckling i Adobe Experience Manager!
Nästa steg next-steps
Bekanta dig med Adobe Experience Manager sidor och mallar i nästa kapitel Sidor och mallar. Lär dig mer om hur grundkomponenterna proxideras i projektet och lär dig avancerade policykonfigurationer av redigerbara mallar för att bygga ut en välstrukturerad mall för artikelsidor.
Visa den färdiga koden på GitHub eller granska och distribuera koden lokalt på Git-grenen tutorial/component-basics-solution
.