Selles postituses käsitletakse üksikasjalikult, kuidas lisada kohandatud WordPressi Gutenbergi plokki värvisätteid. Õpime, kuidas lisada sama värviseadete komponenti, mis võimaldab valida paletivärvide ja kohandatud värvide hulgast, nagu paljud WordPressi vaikeplokid kasutavad.
Selle lisame oma kohandatud plokki:
Gutenbergi komponente kasutades saame selle paleti/värviosa väga lihtsalt oma kohandatud plokki rakendada. Saate määrata värvisätted, mis mõjutavad mis tahes soovitud värvi; tausta, teksti värvi, äärise värvi või mis iganes muu. Samuti saate sellele paneelile lisada nii palju värvisätteid, kui soovite.
Enne koodiga tutvumist peate teadma mõningaid asju. Ärge jätke koodi juurde, sest järgmine jaotis selgitab palju, miks kood peab seda nii tegema.
Mida peate kõigepealt teadma
Komponendid paleti/värviseadete rakendamiseks on ja PanelColorSettings
pakendist. Komponent on nn kõrgema järgu komponent ja seda tuleb realiseerida natuke teistmoodi kui lihtsalt tavalise komponendi väljastamist. Ma räägin hiljem veidi üksikasjalikumalt. Kuid kõigepealt peame olema teadlikud põhitõdedest, kuidas Gutenberg ploki värviseadeid käsitleb.withColors``wp.blockEditor``withColors
Kuidas Gutenbergi plokid värviseadeid käsitlevad
Gutenbergi värviseadete käsitlemisel plokkides kehtivad teatud reeglid. Kui olete kunagi varem Gutenbergi toetatud teema stiili kujundanud, olete tõenäoliselt nende reeglitega juba tuttav. Sellegipoolest vaatame need kiiresti läbi, sest peame seda oma plokkkoodis käsitlema.
- Kui paleti värv on valitud, saab sõlmeploki element kindla mustri klassi. Tund algab tähega "
has-
" ja seejärel järgneb paleti nälkjas. Lõpp sõltub sellest, millist elementi värv peaks mõjutama. Teksti värvi puhul lõpeb see tähega "-color
". Taustavärvi puhul lõpeb see tähega "-background-color
". Näiteks plokk, mille taustavärviks on valitud paletivärv "punane", saab klassi "has-red-background-color
". - Kui valitakse kohandatud värv (värvivalijast), saab sõlme ploki element inline stiili koos kuueteistkümnendkoodiga. Näiteks taustavärvi jaoks valitud kohandatud värv #DD0000 saab atribuudi "
style="background-color: #DD0000;
".
Kui rakendame oma ploki värvisätteid, peame rakendama õige klassi ja tekstisisese stiili. Teeme seda selle õpetuse lõpus.
Kuidas töötadawithColors
Nagu varem mainitud, withColors
on see kõrgema järgu komponent. Põhimõtteliselt tähendab see, et see on komponent, mis võtab komponendi ja tagastab uue komponendi. Tagastatud komponendis saame kasulikud rekvisiidid kõrgemat järku komponendist. Lihtsamalt öeldes kasutame withColors
kohandatud ploki jaoks oma komponendi tagastamiseks. Meie plokikomponent saab värvidega töötamiseks vajalikud rekvisiidid aadressilt withColors
.
Komponent withColors
käsitleb olekut ja palju funktsioone värvidega töötamiseks. Ja me saame selles protsessis palju automatiseerimist. See on väga mugav, et välja selgitada, kas valitud värv on paletivärv (peame lisama klassi) või kohandatud värv (peame lisama tekstisisese stiili). withColors
lihtsustada palju valitud värvi salvestamise protsessi, mis iganes see ka poleks, meie ploki atribuutidesse. Atribuutidest rääkides..
Atribuudid jawithColors
Ilmselt vajab teie plokk valitud värvi salvestamiseks atribuute. Et saada kasu withColori automatiseerimisest õigete värvide salvestamisel, peate tegelikult määrama iga värvisätte jaoks kaks atribuuti. Üks paletivärvi näpunäidete ja teine kuueteistkümnendkoodi salvestamiseks. Siiski on mõned reeglid.
Oletagem, et soovite lisada ploki tekstivärvi jaoks värvisätte – nii otsustate määratleda atribuudi, mille nimi on tabav textColor
. Seejärel peate mustris " customYourOriginalAttribute
" määrama teise atribuudi. Selles näites peab teise atribuudi nimi olema " customTextColor
". Pidage meeles kaamelCase (suurtähe) siin. Selle mustri järgimine withColors
toimub automaatselt:
- Kui paleti värv on valitud, sisaldab atribuut ”
textColor
" paleti näppu. - Kui valitud on kohandatud värv,
customTextColor
täidetakse kuueteistkümnendkoodiga " ".
Need kaks töötavad koos. Kui valitakse kohandatud värv, on textColor
see automaatselt undefined
ja vastupidi.
Ja lõpuks, viimane asi, mida meeles pidada: te ei pea seda kasutama setAttributes()
oma värviatribuutide värskendamiseks! Pakutavad rekvisiidid withColors
sisaldavad funktsiooni, mis värskendab teie atribuute teie eest automaatselt. Kõik, mida pead tegema, on edastada see funktsioon onChange
sündmusele PanelColorSettings
komponendile ja teie atribuute värskendatakse automaatselt.
Ok, on aeg seda kõike praktikas näha!
Värvisätete rakendamine kohandatud plokis
Asjade alustamiseks on mul üsna kasutu kohandatud plokk, mis ei tee muud, kui kuvab kõvakoodiga teksti. See muudab lihtsalt värviseadete lisamiseks kodeerimiseks vajaliku eraldamise lihtsaks. Mul on õpetusesari, kuidas luua oma kohandatud plokke, kui soovite rohkem teada saada.
Märkus: kirjutan kogu koodi ES6/ESNexti. See hõlmab noolefunktsioone, mis nõuavad Babeli/veebipaketi seadistamisel erilist hoolt. Kui saate mõne alloleva koodi puhul vigu, järgige minu juhendit Webpacki ja Babeli seadistamiseks ES6/ESNexti jaoks või kohandage koodi nii, et see ei kasutaks "eksperimentaalseid süntakse".
See on minu põhiline kohandatud plokk enne värviseadetega midagi tegemist:
See on üsna elementaarne. Pange tähele, et edit
funktsioon viitab lihtsalt eraldi komponendile, BlockWithColorSettings
selle asemel, et seda tekstisiseselt kirjutada. withColors
See muudab selle hilisema rakendamise lihtsamaks .
Olgu, aeg rakendada värviseadeid meie plokis! Näiteks soovin seadistada teksti värvi.
Atribuutide lisamine
Nagu varem mainitud, peame iga värviseade jaoks määratlema kaks atribuuti. Ja me peame olema nende nimede määramisel eriti ettevaatlikud. Soovin lisada tekstivärvi atribuudi, seega panen atribuudile nimeks textColor
. Mis tähendab, et lisan ka atribuudi customTextColor
. Mõlemad peaksid olema tüüpi stringid.
Meie atribuudid on valmis ploki teksti värviseadete salvestamiseks. Nüüd on aeg juurutada withColors
ja PanelColorSettings
.
RakendaminewithColors
Nagu varem mainitud withColors
, on see kõrgema järgu komponent, mille tagastamiseks peaks olema komponent. Ilmselt tahame, et see tagastaks meie redigeerimiskomponendi BlockWithColorSettings
. Kuid parameetrina withColors
pakume objekti.
Talle edastatavas objektis withColors
peame ütlema, withColors
millist atribuuti soovime värvi salvestamiseks kasutada ja millist elementi see värvib (meie puhul tekstivärv, mis tähendab CSS-i reeglit “värv”). CSS-i reeglist teavitamine tagab, et tagastatud klassinimed on õiged. Kuna see on tekstivärv, tahame klassinimesid nagu "has-color".
Esmalt ülaosas mõni destruktureerimine. withColors
asub wp.blockEditor
pakendis.
const { withColors } = wp.blockEditor;
Muudame edit
funktsiooni järgmiseks:
Selle koodiga BlockWithColorSettings
saab meie komponent täiendavaid rekvisiite:
props.textColor
: on objekt, mis koosneb kogu teabest valitud värvi kohta. Kui valiti paleti värv, salvestab see atribuudid kuueteistkümnendkoodi, paleti nälkja, klassi nime ja muu jaoks. Kui valiti kohandatud värv, sisaldab objekt kuueteistkümnendkoodi. Kuueteistkümnendkoodi leiate alati kinnisvarastcolor
. Ja klassi nimi (ainult siis, kui valiti paleti värv) määratakse atribuudisclass
.props.setTextColor
: funktsioon, mis värskendab meie atribuute. Pakume seda värviseadeteonChange
sündmuse jaoks, nagu näeme hiljem. Funktsioon värskendab niitextColor
jacustomTextColor
atribuute. Kuna järgisime nimetamisreegleid, värskendatakse seda automaatseltcustomTextColor
, kuigi me pole seda atribuudi nime kunagi esitanud.
Pange tähele, et rekvisiidina pakutav funktsioon "set" järgib reeglit: " setYourAttributeName
". Kuna me andsime textColor
, on funktsiooni nimi setTextColor
. Kui me selle asemel nimetaksime oma atribuudile nime awesomeColor
ja esitaksime selle withColors
objektis, oleks set-funktsiooni nimi setAwesomeColor()
.
RakendaminePanelColorSettings
Järgmine samm on tegeliku inspektori jaotise rakendamine. Selleks lisame komponendi PanelColorSettings
sisse InspectorControls
. Kuna React nõuab, et kõik oleks ühe juursõlme sees, kasutame ka Fragment
(alates wp.elements
) kõige selle sees oleva mähkimiseks.
Kõigepealt faili ülaosas mõni struktureerimine:
const { Fragment } = wp.element;
const { InspectorControls, PanelColorSettings, withColors } = wp.blockEditor;
Ja värskendame oma BlockWithColorSettings
komponenti millekski selliseks:
Nagu näete real #2
, hävitame withColors
, textColor
ja setTextColor
. Pidage meeles, et props.textColor
see on objektilt saadud objekt withColors
ja props.attributes.textColor
atribuut. Meil pole aga vaja atribuudile viidata.
Komponendi rekvisiidina PanelColorSettings
saame anda jaotisele pealkirja (pealkiri Inspectori kokkupandavas kastis). Siin on oluline rekvisiit, colorSettings
kus peame pakkuma hulga värviseadeid. Iga värviseade jaoks (meil on praegu ainult üks) peame esitama mõned omadused. Vara value
eeldab praegu valitud kuueteistkümnendkoodi (kuigi valiti paleti värv). See on meile ette nähtud textColor
kinnisvara sees olevas rekvisiidis color
. Kinnisvara jaoks onChange
pakume lihtsalt komplekti funktsiooni, mille pakub withColors
, setTextColor
. Ja lõpuks peaksime andma a label
, et kasutaja teaks, millist elementi see värv mõjutab. See kuvatakse otse värvi valimise ala kohal.
Nii kuvatakse meie komponent Gutenbergi redaktoris praegu:
Nüüd värskendab see edukalt meie atribuute värvide valimisel. Näete, et see jätab postituse salvestamisel teie värvivaliku meelde.
Värvide vahetamisel ei juhtu aga visuaalselt midagi. Värvivalik salvestatakse atribuutidesse, kuid värvimuutust ei toimu redaktoris ega ka postituse eelvaate kuvamisel. Seda seetõttu, et peame lisama koodi ploki klasside ja stiilide jaoks. Peame seda tegema nii edit
funktsiooni (mis on redaktori jaoks) kui ka save
funktsiooni jaoks (liides). See on järgmine samm.
Klassi ja tekstisiseste stiilide käsitlemineedit
Peame ehitama ploki sõlme klassi ja stiili atribuudid vastavalt valitud värviseadele. Õnneks withColors
saame selles osas automatiseerida. Pidage meeles, et props.textColor
see on objekt, mis sisaldab kogu vajalikku teavet, sealhulgas klassi nime.
Võiksime teha midagi sellist:
Real #20
rakendame oma ploki juursõlmele kriitilist klassi ja tekstisisest stiili. Enne seda koostame klassi ja tekstisisese stiili atribuudi, kontrollides props.textColor
objekti.
Pärast seda muudatust peaks teie kohandatud plokk nüüd redaktoris täielikult toimima. Värvi vahetamisel muudab plokk teksti värvi. Vinge! Viimane samm on seda teha ka save
funktsiooni jaoks, et saaksime need klassid ja stiilid ka kasutajaliidesesse.
Klassi ja tekstisiseste stiilide käsitleminesave
Klassi ja siseste stiilide loomise ja juursõlmele rakendamise kontseptsioon on sama, save
mis rakenduses edit
. Kuid on oluline erinevus. Meil save
ei ole pakutud rekvisiite withColors
. Ja me ei saa funktsioonile lisada kõrgema järgu komponente save
. Seega on save
funktsioonis kogu teave, mis meil on, atribuudid.
See on hea rusikareegel, et vältida "has-" klassinimede kõvakodeerimist. Mis siis, kui WordPress otsustab seda reeglit tulevikus muuta? Õnneks on meil funktsioon, mis aitab meil luua meie jaoks õiged klassinimed: getColorClassName()
.
Enne kui unustame, hävitame selle. See on ka wp.blockEditor
pakendis.
const { InspectorControls, PanelColorSettings, withColors, getColorClassName } = wp.blockEditor;
Funktsiooni kasutamine getColorClassName()
nõuab kahte parameetrit. Esiteks string CSS-i reegli jaoks. Kuna meie värviseade on teksti värvi jaoks, pakume " color
". See ütleb funktsioonile, et see peaks tagastama klassinime "has-something-color" ja mitte näiteks "on-something-background-color". Teise parameetrina peame esitama atribuudi väärtuse.
Stiili atribuut luuakse lihtsalt, määrates atribuudi väärtuseks "värv" customTextColor
, kui see on määratletud.
Ja muidugi ärge unustage klassi ja stiili oma ploki juursõlmele rakendada; nagu rivis #12
.
PS: Kui testite selle koodi kirjutamise ajal oma plokki redaktoris, kuvatakse nüüd blokeeringu viga. See juhtub seetõttu, et oleme nüüd funktsiooni väljundit muutnud save
ja kõik, mida olete varem salvestanud, on vastuolus. Peate ploki eemaldama ja uuesti lisama.
Pärast seda muudatust peaks teie plokk nüüd õigesti rakendama valitud tekstivärvi ka esiprogrammis.
Ja see ongi kõik! Olete nüüd oma ploki värvisätted edukalt rakendanud. Kui olete huvitatud mitme värviseadete (mitte ainult teksti värvi) lisamisest, lugege edasi.
Märkus mitme värviseadete kohta
Nüüdseks peaksite saama rakendada mitut värviseadet. Võimalik, et soovite oma ploki jaoks lisada sätteid taustavärvi, teksti värvi, äärise värvi või muu jaoks. Selles jaotises annan kiire ülevaate sellest, mida peame tegema mitme värvisätte rakendamiseks.
Oletame, et tahan oma plokile lisada ka taustavärvi.
Kõigepealt pean määratlema uue atribuudi loovalt nimega backgroundColor
. Ma määratlen ka teise atribuudi customBackgroundColor
.
Funktsioonis edit
muudan pakutava objekti withColors
selliseks:
withColors({textColor: 'color', backgroundColor: 'background-color'})
See ütleb withColors
, et minu textColor
atribuut on CSS-reegli jaoks " color
" (teksti värvi jaoks) ja atribuut backgroundColor
CSS-reegli jaoks " background-color
". withColors
tuvastab ja värskendab automaatselt ka customTextColor
atribuute customBackgroundColor
ja.
PanelColorSettings
Komponentis pakun massiivile propile veel ühe objekti colorSettings
. Nagu nii:
Sellega peaksite saama kaks eraldi värviseadet värviseadete kasti Inspektor.
Viimane samm on sobivate klassinimede ja stiilide loomine nii edit
ja save
. See on üsna lihtne samm, kuna see lihtsalt ehitab stringi või stiiliobjekti õigesti. Pidage meeles, et teie klassi nimi peab toetama mitut värviklassi (nt kui valitud on nii teksti- kui ka taustavärv). Lihtsalt lisage iga klassi nime vahele tühik.
PS: Kui teil on vaja oma ploki jaoks kasutada palju klassinimesid, võib classnames
paketi installimine teile kasuks tulla. Peaaegu kõik Gutenbergi komponendid kasutavad seda teeki klassinimede hõlpsamaks kombineerimiseks.
Järeldus ja täielik kood
Nüüd peaksite olema õppinud, kuidas kohandatud plokis värvisätteid rakendada. Loodan, et sellest oli teile mingit kasu! Pidin selle funktsiooni oma projektile lisama ja ma tõesti ei leidnud mingit teavet ega head dokumentatsiooni. Nii et see on selle teema kohta õpitu konsolideerimise tulemus.
Siin on teksti värvi seadistusega kohandatud ploki näide kokku lõplik kood: