Een aangepaste component maken custom-component
- de Universele Redacteur voor visueel het uitgeven van hoofdloze inhoud.
- de Redacteur van het Fragment van de Inhoud voor op vorm-gebaseerde het uitgeven van hoofdloze inhoud.
Leer hoe te om een douanecomponent tot stand te brengen die met de Redacteur van AEM SPA moet worden gebruikt. Leer hoe u dialoogvensters met auteurs en Sling Models ontwikkelt om het JSON-model uit te breiden en een aangepaste component te vullen.
Doelstelling
- Begrijp de rol van Sling Models in het manipuleren van JSON model API die door AEM wordt verstrekt.
- Begrijp hoe u dialoogvensters met AEM-componenten maakt.
- Leer om de Component van AEM van de a douane tot stand te brengen die met het de redacteurskader van het KUUROORD compatibel is.
Wat u gaat maken
De nadruk van vorige hoofdstukken ontwikkelde de componenten van het KUUROORD en in kaart brengend hen aan bestaande Componenten van de Kern van AEM. Dit hoofdstuk concentreert zich op hoe te om nieuwe componenten van AEM tot stand te brengen en uit te breiden en het model te manipuleren JSON dat door AEM wordt gediend.
Met een eenvoudige Custom Component worden de stappen geïllustreerd die nodig zijn om een nieuwe, net-nieuwe AEM-component te maken.
Vereisten
Herzie het vereiste tooling en de instructies voor vestiging a lokale ontwikkelomgeving .
De code ophalen
-
Download het beginpunt voor deze zelfstudie via Git:
code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-spa.git $ cd aem-guides-wknd-spa $ git checkout Angular/custom-component-start -
Implementeer de codebasis naar een lokale AEM-instantie met Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackageAls het gebruiken van AEM 6.x voeg het
classicprofiel toe:code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic -
Installeer het gebeëindigde pakket voor de traditionele WKND verwijzingsplaats . De beelden die door worden verstrekt WKND verwijzingsplaats worden opnieuw gebruikt op WKND SPA. Het pakket kan worden geïnstalleerd gebruikend de Manager van het Pakket van AEM .
U kunt de gebeëindigde code op GitHub altijd bekijken of de code plaatselijk controleren door aan de tak Angular/custom-component-solution te schakelen.
De AEM-component definiëren
Een AEM-component wordt gedefinieerd als een knooppunt en eigenschappen. In het project, worden deze knopen en eigenschappen vertegenwoordigd als dossiers van XML in de ui.apps module. Maak vervolgens de AEM-component in de module ui.apps .
-
Open de map
ui.appsin de IDE van uw keuze. -
Ga naar
ui.apps/src/main/content/jcr_root/apps/wknd-spa-angular/componentsen maak een map met de naamcustom-component. -
Maak een bestand met de naam
.content.xmlonder de mapcustom-component. Vul decustom-component/.content.xmlmet het volgende: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" jcr:primaryType="cq:Component" jcr:title="Custom Component" componentGroup="WKND SPA Angular - Content"/>
jcr:primaryType="cq:Component"- Geeft aan dat dit knooppunt een AEM-component is.jcr:titleis de waarde die wordt weergegeven aan Content Authors encomponentGroupbepaalt de groepering van componenten in de ontwerpinterface. -
Maak onder de map
custom-componenteen andere map met de naam_cq_dialog. -
Onder de map
_cq_dialogmaakt u een bestand met de naam.content.xmlen vult u dit met het volgende:code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:granite="http://www.adobe.com/jcr/granite/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="Custom Component" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <tabs jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/tabs" maximized="{Boolean}true"> <items jcr:primaryType="nt:unstructured"> <properties jcr:primaryType="nt:unstructured" jcr:title="Properties" sling:resourceType="granite/ui/components/coral/foundation/container" margin="{Boolean}true"> <items jcr:primaryType="nt:unstructured"> <columns jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns" margin="{Boolean}true"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <message jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldDescription="The text to display on the component." fieldLabel="Message" name="./message"/> </items> </column> </items> </columns> </items> </properties> </items> </tabs> </items> </content> </jcr:root> de definitie van de Component van 0} Douane
Het bovenstaande XML-bestand genereert een eenvoudig dialoogvenster voor de
Custom Component. Het kritieke deel van het bestand is de binnenste<message>-node. Dit dialoogvenster bevat een eenvoudigetextfieldnaamMessageen blijft de waarde van het veld textiel bevatten voor een eigenschap met de naammessage.Er wordt een verkoopmodel gemaakt naast de waarde van de eigenschap
messagevia het JSON-model.note note NOTE U kunt veel meer voorbeelden van dialogen bekijken door de definities van de Component van de Kern te bekijken . U kunt extra vormgebieden, zoals select,textarea,pathfieldook bekijken, beschikbaar onder/libs/granite/ui/components/coral/foundation/formin CRXDE-Lite .Met een traditionele component van AEM, wordt een HTML manuscript typisch vereist. Aangezien SPA de component teruggeeft, is geen manuscript van HTML nodig.
Het verkoopmodel maken
Sling-modellen zijn annotaties die worden aangedreven door Java™ "POJO's" (gewone oude Java™-objecten) en die het gemakkelijker maken gegevens van de JCR aan Java™-variabelen toe te wijzen. het Sling Modellen functioneren typisch om complexe server-kant bedrijfslogica voor de Componenten van AEM in te kapselen.
In de context van de Redacteur van het KUUROORD, blootstellen het Verdelen Modellen de inhoud van een component door het model JSON door een eigenschap gebruikend het Verdelen ModelExporter .
-
Open de module
corein de IDE van uw keuze.CustomComponent.javaenCustomComponentImpl.javazijn al gemaakt en uitgestald als onderdeel van de begincode van het hoofdstuk.note note NOTE Als het gebruiken van winde van de Code van Visual Studio, kan het nuttig zijn om uitbreidingen voor Java™ te installeren. -
Open de Java™-interface
CustomComponent.javaopcore/src/main/java/com/adobe/aem/guides/wknd/spa/angular/core/models/CustomComponent.java:
Dit is de Java™ interface die door het het Verkopen Model wordt uitgevoerd.
-
Werk
CustomComponent.javabij zodat de interface vanComponentExporterwordt uitgebreid:code language-java package com.adobe.aem.guides.wknd.spa.angular.core.models; import com.adobe.cq.export.json.ComponentExporter; public interface CustomComponent extends ComponentExporter { public String getMessage(); }Het implementeren van de interface
ComponentExporteris een vereiste dat het Sling-model automatisch wordt opgenomen door de JSON-model-API.De interface
CustomComponentbevat één methode gettergetMessage(). Dit is de methode die de waarde van de auteurdialoog door het model JSON blootstelt. Alleen methoden getter met lege parameters()worden geëxporteerd in het JSON-model. -
Open
CustomComponentImpl.javaomcore/src/main/java/com/adobe/aem/guides/wknd/spa/angular/core/models/impl/CustomComponentImpl.java.Dit is de implementatie van de interface
CustomComponent. In de annotatie@Modelwordt de Java™-klasse aangeduid als een Sling Model. Met de@Exporter-annotatie kan de Java™-klasse via serienummering worden geserialiseerd en geëxporteerd via de Sling Model Exporter. -
Werk de statische variabele
RESOURCE_TYPEbij om naar de AEM-componentwknd-spa-angular/components/custom-componentte verwijzen die in de vorige exercitie is gemaakt.code language-java static final String RESOURCE_TYPE = "wknd-spa-angular/components/custom-component";Het hulpmiddeltype van de component is wat het het Schuintrekken Model aan de component van AEM bindt en uiteindelijk aan de component van Angular in kaart brengt.
-
Voeg de methode
getExportedType()toe aan de klasseCustomComponentImplom het type van componentbron te retourneren:code language-java @Override public String getExportedType() { return CustomComponentImpl.RESOURCE_TYPE; }Deze methode is vereist bij het implementeren van de
ComponentExporter-interface en stelt het brontype beschikbaar dat de toewijzing aan de Angular-component toestaat. -
Werk de methode
getMessage()bij om de waarde te retourneren van de eigenschapmessagedie door het dialoogvenster van de auteur wordt voortgezet. Gebruik de@ValueMap-annotatie om de JCR-waardemessagetoe te wijzen aan een Java™-variabele:code language-java import org.apache.commons.lang3.StringUtils; ... @ValueMapValue private String message; @Override public String getMessage() { return StringUtils.isNotBlank(message) ? message.toUpperCase() : null; }Er worden extra 'bedrijfslogica' toegevoegd om de waarde van het bericht als hoofdletter te retourneren. Hierdoor kunnen we het verschil zien tussen de onbewerkte waarde die is opgeslagen door het dialoogvenster van de auteur en de waarde die wordt weergegeven door het model Sling.
note note NOTE U kunt gebeëindigd CustomComponentImpl.java hier bekijken .
De Angular-component bijwerken
De Angular-code voor de aangepaste component is al gemaakt. Voer vervolgens een aantal updates uit om de Angular-component toe te wijzen aan de AEM-component.
-
Open het bestand in de module
ui.frontendui.frontend/src/app/components/custom/custom.component.ts -
Bekijk de regel
@Input() message: string;. Verwacht wordt dat de getransformeerde hoofdletterwaarde aan deze variabele wordt toegewezen. -
Importeer het
MapTo-object uit de AEM SPA Editor JS SDK en gebruik dit om het toe te wijzen aan de AEM-component:code language-diff + import {MapTo} from '@adobe/cq-angular-editable-components'; ... export class CustomComponent implements OnInit { ... } + MapTo('wknd-spa-angular/components/custom-component')(CustomComponent, CustomEditConfig); -
Open
cutom.component.htmlen controleer of de waarde van{{message}}wordt weergegeven naast een<h2>-tag. -
Open
custom.component.cssen voeg de volgende regel toe:code language-css :host-context { display: block; }De tijdelijke aanduiding voor de weergave van de AEM Editor is alleen correct wanneer de component leeg is.
:host-contextof een andere<div>moet worden ingesteld opdisplay: block;. -
Implementeer de updates voor een lokale AEM-omgeving vanuit de hoofdmap van de projectmap met behulp van uw Maven-vaardigheden:
code language-shell $ cd aem-guides-wknd-spa $ mvn clean install -PautoInstallSinglePackage
Sjabloonbeleid bijwerken
Navigeer vervolgens naar AEM om de updates te controleren en toe te staan dat de Custom Component wordt toegevoegd aan de SPA.
-
Verifieer de registratie van het nieuwe Verschuivende Model door aan http://localhost:4502/system/console/status-slingmodels te navigeren.
code language-plain com.adobe.aem.guides.wknd.spa.angular.core.models.impl.CustomComponentImpl - wknd-spa-angular/components/custom-component com.adobe.aem.guides.wknd.spa.angular.core.models.impl.CustomComponentImpl exports 'wknd-spa-angular/components/custom-component' with selector 'model' and extension '[Ljava.lang.String;@6fb4a693' with exporter 'jackson'De bovenstaande twee regels geven aan dat de
CustomComponentImplis gekoppeld aan dewknd-spa-angular/components/custom-component-component en dat deze is geregistreerd via de Sling Model Exporter. -
Navigeer aan het Malplaatje van de Pagina van het KUUROORD in http://localhost:4502/editor.html/conf/wknd-spa-angular/settings/wcm/templates/spa-page-template/structure.html .
-
Werk het beleid van de Container van de Lay-out bij om nieuwe
Custom Componentals toegestane component toe te voegen:
Sla de wijzigingen in het beleid op en bekijk de
Custom Componentals een toegestane component:
Auteur van de aangepaste component
Vervolgens ontwerpt u de Custom Component met gebruik van de AEM SPA Editor.
-
Navigeer aan http://localhost:4502/editor.html/content/wknd-spa-angular/us/en/home.html .
-
Voeg in de modus
EditdeCustom Componenttoe aan deLayout Container:
-
Open het dialoogvenster van de component en voer een bericht in dat kleine letters bevat.
Dit is het dialoogvenster dat is gemaakt op basis van het XML-bestand dat eerder in het hoofdstuk is opgenomen.
-
Sla de wijzigingen op. Merk op dat het getoonde bericht in alle gekapitaliseerd is.
wordt getoond
-
Bekijk het model JSON door aan http://localhost:4502/content/wknd-spa-angular/us/en.model.json te navigeren. Zoeken naar
wknd-spa-angular/components/custom-component:code language-json "custom_component_208183317": { "message": "HELLO WORLD", ":type": "wknd-spa-angular/components/custom-component" }De JSON-waarde wordt ingesteld op alle hoofdletters op basis van de logica die aan het Sling-model is toegevoegd.
Gefeliciteerd! congratulations
U hebt geleerd hoe u een aangepaste AEM-component kunt maken en hoe de modellen en dialoogvensters voor verkopers werken met het JSON-model.
U kunt de gebeëindigde code op GitHub altijd bekijken of de code plaatselijk controleren door aan de tak Angular/custom-component-solution te schakelen.
Volgende stappen next-steps
breidt een Component van de Kern uit - leer hoe te om een bestaande Component van de Kern uit te breiden die met de Redacteur van AEM SPA moet worden gebruikt. Het begrip hoe te om eigenschappen en inhoud aan een bestaande component toe te voegen is een krachtige techniek om de mogelijkheden van een implementatie van de Redacteur van AEM uit te breiden SPA.