WordPress Gutenberg Block API Extinderea blocurilor

Bine ați venit în seria noastră despre crearea blocurilor personalizate cu API-ul WordPress Gutenberg Block. Acest tutorial vizează extinderea blocului de imagine aleatoriu pe care l-am creat în postul anterior. Avem până la adăugarea unui control derulant pentru a selecta o categorie de imagini. Vom continua acest lucru adăugând mai multe opțiuni de bloc pentru a permite personalizarea ulterioară.

Mai precis, vom vedea cum să adăugăm setări de bloc în diferite părți ale editorului. Asta-i drept, nu ești doar limitat la adăugarea controalelor bloc direct pe blocul propriu-zis!

Finala mi-personalizat-bloc plugin-ul este disponibil pentru descărcare. Doar faceți clic pe link-ul de pe bara laterală spre dreapta și descărcați fișierul zip pe computer și instalați-l ca pe orice alt plugin WordPress. De asemenea, puteți găsi codul sursă în repo GitHub.

Dezvoltarea lui Gutenberg se desfasoara la un ritm echitabil si a fost lansata o noua lansare semnificativa de la publicarea ultimului tutorial. Versiunea Gutenberg utilizată în acest tutorial a fost actualizată la versiunea 3.0.1, iar unele dintre UI-ul editorului pot părea ușor diferite de capturile de ecran afișate în tutorialele anterioare din această serie.

Să ne extindem!

Controlul derulant pe care l-am adăugat în tutorialul anterior a fost localizat în interiorul editorului, direct sub marca pentru imaginea aleatoare. Acest lucru a fost convenabil, dar avem și alte opțiuni.

De asemenea, putem adăuga comenzi bloc într-o bară de instrumente pop-up (care apare atunci când este selectat un bloc) și un panou de inspecție bloc.

În captura de ecran de mai sus, putem vedea comenzile din bara de instrumente pentru blocul de paragrafe [1], precum și comenzile asociate în inspectorul de panou [3]. Locația [2] arată comanda derulantă pentru blocul nostru de imagini aleatoriu.

S-ar putea să vă gândiți deja la locația pe care o alegeți pentru propriile setări de bloc, dar nu trebuie să alegeți una dintre aceste locații. Ele nu se exclud reciproc. De exemplu, pentru blocul de paragrafe (prezentat mai sus), puteți vedea că setările sunt împărțite între panoul de inspecție bloc și bara de instrumente. 

În plus, este perfect OK să aveți două comenzi separate în locații diferite din editor care afectează la fel setare. S-ar putea să nu vreți să faceți acest lucru prea des, dar este util să știți cum să îl implementați, așa că vom vedea cum să facem acest lucru puțin mai târziu.

Setări pentru blocarea directă

Să începem cu cea mai ușoară cale de a adăuga funcționalitate blocului tău, care este direct în interiorul blocului Editați | × funcţie. Am folosit deja această abordare pentru a adăuga controlul drop-down al imaginii aleatorii deoarece necesită foarte puțin efort suplimentar.

Nu vom trece peste adăugarea de noi controale la blocul propriu-zis, dar putem schimba comportamentul controlului drop-down pentru a fi puțin mai intuitiv. Pentru ca aceasta să se facă cât mai aproape de capătul din față, putem restricționa afișarea drop-down-ului dacă nu este selectat blocul.

Să facem această schimbare acum. Dacă urmăriți acest tutorial din ultima perioadă, deschideți-l /my-custom-block/src/random-image/index.js în editorul dvs. preferat. Acesta este fișierul JavaScript principal pentru blocul nostru de imagini aleatorii.

Unul dintre proiectilele trecute la toate blocurile este este selectat, care deține statutul de vizibilitate a blocului. Putem folosi acest lucru pentru a afișa în mod condiționat controlul drop-down categorie.

În primul rând, scoateți-vă este selectat de la recuzită obiect și adăugați-l la lista de constante din interiorul Editați | × funcţie. Acest lucru este util pentru a putea să îl referim printr-un nume scurt (adică. este selectat Decat props.isSelected).

const atribute: category, setAttributes, isSelected = recuzită;

Apoi, putem folosi această proprietate pentru a determina dacă trebuie afișat controlul drop-down:

 este selectat && ( 
)

Aceasta este o modalitate sustinatoare de a testa asta este selectat este adevărat, deoarece nu putem folosi JavaScript complet dacă declarație în interiorul codului JSX.

Asigurați-vă că mai vizionați fișierele pentru modificări, astfel încât orice cod sursă bloc (JSX, ES6 +, Sass etc.) să fie transpus în JavaScript și CSS valid. Dacă în prezent nu urmăriți fișierele pentru modificări, deschideți o fereastră de linie de comandă în interiorul mi-personalizat-bloc plugin root și introduceți npm start.

Deschide editorul Gutenberg și adaugă blocul de imagine aleatoriu. De data aceasta, controlul drop-down nu este vizibil dacă blocul nu a fost încă apăsat.

Acest lucru îi conferă blocului un aspect mult mai interactiv.

Bare de instrumente

Dacă ați folosit oricare dintre blocurile de bază Gutenberg (cum ar fi blocul de paragrafe), atunci veți cunoaște setările barei de instrumente. De îndată ce este selectat blocul Paragraf, apare o bară de instrumente pop-up conținând butoane pentru formatarea textului. Acest tip de control este excelent pentru setările de bloc care au o stare tip on / off - de exemplu, alinierea textului sau formatarea, cum ar fi bold sau italic.

Vom folosi controlul bara de instrumente pentru alinierea încorporată pentru a permite alinierea categoriei drop-down categorie de imagini (implicit), dreapta sau centru.

În primul rând, trebuie să scoatem AlignmentToolBar și BlockControls componente de la wp.blocks. Acestea ne permit să afișăm comenzi de aliniere în interiorul unei bare de instrumente care plutește deasupra blocului nostru atunci când este selectat. Acestea fac parte din componentele de bază pe care le putem folosi în blocurile proprii.

const AlignmentToolbar, BlockControls, registerBlockType = wp.blocks;

BlockControls componenta acționează ca containerul bara de instrumente și AlignmentToolbar este plasat în interior.

Trebuie încă să conectăm manual bara de instrumente de aliniere, pe care o putem face adăugând un nou categoryAlign atribut pentru a stoca starea de aliniere bloc (stânga, dreapta sau centru).

Al nostru atribute Obiectul conține acum două setări.

atribute: category: type: 'string', implicit: 'nature', categoryAlign: type: 'string' implicit: "

Implicit pentru categoryAlign atributul este un șir gol, ceea ce nu va duce la aplicarea alinierii în mod implicit.

Pentru a face referire la noul atribut, putem extrage această valoare în propria ei variabilă constantă, așa cum am făcut pentru drop-down categorie atribut.

const atribute: category, categoryAlign, setAttributes, isSelected = recuzită;

Tot ce trebuie să facem acum este să renunțăm la cele două componente noi Editați | × funcția și configurați proprietățile.

  setAttributes (categoryAlign: value) /> 

După cum puteți vedea tot ce trebuia să faceți este să alocați valoare atributul lui Alignmenttoolbar la categoryAlign atribuiți și apelați setAttributes funcția de fiecare dată când a fost apăsat un nou buton al barei de instrumente. Această funcție la rândul său actualizează categoryAlign atribuie și păstrează totul în sincronizare.

Pentru a aplica stilul de aliniere al controlului drop-down, trebuie să adăugăm o proprietate de stil elementului nostru de formă.

Rețineți că nu avem nevoie de acest control pentru a afecta nimic în partea frontală, deci nu am nevoie să adăugăm nici un cod la blocul Salvați funcţie.

Adăugarea unui panou de setări

Panoul de inspecție bloc vă oferă o zonă extinsă pentru a adăuga controale bloc și este o locație excelentă pentru controale mai complexe.

Ne vom concentra pe adăugarea a două comenzi de tip drop-down către panoul de inspecție. Primul va fi un duplicat al controlului drop-down categorie pentru a selecta tipul de imagine aleatorie. Acest lucru demonstrează cum să aveți mai mult de un control actualizând un atribut comun.

Când un control este actualizat, cel corespunzător va fi automat actualizat și! În practică, totuși, de obicei, veți dori doar un singur control pentru fiecare setare.

Al doilea control drop-down vă va permite să selectați filtrul aplicat imaginii aleatoare. Serviciul web PlaceIMG acceptă două tipuri de filtre - tonuri de gri și sepia - și putem selecta între ele prin simpla adăugare sepia sau alb-negru la adresa URL a solicitării HTTP. Dacă nu specificăm un filtru, atunci o imagine colorată standard va fi returnată.

Codul pentru cele două drop-down-uri este destul de similar, așa că le vom adăuga împreună.

Mai întâi de toate, să definim noile blocuri și componente de care avem nevoie.

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

