API di WordPress Gutenberg Block estensione dei blocchi

Bentornati alla nostra serie sulla creazione di blocchi personalizzati con l'API di WordPress Gutenberg Block. Questo tutorial si occupa di estendere il blocco di immagini casuali che abbiamo creato nel post precedente. Siamo arrivati ​​ad aggiungere un controllo a discesa per selezionare una categoria di immagini. Continueremo con questo aggiungendo ulteriori opzioni di blocco per consentire ulteriori personalizzazioni.

Nello specifico, vedremo come aggiungere impostazioni di blocco in varie parti dell'editor. Esatto, non sei solo limitato ad aggiungere i controlli di blocco direttamente sul blocco stesso!

Il finale my-custom-block il codice del plugin è disponibile per il download. Basta fare clic sul collegamento nella barra laterale a destra e scaricare il file zip sul computer e installarlo come faresti con qualsiasi altro plug-in di WordPress. Puoi anche trovare il codice sorgente nel nostro repository GitHub.

Lo sviluppo di Gutenberg sta procedendo a un buon ritmo e c'è stata una nuova versione significativa dall'ultima esercitazione. La versione di Gutenberg usata in questo tutorial è stata aggiornata alla 3.0.1, e alcune delle interfacce utente dell'editor possono apparire leggermente diverse dagli screenshot mostrati nei precedenti tutorial di questa serie.

Estendiamo!

Il controllo a discesa aggiunto nel tutorial precedente si trovava all'interno dell'editor, direttamente sotto il markup per l'immagine casuale. Questo era conveniente, ma abbiamo anche altre scelte.

Possiamo anche aggiungere controlli di blocco a una barra degli strumenti a comparsa (che viene visualizzata quando viene selezionato un blocco) e un pannello di ispezione a blocchi.

Nello screenshot qui sopra, possiamo vedere i controlli della barra degli strumenti per il blocco paragrafo [1], così come i controlli associati nell'ispettore del pannello [3]. Posizione [2] mostra il controllo a discesa per il nostro blocco immagine casuale.

Potresti già pensare a quale posizione scegliere per le proprie impostazioni di blocco, ma non devi scegliere solo una di queste posizioni. Non si escludono a vicenda. Ad esempio, per il blocco di paragrafo (mostrato sopra), è possibile vedere che le impostazioni sono suddivise tra il pannello dell'ispettore di blocco e la barra degli strumenti. 

Inoltre, è perfettamente OK avere due controlli separati in diverse posizioni nell'editor che influenzano il stesso ambientazione. Potresti non volerlo fare troppo spesso, ma è utile sapere come implementarlo, quindi vedremo come farlo un po 'più avanti.

Impostazioni di blocco diretto

Iniziamo con il modo più semplice per aggiungere funzionalità al blocco, che è direttamente all'interno del blocco modificare funzione. Abbiamo già utilizzato questo approccio per aggiungere il controllo a discesa delle immagini casuali perché richiede pochissimi sforzi aggiuntivi.

Non andremo oltre ad aggiungere nuovi controlli al blocco stesso, ma possiamo modificare il comportamento del controllo a discesa per renderlo un po 'più intuitivo. Per renderlo il più vicino possibile al front-end, possiamo restringere l'elenco a meno che non sia selezionato il blocco.

Facciamo questo cambiamento ora. Se stai seguendo questo tutorial dall'ultima volta, apri /my-custom-block/src/random-image/index.js nel tuo editor preferito. Questo è il principale file JavaScript per il nostro blocco di immagini casuali.

Uno degli oggetti di scena passati a tutti i blocchi è è selezionato, che mantiene lo stato della visibilità del blocco. Possiamo usarlo per visualizzare in modo condizionale il controllo a discesa della categoria.

Innanzitutto, tira fuori è selezionato dal oggetti di scena oggetto e aggiungilo all'elenco delle costanti all'interno di modificare funzione. Questo è utile in modo che possiamo fare riferimento a un nome abbreviato (ad es. è selezionato piuttosto che props.isSelected).

const attributes: category, setAttributes, isSelected = props;

Successivamente, possiamo usare questa proprietà per determinare se il controllo a discesa debba essere visualizzato:

 è selezionato && ( 
)

Questo è un modo sintetico per testarlo è selezionato è vero, dal momento che non possiamo usare un JavaScript completo Se dichiarazione all'interno del codice JSX.

Assicurati di continuare a guardare i file per le modifiche in modo che qualsiasi codice sorgente di blocco (JSX, ES6 +, Sass, ecc.) Venga trasposto in JavaScript e CSS validi. Se al momento non stai guardando i file per le modifiche, apri una finestra della riga di comando all'interno di my-custom-block plug-in cartella principale e invio inizio di npm.

