Crear un componente personalizado custom-component

AEM SPA Obtenga información sobre cómo crear un componente personalizado para utilizarlo con el Editor de. Aprenda a desarrollar cuadros de diálogo de autor y modelos Sling para ampliar el modelo JSON y rellenar un componente personalizado.

Objetivo

  1. AEM Comprenda el papel de los modelos Sling en la manipulación de la API del modelo JSON proporcionada por los usuarios de la interfaz de usuario de.
  2. AEM Obtenga información sobre cómo crear cuadros de diálogo de componentes de.
  3. AEM SPA Aprenda a crear un componente personalizado de la aplicación que sea compatible con el marco de trabajo del editor de.

Qué va a generar

SPA AEM El enfoque de los capítulos anteriores era el desarrollo de componentes de y su asignación a componentes principales existentes. AEM AEM Este capítulo se centra en cómo crear y ampliar nuevos componentes de y en cómo manipular el modelo JSON proporcionado por los usuarios de la aplicación de código de tiempo de la aplicación de código de tiempo de la aplicación de código de tiempo.

AEM Un Custom Component simple ilustra los pasos necesarios para crear un nuevo componente de red de la red de la red (net-new) de la red de la red de la red.

Mensaje mostrado en Todo en mayúsculas

Requisitos previos

Revise las herramientas y las instrucciones necesarias para configurar un entorno de desarrollo local.

Obtener el código

  1. Descargue el punto de partida para este tutorial mediante 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
    
  2. AEM Implemente el código base en una instancia de local mediante Maven:

    code language-shell
    $ mvn clean install -PautoInstallSinglePackage
    

    AEM Si usa 6.x, agregue el perfil classic:

    code language-shell
    $ mvn clean install -PautoInstallSinglePackage -Pclassic
    
  3. Instale el paquete terminado para el sitio de referencia WKND tradicional. SPA Las imágenes proporcionadas por el sitio de referencia WKND se reutilizarán en el WKND de la. AEM El paquete se puede instalar usando el Administrador de paquetes de.

    Administrador de paquetes instala wknd.all

Siempre puede ver el código terminado en GitHub o desprotegerlo localmente cambiando a la rama Angular/custom-component-solution.

AEM Definición del componente de

AEM Un componente se define como un nodo y propiedades. En el proyecto, estos nodos y propiedades se representan como archivos XML en el módulo ui.apps. AEM A continuación, cree el componente de en el módulo ui.apps.

  1. Abra la carpeta ui.apps en el IDE que desee.

  2. Vaya a ui.apps/src/main/content/jcr_root/apps/wknd-spa-angular/components y cree una carpeta llamada custom-component.

  3. Cree un archivo con el nombre .content.xml debajo de la carpeta custom-component. Rellene custom-component/.content.xml con lo siguiente:

    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"/>
    

    Crear definición de componente personalizado

    AEM jcr:primaryType="cq:Component": identifica que este nodo es un componente de la.

    jcr:title es el valor que se muestra a los autores de contenido y componentGroup determina la agrupación de componentes en la interfaz de usuario de creación.

  4. Debajo de la carpeta custom-component, cree otra carpeta denominada _cq_dialog.

  5. Debajo de la carpeta _cq_dialog cree un archivo denominado .content.xml y rellénelo con lo siguiente:

    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>
    

    Definición de componente personalizado

    El archivo XML anterior genera un cuadro de diálogo sencillo para Custom Component. La parte crítica del archivo es el nodo <message> interno. Este cuadro de diálogo contiene un textfield simple denominado Message y persiste el valor del campo de texto en una propiedad denominada message.

    Se crea un modelo Sling junto a para exponer el valor de la propiedad message a través del modelo JSON.

    note note
    NOTE
    Puede ver muchos más ejemplos de cuadros de diálogo al ver las definiciones de los componentes principales. También puede ver campos de formulario adicionales, como select, textarea, pathfield, disponibles debajo de /libs/granite/ui/components/coral/foundation/form en CRXDE-Lite.

    AEM Con un componente tradicional de la, se suele requerir un script HTL. SPA Dado que el procesa el componente, no se necesita ningún script HTL.