Aici variabilele noi sunt InspectorControls, PanelBody, PanelRow, și Fragment, care sunt toate utilizate pentru a ajuta la crearea panoului de inspecție UI.

 componentă este foarte utilă atunci când trebuie să reveniți la mai multe elemente de nivel superior din Editați | × sau Salvați dar nu doriți să le înfășurați într-un element care va fi afișat.

 nu va scoate nicio marcaj deloc pe capătul din față și va acționa ca un container invizibil. Este doar o modalitate convenabilă de a returna mai multe elemente de nivel superior și este o alternativă la metoda anterioară de returnare a unui șir de elemente.

Trebuie doar să adăugăm un atribut nou numit imagefilter ca existente categorie atributul poate fi refolosit.

atribute: category: type: 'string', implicit: 'nature', categoryAlign: type: 'string', implicit: ', imageFilter: type: string;

În interiorul Editați | × , trebuie să adăugăm o nouă variabilă cu referințe la noul atribut.

const atribute: category, categoryAlign, imageFilter, setAttributes, isSelected = recuzită;

Adăugarea unui panou de inspecție bloc este surprinzător de simplă. Structura componentei pe care o vom folosi este după cum urmează:

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

 - componenta acționează ca container pentru inspectorul de bloc și -  definește secțiuni individuale pliabile. În interiorul fiecăruia, puteți avea orice număr  componente, care la rândul lor conțin comenzile.

Am definit deja markup pentru controlul drop-down al categoriei, pe care îl putem reutiliza. Pentru a face acest lucru, eliminați-l într-o funcție separată:

funcția showForm () return (    ); 

Această funcție poate fi apoi menționată ori de câte ori avem nevoie de controlul categoriei drop-down redate. Marcajul panoului inspectorului de bloc trebuie să fie în afara marcării blocului, astfel încât să putem folosi  pentru a le înfășura pe amândouă înainte de a fi returnate.

Apoi, trebuie să adăugăm componentele inspectorului bloc pentru meniurile pentru categorii și filtru de imagine. Acestea trebuie definite în interior  componente și, de asemenea, trebuie să definim o nouă funcție de apel invers pentru a face față cu privire la schimbările eveniment. Acesta este foarte asemănător codului drop-down de categorie din ultimul tutorial, așa că ar trebui să-l cunoașteți până acum.

Punând totul împreună, Editați | × metoda lui întoarcere Funcția acum arată astfel:

întoarcere (      showForm ()    
setAttributes (categoryAlign: value) /> isSelected && (showForm ())
);

Si setFilter inversarea apelului este definită ca:

funcția setFilter (eveniment) const select = event.target.querySelector ('# opțiune imagine-filtru: bifată'); setAttributes (imageFilter: select.value); event.preventDefault (); 

Pentru a obține imaginea filtrată, trebuie să actualizăm imaginea RandomImage componentă pentru a accepta noua valoare a filtrului de fiecare dată când se modifică meniul derulant.

funcția RandomImage (category, filter) if (filtru) filter = '/' + filtru;  const src = 'https://placeimg.com/320/220/' + categorie + filtru; întoarcere category; 

Observați cum folosim această proprietate nouă componentă în Editați | × pentru a trimite noua valoare a filtrului la PlaceIMG.

Toate aceste modificări ale codului au ca rezultat crearea unui nou panou de inspecție bloc cu două controale drop-down pentru a modifica categoria de imagini și filtrul.

Pentru ca noua proprietate a filtrului să funcționeze și pentru partea frontală, trebuie doar să actualizăm Salvați metodă. 

salvați: funcția (recuzită) const atribute: category, imageFilter = recuzită; întoarcere ( 
);


Concluzie

În acest post, am abordat trei metode diferite pentru adăugarea setărilor la un bloc:

  • fereastra de instrumente pop-up
  • direct pe blocul propriu-zis
  • blochează panoul de inspecție

Am adăugat doar setările de bază pentru fiecare bloc, dar am putea să luăm cu ușurință acest lucru și mai mult prin adăugarea de suport pentru mai multe imagini, prin adăugarea de subtitrări ale imaginilor și prin controlul unor stiluri precum culoarea frontală, raza sau dimensiunea aleatoare a imaginii.

Sunt sigur că până acum ați avut câteva idei pentru a vă crea propriile blocuri personalizate. Mi-ar plăcea să văd ce fel de blocuri ați fi de folos în proiectele voastre!

Începem doar cu Gutenberg la Envato Tuts +, așa că dacă există aspecte particulare ale dezvoltării blocului Gutenberg pe care doriți să le vedeți în detaliu în viitoarele tutoriale, vă rugăm să ne anunțați prin comentariile.

Cod