Apri l'editor Gutenberg e aggiungi il blocco immagine casuale. Questa volta, il controllo a discesa non è visibile se il blocco non è stato ancora fatto clic.

Ciò conferisce al blocco un aspetto molto più interattivo.

Controlli della barra degli strumenti

Se hai utilizzato uno dei blocchi Gutenberg principali (come il blocco di paragrafo), avrai familiarità con le impostazioni della barra degli strumenti. Non appena viene selezionato il blocco Paragrafo, viene visualizzata una barra degli strumenti a comparsa contenente i pulsanti per la formattazione del testo. Questo tipo di controllo è ottimo per le impostazioni di blocco che hanno uno stato di tipo on / off, ad esempio allineamento del testo o formattazione come grassetto o corsivo.

Useremo il controllo della barra degli strumenti di allineamento integrato per consentire il controllo della categoria di immagini a discesa (predefinito), destra o allineato al centro.

In primo luogo, abbiamo bisogno di tirare fuori il AlignmentToolBar e BlockControls componenti da wp.blocks. Questi ci permettono di mostrare i controlli di allineamento all'interno di una barra degli strumenti mobile sopra il nostro blocco quando è selezionato. Questi sono parte dei componenti principali che possiamo usare nei nostri blocchi.

const AlignmentToolbar, BlockControls, registerBlockType = wp.blocks;

Il BlockControls componente funge da contenitore della barra degli strumenti e AlignmentToolbar è posto all'interno.

Abbiamo ancora bisogno di collegare manualmente il comportamento della barra degli strumenti di allineamento, cosa che possiamo fare aggiungendo un nuovo categoryAlign attributo per memorizzare lo stato dell'allineamento del blocco (a sinistra, a destra o al centro).

Nostro attributi oggetto ora contiene due impostazioni.

attributes: category: tipo: 'string', default: 'nature', categoryAlign: tipo: 'string' default: "

L'impostazione predefinita per categoryAlign l'attributo è una stringa vuota, che comporterà l'assenza di allineamento applicato di default.

Per fare riferimento al nuovo attributo, possiamo estrapolare questo valore nella sua variabile costante nello stesso modo in cui lo abbiamo fatto per il menu a discesa categoria attributo.

const attributi: categoria, categoriaAlign, setAttributes, isSelected = props;

Tutto quello che dobbiamo fare ora è rilasciare i due nuovi componenti nel modificare funzione e configurare le proprietà.

  setAttributes (categoryAlign: valore) /> 

Come puoi vedere tutto quello che dovevamo fare era assegnare il valore attributo di Alignmenttoolbar a categoryAlign attributo e chiama il setAttributes funzione ogni volta che si fa clic su un nuovo pulsante della barra degli strumenti. Questa funzione a sua volta aggiorna il categoryAlign attributo e mantiene tutto sincronizzato.

Per applicare lo stile di allineamento del controllo a discesa, è necessario aggiungere una proprietà di stile all'elemento del modulo.

Nota che non abbiamo bisogno di questo controllo per influenzare qualsiasi cosa sul front-end, quindi non abbiamo bisogno di aggiungere alcun codice al blocco salvare funzione.

Aggiunta di un pannello delle impostazioni

Il pannello dell'ispettore di blocco offre un'ampia area per aggiungere controlli di blocco ed è un'ottima posizione per controlli più complessi.

Ci concentreremo sull'aggiunta di due controlli a discesa al pannello dell'ispettore. Il primo sarà un duplicato del controllo a discesa della categoria per selezionare il tipo di immagine casuale. Ciò dimostra come avere più di un controllo che aggiorna un attributo comune.

Quando un controllo viene aggiornato, anche quello corrispondente verrà aggiornato automaticamente! In pratica, però, di solito vuoi solo un controllo per impostazione.

Il secondo controllo a discesa ti consentirà di selezionare il filtro applicato all'immagine casuale. Il servizio web PlaceIMG supporta due tipi di filtro: scala di grigi e seppia e possiamo selezionarli semplicemente aggiungendo nero di seppia o in scala di grigi all'URL di richiesta HTTP. Se non specificiamo un filtro, verrà restituita un'immagine a colori standard.

Il codice per i due menu a discesa è abbastanza simile, quindi li aggiungeremo insieme.

Prima di tutto, definiamo i nuovi blocchi e componenti di cui abbiamo bisogno.

const AlignmentToolbar, BlockControls, registerBlockType, InspectorControls = wp.blocks; const PanelBody, PanelRow = wp.components; const Fragment = wp.element;

