Crea un nuovo blocco
Creato per:
- Principiante
- Sviluppatore
In questo capitolo viene descritto il processo di creazione di un nuovo blocco teaser modificabile per un sito Web Edge Delivery Services tramite Universal Editor.
Il blocco, denominato teaser
, presenta i seguenti elementi:
-
Immagine: immagine visivamente coinvolgente.
-
Contenuto testo:
- Titolo: titolo convincente da evidenziare.
- Corpo del testo: contenuto descrittivo che fornisce contesto o dettagli, inclusi termini e condizioni facoltativi.
- Pulsante di invito all'azione (CTA): collegamento progettato per richiedere l'interazione dell'utente e guidarlo verso un coinvolgimento maggiore.
Il contenuto del blocco teaser
può essere modificato nell'editor universale per garantirne la facilità d'uso e di riutilizzo in tutto il sito Web.
Nota che il blocco teaser
è simile al blocco hero
della boilerplate; pertanto il blocco teaser
è inteso solo come semplice esempio per illustrare i concetti di sviluppo.
Crea un nuovo ramo Git
Per mantenere un flusso di lavoro pulito e organizzato, crea un nuovo ramo per ogni attività di sviluppo specifica. Questo consente di evitare problemi durante la distribuzione di codice incompleto o non testato in produzione.
- Inizia dal ramo principale: l'utilizzo del codice di produzione più aggiornato garantisce una solida base.
- Recupera modifiche remote: il recupero degli aggiornamenti più recenti da GitHub assicura che il codice più recente sia disponibile prima di iniziare lo sviluppo.
- Esempio: dopo aver unito le modifiche dal ramo
wknd-styles
inmain
, recupera gli aggiornamenti più recenti.
- Esempio: dopo aver unito le modifiche dal ramo
- Crea un nuovo ramo:
# ~/Code/aem-wknd-eds-ue
$ git fetch origin
$ git checkout -b teaser origin/main
Una volta creato il ramo teaser
, puoi iniziare a sviluppare il blocco teaser.
Blocca cartella
Creare una nuova cartella denominata teaser
nella directory blocks
del progetto. Questa cartella contiene i file JSON, CSS e JavaScript del blocco, organizzando i file del blocco in una posizione:
# ~/Code/aem-wknd-eds-ue
/blocks/teaser
Il nome della cartella del blocco funge da ID del blocco e viene utilizzato per fare riferimento al blocco durante il suo sviluppo.
Blocca JSON
Il JSON del blocco definisce tre aspetti chiave del blocco:
- Definizione: registra il blocco come componente modificabile nell'editor universale, collegandolo a un modello di blocco e facoltativamente a un filtro.
- Modello: specifica i campi di creazione del blocco e il modo in cui vengono visualizzati come Edge Delivery Services HTML semantico.
- Filtro: configura le regole di filtro per limitare a quali contenitori è possibile aggiungere il blocco tramite l'editor universale. La maggior parte dei blocchi non sono contenitori, ma i loro ID vengono aggiunti ai filtri di altri blocchi contenitore.
Creare un nuovo file in /blocks/teaser/_teaser.json
con la seguente struttura iniziale, nell'ordine esatto. Se le chiavi non sono nell'ordine corretto, potrebbero non essere create correttamente.
/blocks/teaser/_teaser.json
{
"definitions": [],
"models": [],
"filters": []
}
Modello a blocchi
Il modello di blocco è una parte critica della configurazione del blocco, in quanto definisce:
-
L’esperienza di authoring definendo i campi disponibili per la modifica.
-
Come vengono riprodotti i valori del campo in Edge Delivery Services HTML.
Ai modelli viene assegnato un id
che corrisponde alla definizione del blocco 🔗 e include un array fields
per specificare i campi modificabili.
Ogni campo nell'array fields
ha un oggetto JSON che include le seguenti proprietà obbligatorie:
component
name
label
Per un elenco completo delle proprietà, incluse quelle facoltative, consulta la documentazione sui campi dell'editor universale.
Blocca progettazione
Il blocco teaser include i seguenti elementi modificabili:
-
Immagine: rappresenta il contenuto visivo del teaser.
-
Contenuto testo: include il titolo, il corpo del testo e il pulsante di invito all'azione e si trova in un rettangolo bianco.
- Il titolo e il corpo del testo possono essere creati tramite lo stesso editor Rich Text.
- CTA può essere creato tramite un campo
text
per label eaem-content
per link.
Il design del blocco teaser è suddiviso in questi due componenti logici (contenuto immagine e testo), garantendo un’esperienza di authoring strutturata e intuitiva per gli utenti.
Blocca campi
Definisci i campi necessari per il blocco: immagine, testo alternativo immagine, testo, etichetta CTA e collegamento CTA.
Questa scheda illustra il modo corretto per modellare il blocco teaser.
Il teaser è costituito da due aree logiche: immagine e testo. Per semplificare il codice necessario per visualizzare Edge Delivery Services HTML come esperienza web desiderata, il modello a blocchi deve riflettere questa struttura.
- Raggruppa image e image alt text utilizzando field collapse.
- Raggruppa i campi di contenuto di testo utilizzando raggruppamento di elementi e compressione del campo per CTA.
Se non hai familiarità con compressione campo, raggruppamento elementi o inferenza tipo, prima di continuare controlla la documentazione collegata, in quanto sono essenziali per creare un modello di blocco ben strutturato.
Nell’esempio seguente:
- L'inferenza dei tipi viene utilizzata per creare automaticamente un elemento HTML
<img>
dal campoimage
. La compressione del campo viene utilizzata con i campiimage
eimageAlt
per creare un elemento HTML<img>
. L'attributosrc
è impostato sul valore del campoimage
, mentre l'attributoalt
è impostato sul valore del campoimageAlt
. textContent
è un nome di gruppo utilizzato per categorizzare i campi. Deve essere semantico, ma può essere qualsiasi cosa specifica di questo blocco. Questo comunica all'Editor universale di eseguire il rendering di tutti i campi con questo prefisso all'interno dello stesso elemento<div>
nell'output finale di HTML.- La compressione del campo viene applicata anche nel gruppo
textContent
per l'invito all'azione (CTA). Il CTA viene creato come<a>
tramite inferenza di tipo. Il campocta
viene utilizzato per impostare l'attributohref
dell'elemento<a>
e il campoctaText
fornisce il contenuto di testo per il collegamento all'interno dei tag<a ...>
.
/blocks/teaser/_teaser.json
{
"definitions": [],
"models": [
{
"id": "teaser",
"fields": [
{
"component": "reference",
"valueType": "string",
"name": "image",
"label": "Image",
"multi": false
},
{
"component": "text",
"valueType": "string",
"name": "imageAlt",
"label": "Image alt text",
"required": true
},
{
"component": "richtext",
"name": "textContent_text",
"label": "Text",
"valueType": "string",
"required": true
},
{
"component": "aem-content",
"name": "textContent_cta",
"label": "CTA",
"valueType": "string"
},
{
"component": "text",
"name": "textContent_ctaText",
"label": "CTA label",
"valueType": "string"
}
]
}
],
"filters": []
}
Questo modello definisce gli input di authoring nell’Editor universale per il blocco.
Il HTML Edge Delivery Services risultante per questo blocco inserisce l'immagine nel primo div e i campi del gruppo di elementi textContent
nel secondo div.
<div>
<div>
<!-- This div contains the field-collapsed image fields -->
<picture>
...
<source .../>
<img src="..." alt="The authored alt text"/>
</picture>
</div>
<div>
<!-- This div, via element grouping contains the textContent fields -->
<h2>The authored title</h2>
<p>The authored body text</p>
<a href="/authored/cta/link">The authored CTA label</a>
</div>
</div>
Come dimostrato nel prossimo capitolo, questa struttura HTML semplifica lo stile del blocco come unità coesiva.
Per capire le conseguenze del mancato utilizzo della compressione dei campi e del raggruppamento di elementi, vedi la scheda Nel modo sbagliato qui sopra.
Questa scheda illustra un modo non ottimale per modellare il blocco teaser ed è solo una giustapposizione al modo giusto.
Definire ogni campo come campo autonomo nel modello di blocco senza utilizzare compressione del campo e raggruppamento di elementi può sembrare interessante. Tuttavia, questo scostamento complica la creazione del blocco come un'unità coesiva.
Ad esempio, il modello teaser potrebbe essere definito senza compressione di campo o raggruppamento di elementi come segue:
/blocks/teaser/_teaser.json
{
"definitions": [],
"models": [
{
"id": "teaser",
"fields": [
{
"component": "reference",
"valueType": "string",
"name": "image",
"label": "Image",
"multi": false
},
{
"component": "text",
"valueType": "string",
"name": "alt",
"label": "Image alt text",
"required": true
},
{
"component": "richtext",
"name": "text",
"label": "Text",
"valueType": "string",
"required": true
},
{
"component": "aem-content",
"name": "link",
"label": "CTA",
"valueType": "string"
},
{
"component": "text",
"name": "label",
"label": "CTA label",
"valueType": "string"
}
]
}
],
"filters": []
}
Il HTML Edge Delivery Services per il blocco esegue il rendering del valore di ogni campo in un div
separato, complicando la comprensione del contenuto, l'applicazione dello stile e le regolazioni della struttura del HTML per ottenere la progettazione desiderata.
<div>
<div>
<!-- This div contains the field-collapsed image -->
<picture>
...
<source .../>
<img src="/authored/image/reference"/>
</picture>
</div>
<div>
<p>The authored alt text</p>
</div>
<div>
<h2>The authored title</h2>
<p>The authored body text</p>
</div>
<div>
<a href="/authored/cta/link">/authored/cta/link</a>
</div>
<div>
The authored CTA label
</div>
</div>
Ogni campo è isolato nel proprio div
, rendendo difficile formattare l'immagine e il contenuto di testo come unità coesive. È possibile ottenere la progettazione desiderata con impegno e creatività, ma utilizzare il raggruppamento di elementi per raggruppare i campi di contenuto di testo e la compressione dei campi per aggiungere valori creati come attributi di elemento è più semplice, semplice e corretto dal punto di vista semantico.
Consulta la scheda Modalità di scrittura per informazioni su come modellare meglio il blocco teaser.
Definizione blocco
La definizione del blocco registra il blocco in Universal Editor. Ecco un raggruppamento delle proprietà JSON utilizzate nella definizione del blocco:
definition.title
definition.id
filters
.definition.plugins.xwalk.page.resourceType
core/franklin/components/block/v#/block
.definition.plugins.xwalk.page.template.name
definition.plugins.xwalk.page.template.model
model
, che controlla i campi di authoring visualizzati per il blocco nell'editor universale. Il valore qui deve corrispondere a un valore model.id
.definition.plugins.xwalk.page.template.classes
class
dell'elemento HTML del blocco. Questo consente varianti dello stesso blocco. Il valore classes
può essere reso modificabile aggiungendo un campo di classi al modello del blocco.Di seguito è riportato un esempio di JSON per la definizione del blocco:
/blocks/teaser/_teaser.json
{
"definitions": [{
"title": "Teaser",
"id": "teaser",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/franklin/components/block/v1/block",
"template": {
"name": "Teaser",
"model": "teaser",
"textContent_text": "<h2>Enter a title</h2><p>...and body text here!</p>",
"textContent_cta": "/",
"textContent_ctaText": "Click me!"
}
}
}
}
}],
"models": [... from previous section ...],
"filters": []
}
In questo esempio:
- Il blocco è denominato "Teaser" e utilizza il modello
teaser
che determina i campi disponibili per la modifica nell'editor universale. - Il blocco include il contenuto predefinito per il campo
textContent_text
, che è un'area Rich Text per il titolo e il corpo del testo, etextContent_cta
etextContent_ctaText
per il collegamento e l'etichetta CTA (invito all'azione). I nomi dei campi del modello contenenti il contenuto iniziale corrispondono ai nomi dei campi definiti nella matrice dei campi del modello di contenuto 🔗;
Questa struttura garantisce che il blocco sia configurato nell’Editor universale con i campi, il modello di contenuto e il tipo di risorsa appropriati per il rendering.
Blocca filtri
L'array filters
del blocco definisce, per blocchi contenitore, quali altri blocchi possono essere aggiunti al contenitore. I filtri definiscono un elenco di ID di blocco (model.id
) che possono essere aggiunti al contenitore.
/blocks/teaser/_teaser.json
{
"definitions": [... populated from previous section ...],
"models": [... populated from previous section ...],
"filters": []
}
Il componente teaser non è un blocco contenitore, pertanto non è possibile aggiungervi altri blocchi. Di conseguenza, il relativo array filters
è lasciato vuoto. Aggiungi invece l’ID del teaser all’elenco dei filtri del blocco di sezione, in modo che possa essere aggiunto a una sezione.
I blocchi forniti da Adobe, ad esempio il blocco di sezione, memorizzano i filtri nella cartella models
del progetto. Per modificare, individua il file JSON per il blocco fornito da Adobe (ad esempio, /models/_section.json
) e aggiungi l'ID del teaser (teaser
) all'elenco dei filtri. La configurazione segnala all’Editor universale che il componente teaser può essere aggiunto al blocco del contenitore sezione.
/models/_section.json
{
"definitions": [],
"models": [],
"filters": [
{
"id": "section",
"components": [
"text",
"image",
"button",
"title",
"hero",
"cards",
"columns",
"fragment",
"teaser"
]
}
]
}
L'ID di definizione del blocco del teaser teaser
è stato aggiunto all'array components
.
Illustra i file JSON
Assicurati di collegare frequentemente le modifiche per assicurarti che siano pulite e coerenti. La colorazione consente di risolvere i problemi in anticipo e riduce il tempo di sviluppo complessivo. Il comando npm run lint:js
collega anche i file JSON e rileva eventuali errori di sintassi.
# ~/Code/aem-wknd-eds-ue
$ npm run lint:js
Generare il progetto JSON
Dopo aver configurato i file JSON di blocco (ad esempio, blocks/teaser/_teaser.json
, models/_section.json
), vengono compilati automaticamente nei file component-models.json
, component-definitions.json
e component-filters.json
del progetto. Questa compilazione viene gestita automaticamente da un hook di pre-commit Husky incluso nel modello di progetto AEM Boilerplate XWalk.
Le build possono inoltre essere attivate manualmente o a livello di programmazione utilizzando gli script NPM build JSON del progetto.
Distribuire il blocco JSON
Per rendere il blocco disponibile nell'editor universale, è necessario eseguire il commit del progetto e inviarlo al ramo di un archivio GitHub, in questo caso il ramo teaser
.
Il nome del ramo utilizzato da Universal Editor può essere regolato, per utente, tramite l’URL di Universal Editor.
# ~/Code/aem-wknd-eds-ue
$ git add .
$ git commit -m "Add teaser block JSON files so it is available in Universal Editor"
# JSON files are compiled automatically and added to the commit via a husky precommit hook
$ git push origin teaser
Quando si apre Universal Editor con il parametro di query ?ref=teaser
, il nuovo blocco teaser
viene visualizzato nella tavolozza dei blocchi. Il blocco non ha uno stile; esegue il rendering dei campi del blocco come HTML semantico, formattati solo tramite il CSS globale.