Creación del modelo Sling

Los modelos Sling son objetos Java™ "POJO" (Plain Old Java™ Objects) impulsados por anotaciones que facilitan la asignación de datos de las variables JCR a Java™. AEM Los modelos Sling suelen funcionar para encapsular lógica empresarial compleja del lado del servidor para componentes de la.

SPA En el contexto del Editor de modelos de Sling, los modelos de Sling exponen el contenido de un componente a través del modelo JSON mediante una función que utiliza el Exportador del modelo Sling.

  1. En el IDE de su elección, abra el módulo core. CustomComponent.java y CustomComponentImpl.java ya se han creado y tachado como parte del código de inicio del capítulo.

    note note
    NOTE
    Si utiliza el IDE de código de Visual Studio, puede resultar útil instalar extensiones para Java™.
  2. Abra la interfaz de Java™ CustomComponent.java en core/src/main/java/com/adobe/aem/guides/wknd/spa/angular/core/models/CustomComponent.java:

    Interfaz CustomComponent.java

    Esta es la interfaz Java™ que implementa el modelo Sling.

  3. Actualizar CustomComponent.java para que extienda la interfaz ComponentExporter:

    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();
    
    }
    

    La implementación de la interfaz ComponentExporter es un requisito para que la API del modelo JSON recoja automáticamente el modelo Sling.

    La interfaz CustomComponent incluye un solo método de captador getMessage(). Este es el método que expone el valor del cuadro de diálogo de autor a través del modelo JSON. En el modelo JSON solo se exportan los métodos de captador con parámetros vacíos ().

  4. Abra CustomComponentImpl.java a las core/src/main/java/com/adobe/aem/guides/wknd/spa/angular/core/models/impl/CustomComponentImpl.java.

    Esta es la implementación de la interfaz CustomComponent. La anotación @Model identifica la clase Java™ como modelo Sling. La anotación @Exporter permite serializar y exportar la clase Java™ a través del Exportador de modelos Sling.

  5. AEM Actualice la variable estática RESOURCE_TYPE para que apunte al componente de la wknd-spa-angular/components/custom-component creado en el ejercicio anterior.

    code language-java
    static final String RESOURCE_TYPE = "wknd-spa-angular/components/custom-component";
    

    AEM El tipo de recurso del componente es el que enlaza el modelo Sling al componente de y, en última instancia, se asigna al componente de Angular.

  6. Agregue el método getExportedType() a la clase CustomComponentImpl para devolver el tipo de recurso de componente:

    code language-java
    @Override
    public String getExportedType() {
        return CustomComponentImpl.RESOURCE_TYPE;
    }
    

    Este método es necesario al implementar la interfaz ComponentExporter y expone el tipo de recurso que permite la asignación al componente de Angular.

  7. Actualice el método getMessage() para devolver el valor de la propiedad message conservada por el cuadro de diálogo de autor. Usar la anotación @ValueMap es asignar el valor JCR message a una variable Java™:

    code language-java
    import org.apache.commons.lang3.StringUtils;
    ...
    
    @ValueMapValue
    private String message;
    
    @Override
    public String getMessage() {
        return StringUtils.isNotBlank(message) ? message.toUpperCase() : null;
    }
    

    Se agrega alguna "lógica empresarial" adicional para devolver el valor del mensaje como mayúsculas. Esto nos permite ver la diferencia entre el valor sin procesar almacenado por el cuadro de diálogo del autor y el valor expuesto por el modelo Sling.

    note note
    NOTE
    Puede ver CustomComponentImpl.java finalizado aquí.

Actualización del componente Angular