Qui, le nuove variabili sono InspectorControls, PanelBody, PanelRow, e Frammento, che sono tutti utilizzati per aiutare a creare l'interfaccia utente del pannello di controllo.

Il  componente è molto utile quando è necessario restituire più elementi di primo livello dal modificare o salvare funzioni ma non vogliono avvolgerle in un elemento che verrà emesso.

 non produrrà alcun markup sul front end e si comporta come un contenitore invisibile. È solo un modo conveniente per restituire più elementi di primo livello ed è un'alternativa al precedente metodo di restituzione di un array di elementi.

Abbiamo solo bisogno di aggiungere un nuovo attributo chiamato ImageFilter come l'esistente categoria l'attributo può essere riutilizzato.

attributes: category: type: 'string', default: 'nature', categoryAlign: tipo: 'string', default: ", imageFilter: tipo: 'string', default:"

Dentro il modificare funzione, dobbiamo aggiungere una nuova variabile con riferimenti al nuovo attributo.

const attributi: categoria, categoryAlign, imageFilter, setAttributes, isSelected = props;

Aggiungere un pannello di ispezione a blocchi è sorprendentemente facile. La struttura dei componenti che useremo è la seguente:

  ...  ...    ...  ...   

Il  componente funge da contenitore per l'ispettore dei blocchi e  definisce singole sezioni pieghevoli. All'interno di ciascuno di questi, è possibile avere un numero qualsiasi di  componenti, che a loro volta contengono i tuoi controlli.

Abbiamo già definito il markup per il controllo a discesa della categoria che possiamo riutilizzare. Per fare ciò, estrapolarlo in una funzione separata:

function showForm () return (    ); 

Questa funzione può quindi essere referenziata ogni volta che è necessario il controllo a discesa della categoria renderizzato. Il markup per il pannello di controllo blocco deve essere al di fuori del markup del blocco, in modo che possiamo usare il  componente per avvolgerli entrambi prima che vengano restituiti.

Successivamente, è necessario aggiungere i componenti dell'ispettore blocco per i menu a discesa Categoria e Filtro immagine. Questi devono essere definiti all'interno  componenti, e dobbiamo anche definire una nuova funzione di callback per gestire il onChange evento. Questo è molto simile al codice a discesa della categoria dell'ultimo tutorial, quindi dovrebbe esserti già familiare.

Mettendo tutto questo insieme, il modificare Il metodo di ritorno la funzione ora è simile a questa:

ritorno (      showForm ()    
setAttributes (categoryAlign: valore) /> isSelected && (showForm ())
);

E il setFilter la callback è definita come:

function setFilter (event) const selected = event.target.querySelector ('# image-filter option: checked'); setAttributes (imageFilter: selected.value); event.preventDefault (); 

Per ottenere l'immagine filtrata, è necessario aggiornare il RandomImage componente per accettare il nuovo valore del filtro ogni volta che viene modificato il menu a discesa.

function RandomImage (category, filter) if (filter) filter = '/' + filter;  const src = 'https://placeimg.com/320/220/' + categoria + filtro; ritorno category; 

Si noti come stiamo usando questa nuova proprietà del componente in modificare metodo per inviare il nuovo valore del filtro a PlaceIMG.

Tutte queste modifiche al codice determinano la creazione di un nuovo pannello di controllo blocco con due controlli a discesa per modificare la categoria e il filtro dell'immagine.

Per far funzionare la nuova proprietà del filtro anche per il front-end, dobbiamo solo aggiornare il salvare metodo. 

save: function (props) const attributes: category, imageFilter = oggetti di scena; ritorno ( 
);


Conclusione

In questo post abbiamo trattato tre diversi metodi per aggiungere impostazioni a un blocco:

  • barra degli strumenti a comparsa
  • direttamente sul blocco stesso
  • pannello dell'ispettore del blocco

Abbiamo aggiunto solo le impostazioni di base per ciascun blocco, ma abbiamo potuto facilmente fare ciò aggiungendo il supporto per più immagini, aggiungendo didascalie di immagini e controllando stili come il colore del bordo, il raggio o la dimensione dell'immagine casuale.

Sono sicuro che ormai avrai probabilmente qualche idea per creare i tuoi blocchi personalizzati. Mi piacerebbe sapere che tipo di blocchi potresti trovare utile nei tuoi progetti!

Abbiamo appena iniziato con Gutenberg qui su Envato Tuts +, quindi se ci sono particolari aspetti dello sviluppo di blocchi di Gutenberg che vorresti vedere trattati in modo più approfondito nei tutorial futuri, ti preghiamo di comunicarcelo tramite i commenti.