Een aangepaste component maken custom-component
Leer hoe u een aangepaste component maakt die wordt gebruikt met de AEM SPA Editor. 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 AEM componentdialoogvensters maakt.
- Leer om a douane AEM Component tot stand te brengen die met het SPA redacteurskader compatibel is.
Wat u gaat maken
De nadruk van vorige hoofdstukken ontwikkelde SPA componenten en in kaart brengend hen aan bestaande AEM de Componenten van de Kern. Dit hoofdstuk concentreert zich op hoe te om nieuwe AEM componenten 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 AEM te maken.
wordt getoond
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 basis van de code op een lokale AEM met Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackage
Als het gebruiken van AEM 6.xhet
classic
profiel toevoegt: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 verwijzingsplaatsworden opnieuw gebruikt op de SPA WKND. Het pakket kan worden geïnstalleerd gebruikend AEM de Manager van het Pakket.
U kunt de gebeëindigde code op GitHubaltijd 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.apps
in de IDE van uw keuze. -
Ga naar
ui.apps/src/main/content/jcr_root/apps/wknd-spa-angular/components
en maak een map met de naamcustom-component
. -
Maak een bestand met de naam
.content.xml
onder de mapcustom-component
. Vul decustom-component/.content.xml
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: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"
- identificeert dat dit knooppunt een AEM component is.jcr:title
is de waarde die wordt weergegeven aan Content Authors encomponentGroup
bepaalt de groepering van componenten in de ontwerpinterface. -
Maak onder de map
custom-component
een andere map met de naam_cq_dialog
. -
Onder de map
_cq_dialog
maakt u een bestand met de naam.content.xml
en 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 eenvoudigetextfield
naamMessage
en 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
message
via 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
,pathfield
ook bekijken, beschikbaar onder/libs/granite/ui/components/coral/foundation/form
in CRXDE-Lite.Met een traditionele AEM component, wordt een HTMLmanuscript typisch vereist. Aangezien de SPA de component rendert, is er geen HTML-script 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 Modellenfunctioneren typisch om complexe server-kant bedrijfslogica voor AEM Componenten in te kapselen.
In de context van de SPA Redacteur, blootstellen het Verdelen Modellen de inhoud van een component door het model JSON door een eigenschap gebruikend het Verdelen ModelExporter.
-
Open de module
core
in de IDE van uw keuze.CustomComponent.java
enCustomComponentImpl.java
zijn 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.java
opcore/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.java
bij zodat de interface vanComponentExporter
wordt 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
ComponentExporter
is een vereiste dat het Sling-model automatisch wordt opgenomen door de JSON-model-API.De interface
CustomComponent
bevat éé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.java
omcore/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@Model
wordt 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_TYPE
bij om naar de AEM componentwknd-spa-angular/components/custom-component
te wijzen die in de vorige oefening is gemaakt.code language-java static final String RESOURCE_TYPE = "wknd-spa-angular/components/custom-component";
Het middeltype van de component is wat het Sling Model aan de AEM component bindt en uiteindelijk aan de component van de Angular in kaart brengt.
-
Voeg de methode
getExportedType()
toe aan de klasseCustomComponentImpl
om het type van componentbron te retourneren:code language-java @Override public String getExportedType() { return CustomComponentImpl.RESOURCE_TYPE; }
Deze methode is vereist wanneer het uitvoeren van de
ComponentExporter
interface en stelt het middeltype bloot dat de afbeelding aan de component van de Angular toestaat. -
Werk de methode
getMessage()
bij om de waarde te retourneren van de eigenschapmessage
die door het dialoogvenster van de auteur wordt voortgezet. Gebruik de@ValueMap
-annotatie om de JCR-waardemessage
toe 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 component Angular bijwerken
De code van de Angular voor de Component van de Douane is reeds gecreeerd. Voer vervolgens een aantal updates uit om de component Angular toe te wijzen aan de AEM.
-
Open het bestand in de module
ui.frontend
ui.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 van 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.html
en controleer of de waarde van{{message}}
wordt weergegeven naast een<h2>
-tag. -
Open
custom.component.css
en voeg de volgende regel toe:code language-css :host-context { display: block; }
De tijdelijke aanduiding voor de AEM Editor wordt alleen correct weergegeven wanneer de component leeg is, als
:host-context
of een andere<div>
is ingesteld opdisplay: block;
. -
Stel de updates aan een lokaal AEM milieu van de wortel van de projectfolder op, gebruikend 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 Custom Component
toe te staan om aan de SPA te worden toegevoegd.
-
Verifieer de registratie van het nieuwe Verschuivende Model door aan http://localhost:4502/system/console/status-slingmodelste 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
CustomComponentImpl
is 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 SPA Pagina 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 Component
als toegestane component toe te voegen:Sla de wijzigingen in het beleid op en bekijk de
Custom Component
als een toegestane component:
Auteur van de aangepaste component
Maak vervolgens de Custom Component
met de AEM SPA Editor.
-
Navigeer aan http://localhost:4502/editor.html/content/wknd-spa-angular/us/en/home.html.
-
Voeg in de modus
Edit
deCustom Component
toe 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.jsonte 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
Gefeliciteerd, hebt u 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 GitHubaltijd 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 Kernuit - leer hoe te om een bestaande Component van de Kern uit te breiden die met de AEM SPARedacteur 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 AEM SPARedacteur uit te breiden.