Componenti compositi negli SPA composite-components-in-spas

I componenti compositi utilizzano la natura modulare dei componenti di AEM combinando più componenti di base in un singolo componente. Un caso d’uso comune di componente composito è il componente scheda, costituito da una combinazione dei componenti immagine e testo.

Quando i componenti compositi vengono implementati correttamente nel framework dell’Editor applicazioni a pagina singola di AEM, gli autori dei contenuti possono trascinare e rilasciare tali componenti come farebbero con qualsiasi altro componente, ma hanno comunque la possibilità di modificare singolarmente ogni componente che costituisce il componente composito.

Questo articolo illustra come aggiungere un componente composito all’applicazione a pagina singola per lavorare senza problemi con l’Editor SPA di AEM.

IMPORTANT
L’editor SPA è stato dichiarato obsoleto per i nuovi progetti. Continua a essere supportato da Adobe per i progetti esistenti, ma non dovrebbe essere utilizzato per i nuovi progetti. Gli editor preferiti per la gestione dei contenuti headless in AEM sono ora i seguenti:

Caso d’uso use-case

Questo articolo utilizza il componente tipico della scheda come caso d’uso di esempio. Le schede sono un elemento dell’interfaccia utente comune per molte esperienze digitali e sono in genere costituite da un’immagine e dal testo o dalla didascalia associati. L’autore desidera poter trascinare e rilasciare l’intera scheda, ma può modificare singolarmente l’immagine della scheda e personalizzare il testo associato.

Prerequisiti prerequisites

I seguenti modelli per il supporto dei casi di utilizzo dei componenti compositi richiedono i seguenti prerequisiti.

Aggiunta di componenti compositi a un’applicazione a pagina singola adding-composite-components

Esistono tre modelli diversi per implementare il componente composito a seconda dell’implementazione dell’applicazione a pagina singola in AEM.

Le sezioni seguenti forniscono esempi di implementazione di ogni caso utilizzando il componente scheda come esempio.

Il componente non esiste nel progetto AEM. component-does-not-exist

Inizia creando i componenti che costituiranno il componente composito, ovvero i componenti per l’immagine e il relativo testo.

  1. Crea il componente testo nel progetto AEM.

  2. Aggiungi il resourceType corrispondente dal progetto nel nodo editConfig del componente.

    code language-text
     resourceType: 'wknd-spa/components/text'
    
  3. Utilizza l'helper withMappable per abilitare le modifiche per il componente.

    code language-text
    export const AEMText = withMappable(Text, TextEditConfig);
    

Il componente testo sarà simile al seguente.

import React from 'react';
import { withMappable } from '@adobe/aem-react-editable-components';

export const TextEditConfig = {
  emptyLabel: 'Text',
  isEmpty: function(props) {
    return !props || !props.text || props.text.trim().length < 1;
  },
  resourceType: 'wknd-spa/components/text'
};

export const Text = ({ cqPath, richText, text }) => {
  const richTextContent = () => (
    <div className="aem_text"
      id={cqPath.substr(cqPath.lastIndexOf('/') + 1)}
      data-rte-editelement
      dangerouslySetInnerHTML={{__html: text}} />
  );
  return richText ? richTextContent() : (
     <div className="aem_text">{text}</div>
  );
};

export const AEMText = withMappable(Text, TextEditConfig);

Se si crea un componente immagine in modo simile, è possibile combinarlo con il componente AEMText in un nuovo componente scheda, utilizzando i componenti immagine e testo come elementi figlio.

import React from 'react';
import { AEMText } from './AEMText';
import { AEMImage } from './AEMImage';

export const AEMCard = ({ pagePath, itemPath}) => (
  <div>
    <AEMText
       pagePath={pagePath}
       itemPath={`text`} />
    <AEMImage
       pagePath={pagePath}
       itemPath={`image`} />
   </div>
);

Questo componente composito risultante può ora essere posizionato ovunque nell'app e aggiungerà segnaposto per un componente testo e immagine nell'editor di applicazioni a pagina singola. Nell’esempio seguente, il componente scheda viene aggiunto al componente Home sotto il titolo.

function Home() {
  return (
    <div className="Home">
      <h2>Current Adventures</h2>
      <AEMCard
        pagePath='/content/wknd-spa/home' />
    </div>
  );
}

Nell’editor verrà visualizzato un segnaposto vuoto per un testo e un’immagine. Quando si immettono valori per questi elementi utilizzando l'editor, questi vengono memorizzati nel percorso di pagina specificato, ovvero /content/wknd-spa/home a livello principale con i nomi specificati in itemPath.

Componente scheda composita nelleditor

Il componente esiste nel progetto AEM, ma il contenuto richiesto no. content-does-not-exist

In questo caso, il componente scheda è già stato creato nel progetto AEM contenente i nodi titolo e immagine. I nodi secondari (testo e immagine) dispongono dei tipi di risorse corrispondenti.

Struttura del nodo del componente scheda

Puoi quindi aggiungerlo all’applicazione a pagina singola e recuperarne il contenuto.

  1. Crea un componente corrispondente nell’applicazione a pagina singola per questo. Assicurati che i componenti secondari siano mappati sui corrispondenti tipi di risorse AEM all’interno del progetto SPA. In questo esempio vengono utilizzati gli stessi componenti AEMText e AEMImage descritti ​ nel caso precedente.

    code language-javascript
    import React from 'react';
    import { Container, withMappable, MapTo } from '@adobe/aem-react-editable-components';
    import { Text, TextEditConfig } from './AEMText';
    import Image, { ImageEditConfig } from './AEMImage';
    
    export const AEMCard = withMappable(Container, {
      resourceType: 'wknd-spa/components/imagecard'
    });
    
    MapTo('wknd-spa/components/text')(Text, TextEditConfig);
    MapTo('wknd-spa/components/image')(Image, ImageEditConfig);
    
  2. Poiché non è presente alcun contenuto per il componente imagecard, aggiungi la scheda alla pagina. Includi nell’applicazione a pagina singola il contenitore esistente di AEM.

    • Se nel progetto AEM è già presente un contenitore, possiamo includerlo nell’applicazione a pagina singola e aggiungere invece il componente al contenitore da AEM.
    • Assicurati che il componente scheda sia mappato sul tipo di risorsa corrispondente nell’applicazione a pagina singola.
    code language-javascript
    <ResponsiveGrid
     pagePath='/content/wknd-spa/home'
     itemPath='root/responsivegrid' />
    
  3. Aggiungi il componente wknd-spa/components/imagecard creato ai componenti consentiti per il componente contenitore ​ nel modello di pagina.

Ora il componente imagecard può essere aggiunto direttamente al contenitore nell'editor di AEM.

Scheda composita nelleditor

Il componente e il relativo contenuto richiesto sono entrambi presenti nel progetto AEM. both-exist

Se il contenuto esiste in AEM, può essere incluso direttamente nell’applicazione a pagina singola fornendo il percorso del contenuto.

<AEMCard
    pagePath='/content/wknd-spa/home'
    itemPath='root/responsivegrid/imagecard' />

Percorso composito nella struttura del nodo

Il componente AEMCard corrisponde al componente definito ​ nel caso d'uso precedente. Qui il contenuto definito nella posizione precedente nel progetto AEM è incluso nell'applicazione a pagina singola.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2