Ya se ha creado el código de Angular del componente personalizado. A continuación, realice algunas actualizaciones para asignar el componente de Angular AEM al componente de.

  1. En el módulo ui.frontend, abra el archivo ui.frontend/src/app/components/custom/custom.component.ts

  2. Observe la línea @Input() message: string;. Se espera que el valor en mayúsculas transformado se asigne a esta variable.

  3. AEM SPA AEM Importe el objeto MapTo desde el SDK de JS de Editor de y utilícelo para asignarlo al componente de:

    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);
    
  4. Abra cutom.component.html y observe que el valor de {{message}} se muestra en una etiqueta <h2>.

  5. Abra custom.component.css y agregue la regla siguiente:

    code language-css
    :host-context {
        display: block;
    }
    

    AEM Para que el marcador de posición del Editor de la se muestre correctamente cuando el componente está vacío, :host-context u otro <div> debe establecerse en display: block;.

  6. AEM Implemente las actualizaciones en un entorno de trabajo local desde la raíz del directorio del proyecto con sus habilidades con Maven:

    code language-shell
    $ cd aem-guides-wknd-spa
    $ mvn clean install -PautoInstallSinglePackage
    

Actualizar la directiva de plantilla

AEM SPA A continuación, navegue hasta la para comprobar las actualizaciones y permitir que se agregue Custom Component a la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos de la lista de elementos.

  1. Compruebe el registro del nuevo modelo Sling navegando hasta http://localhost:4502/system/console/status-slingmodels.

    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'
    

    Debería ver las dos líneas anteriores que indican que CustomComponentImpl está asociado con el componente wknd-spa-angular/components/custom-component y que está registrado a través del Exportador de modelos Sling.

  2. SPA Vaya a la plantilla de página de la página de en http://localhost:4502/editor.html/conf/wknd-spa-angular/settings/wcm/templates/spa-page-template/structure.html.

  3. Actualice la directiva del contenedor de diseño para agregar el nuevo Custom Component como componente permitido:

    Actualizar directiva de contenedor de diseño

    Guarde los cambios en la directiva y observe Custom Component como un componente permitido:

    Componente personalizado como componente permitido

Crear el componente personalizado

AEM SPA A continuación, cree el Custom Component mediante el Editor de de trabajo.

  1. Vaya a http://localhost:4502/editor.html/content/wknd-spa-angular/us/en/home.html.

  2. En el modo Edit, agregue Custom Component a Layout Container:

    Insertar nuevo componente

  3. Abra el cuadro de diálogo del componente e introduzca un mensaje que contenga letras minúsculas.

    Configurar el componente personalizado

    Este es el cuadro de diálogo que se creó en función del archivo XML anteriormente en el capítulo.

  4. Guarde los cambios. Observe que el mensaje que se muestra está en mayúsculas.

    Mensaje mostrado en Todo en mayúsculas

  5. Vea el modelo JSON navegando a http://localhost:4502/content/wknd-spa-angular/us/en.model.json. Buscar wknd-spa-angular/components/custom-component:

    code language-json
    "custom_component_208183317": {
        "message": "HELLO WORLD",
        ":type": "wknd-spa-angular/components/custom-component"
    }
    

    Observe que el valor JSON se establece en mayúsculas en función de la lógica agregada al modelo Sling.

Enhorabuena. congratulations

AEM ¡Enhorabuena! Ha aprendido a crear un componente de personalizado y cómo los modelos Sling y los cuadros de diálogo funcionan con el modelo JSON.

Siempre puede ver el código terminado en GitHub o desprotegerlo localmente cambiando a la rama Angular/custom-component-solution.

Siguientes pasos next-steps

AEM SPA Ampliar un componente principal: aprenda a ampliar un componente principal existente para utilizarlo con el Editor de. AEM SPA Comprender cómo añadir propiedades y contenido a un componente existente es una técnica potente para ampliar las capacidades de una implementación de Editor de segmentos de tiempo de ejecución de la aplicación de un editor de segmentos de tiempo de ejecución de la aplicación de un editor de tiempo de ejecución de la.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4