{"id":233505,"date":"2023-02-15T17:23:00","date_gmt":"2023-02-15T14:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233505"},"modified":"2023-02-26T12:20:58","modified_gmt":"2023-02-26T09:20:58","slug":"kohandatud-gutenbergi-ploki-loomine-5-osa-inspektori-saetted","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kohandatud-gutenbergi-ploki-loomine-5-osa-inspektori-saetted\/","title":{"rendered":"Kohandatud Gutenbergi ploki loomine \u2013 5. osa: inspektori s\u00e4tted"},"content":{"rendered":"\n<p>Eelmistes sammudes \u00f5ppisime komponentide ja atribuutide plokis renderdamise p\u00f5hit\u00f5desid. Selles etapis keskendume sellele, mida WordPress (v\u00e4hemalt koodis) Inspectoriks nimetab: redaktori paremas servas olev k\u00fclgriba. K\u00e4sitleme m\u00f5nda uut komponenti, mida on m\u00f5ttekas k\u00fclgribale paigutada, ja kuidas neid k\u00e4sitleda.<\/p>\n<h2>Inspektor\/k\u00fclgriba komponent<\/h2>\n<p>Kohandatud s\u00e4tete ja HTML-i sisestamiseks inspektori k\u00fclgribale m\u00e4hite k\u00f5ik komponendi nimega <code>InspectorControls<\/code>. Mida iganes sellesse komponenti paned, v\u00e4ljastatakse k\u00fclgribal, mitte ploki\/redaktorisse endasse. P\u00f5him\u00f5tteliselt saab funktsiooni tagastusse panna komponendi ja selle sisu igale poole <code>edit<\/code>.<\/p>\n<p>Peale selle saate s\u00e4tteid hallata k\u00fclgribal nii, nagu need olid ploki sees. Iga seade n\u00f5uab atribuuti ning atribuute laadite ja v\u00e4rskendate samal viisil.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153127-61e50856030af.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153127-61e50856030af.png\" alt=\"Kohandatud Gutenbergi ploki loomine \u2013 5. osa: inspektori s\u00e4tted\"><\/a><\/p>\n<p>Vaatame k\u00f5igepealt, kuidas meie ploki k\u00fclgriba n\u00e4eb v\u00e4lja (kui meie plokk on redaktoris aktiivne), l\u00e4htudes eelmises etapis saadud koodist.<\/p>\n<p>K\u00f5ik plokid n\u00e4itavad vaikimisi ploki ikooni, nime ja kirjeldust ning jaotist T\u00e4psem \u2013 ahendatud. T\u00e4psemalt leiate tekstisisestuse ploki CSS-klassi pakkumiseks.<\/p>\n<h2>K\u00fclgriba jaotise ja m\u00f5nede s\u00e4tete lisamine<\/h2>\n<p>K\u00fclgriba on jagatud osadeks (koodis nimetatakse neid paneelideks) ning optimaalse disaini ja funktsionaalsuse jaoks (sh avatud ahendamise funktsioon) peaksime paneelide \u00f5igeks v\u00e4ljastamiseks kasutama WordPressi komponente.<\/p>\n<p>Kasutage <code>PanelBody<\/code>jaotise lisamiseks komponenti (need, mida saate avada v\u00f5i ahendada), mis on <code>wp.components<\/code>pakendis. Komponent aktsepteerib m\u00f5ningaid rekvisiite, n\u00e4iteks pealkirja ja selle kohta, kas paneel peaks vaikimisi olema avatud v\u00f5i suletud. Samuti saate avamise-sulgemise p\u00e4\u00e4stikule pakkuda kohandatud klassi, ikooni ja lisada s\u00fcndmuse funktsiooni.<\/p>\n<p><code>PanelBody<\/code>Seej\u00e4rel soovitab WordPress kujunduse sujuvamaks muutmiseks kasutada komponenti, <code>PanelRow<\/code>mis toimib paneelis \u00fcldiste konteineritena. See komponent rakendab teie sisule automaatselt teatud veerise ja painduva rea \u200b\u200bstiili. Stiili &quot; <code>flex-direction: row<\/code>&quot; t\u00f5ttu peaksite m\u00e4hkima iga seadistuse \u00fche sisse <code>PanelRow<\/code>. V\u00f5i v\u00f5ite selle \u00fcldse vahele j\u00e4tta ja v\u00f5tta vastutuse selle kujundamise eest ise, kasutades dive ja muud sellist.<\/p>\n<h3>Paneeli ja s\u00e4tete lisamine<\/h3>\n<p>Lisame oma ploki jaoks k\u00fclgriba paneeli, mille sees on m\u00f5ned s\u00e4tted, et seda praktikas n\u00e4ha. Lisame l\u00fclitusnupu, sisendi valimise, v\u00e4rvivalija ja m\u00e4rkeruudu \u2013 lihtsalt selleks, et saada kogemusi erinevat t\u00fc\u00fcpi sisendkomponentidega. J\u00e4tsin ploki sisu (kahe <code>RichText<\/code>s-ga) ja <code>save<\/code>funktsiooni nagu varemgi.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText, InspectorControls } = wp.blockEditor;\nconst { ToggleControl, PanelBody, PanelRow, CheckboxControl, SelectControl, ColorPicker } = wp.components;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    title: 'My first block',\n    category: 'common',\n    icon: 'smiley',\n    description: 'Learning in progress',\n    keywords: ['example', 'test'],\n    attributes: {\n        myRichHeading: {\n            type: 'string',\n        },\n        myRichText: {\n            type: 'string',\n            source: 'html',\n            selector: 'p'\n        },\n        toggle: {\n            type: 'boolean',\n            default: true\n        },\n        favoriteAnimal: {\n            type: 'string',\n            default: 'dogs'\n        },\n        favoriteColor: {\n            type: 'string',\n            default: '#DDDDDD'\n        },\n        activateLasers: {\n            type: 'boolean',\n            default: false\n        }\n    },\n    edit: (props) =&gt; { \n        const { attributes, setAttributes } = props;\n        return (&lt;div&gt;\n                &lt;InspectorControls&gt;\n                    &lt;PanelBody\n                        title=\"Most awesome settings ever\"\n                        initialOpen={true}\n                    &gt;\n                        &lt;PanelRow&gt;\n                            &lt;ToggleControl\n                                label=\"Toggle me\"\n                                checked={attributes.toggle}\n                                onChange={(newval) =&gt; setAttributes({ toggle: newval })}\n                            \/&gt;\n                        &lt;\/PanelRow&gt;\n                        &lt;PanelRow&gt;\n                            &lt;SelectControl\n                                label=\"What's your favorite animal?\"\n                                value={attributes.favoriteAnimal}\n                                options={[\n                                    {label: \"Dogs\", value: 'dogs'},\n                                    {label: \"Cats\", value: 'cats'},\n                                    {label: \"Something else\", value: 'weird_one'},\n                                ]}\n                                onChange={(newval) =&gt; setAttributes({ favoriteAnimal: newval })}\n                            \/&gt;\n                        &lt;\/PanelRow&gt;\n                        &lt;PanelRow&gt;\n                            &lt;ColorPicker\n                                color={attributes.favoriteColor}\n                                onChangeComplete={(newval) =&gt; setAttributes({ favoriteColor: newval.hex })}\n                                disableAlpha\n                            \/&gt;\n                        &lt;\/PanelRow&gt;\n                        &lt;PanelRow&gt;\n                            &lt;CheckboxControl\n                                label=\"Activate lasers?\"\n                                checked={attributes.activateLasers}\n                                onChange={(newval) =&gt; setAttributes({ activateLasers: newval })}\n                            \/&gt;\n                        &lt;\/PanelRow&gt;\n                    &lt;\/PanelBody&gt;\n                &lt;\/InspectorControls&gt;\n                &lt;RichText \n                    tagName=\"h2\"\n                    placeholder=\"Write your heading here\"\n                    value={attributes.myRichHeading}\n                    onChange={(newtext) =&gt; setAttributes({ myRichHeading: newtext })}\n                \/&gt;\n                &lt;RichText\n                    tagName=\"p\"\n                    placeholder=\"Write your paragraph here\"\n                    value={attributes.myRichText}\n                    onChange={(newtext) =&gt; setAttributes({ myRichText: newtext })}\n                \/&gt;\n            &lt;\/div&gt;\n        );\n    },\n    save: (props) =&gt; { \n        const { attributes } = props;\n        return (&lt;div&gt;\n                &lt;RichText.Content \n                    tagName=\"h2\"\n                    value={attributes.myRichHeading}\n                \/&gt;\n                &lt;RichText.Content \n                    tagName=\"p\"\n                    value={attributes.myRichText}\n                \/&gt;\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p>Nagu alati, alustame komponentide ja funktsioonide struktureerimisest, mida soovime kasutada. Sees m\u00e4\u00e4ratleme \u00fche atribuudi sisendi kohta <code>attributes<\/code>ja <code>registerBlockType()<\/code>sobitame t\u00fc\u00fcbi \u2013 n\u00e4iteks l\u00fclitusnupp eeldab t\u00f5ev\u00e4\u00e4rtust ja kuna rippmen\u00fc\u00fc v\u00e4\u00e4rtused on stringid, peaks atribuut olema ka t\u00fc\u00fcbistring.<\/p>\n<p>Real <code>#41<\/code>k\u00e4ivitame <code>InspectorControls<\/code>komponendi ja k\u00f5ik sellest punktist kuni jooneni <code>#80<\/code>ilmub k\u00fclgribale. \u00dclej\u00e4\u00e4nud kuvatakse redaktoris ja ma pole seal muudatusi teinud.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153127-61e50857e3c95.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153127-61e50857e3c95.png\" alt=\"Kohandatud Gutenbergi ploki loomine \u2013 5. osa: inspektori s\u00e4tted\"><\/a><\/p>\n<p>Sees loome esmalt paneeli, <code>PanelBody<\/code>mille rekvisiit <code>initialOpen<\/code>on seatud t\u00f5eseks, \u00fctleme Gutenbergile, et see paneel tuleks vaikimisi avada. Ja siis on meie otsustada, mida iga\u00fchele lisada <code>PanelRow<\/code>.<\/p>\n<p>Komponendi jaoks <code>ToggleControl<\/code>kasutame samu rekvisiite, mida oleme varem tekstisisendite puhul teinud, v\u00e4lja arvatud see, et propi asemel <code>value<\/code>esitame atribuudi v\u00e4\u00e4rtuse prop sees <code>checked<\/code>. See kehtib k\u00f5igi sisendite kohta, mis eeldavad m\u00e4rgistatud atribuuti tavalises HTML-is, n\u00e4iteks m\u00e4rkeruudud. Raadionuppude jaoks kasutaksite rekvisiite <code>selected<\/code>, kuna seda kasutaksite ka tavalises HTML-is. Pidage meeles, et selle sisendi atribuut peab olema t\u00fc\u00fcpi <code>boolean<\/code>.<\/p>\n<p>Ainsuse <code>CheckboxControl<\/code>m\u00e4rkeruudu k\u00e4sitsemisel toimib t\u00e4pselt samamoodi nagu <code>ToggleControl<\/code>\u2013 see tagastab t\u00f5ev\u00e4\u00e4rtuse, olenemata sellest, kas see on m\u00e4rgitud v\u00f5i mitte.<\/p>\n<p>Loob valiku rippmen\u00fc\u00fc ja ootab <code>SelectControl<\/code>v\u00f5imalikke valikuid rekvisiidis massiivina. <code>options<\/code>Iga element peab olema objekt, millel on omadused <code>label<\/code>ja <code>value<\/code>. Sama kehtib ka m\u00e4rkeruutude ja raadionuppude (<code>RadioControl<\/code>) kohta. Tavaolukorras genereeriksite valikud t\u00f5en\u00e4oliselt muutujana v\u00e4ljaspool HTML-v\u00e4ljundit.<\/p>\n<p>V\u00f5ite m\u00e4rgata, et see <code>ColorPicker<\/code>t\u00f6\u00f6tab teistest veidi erinevalt, kuna see on keerulisem komponent, mitte standardne HTML-sisend. Esitage <code>color<\/code>salvestatud v\u00e4rvi jaoks tugi ja selle asemel <code>onChange<\/code>(k\u00e4ivitub \u00fcks kord kl\u00f5psamisel, aga ka iga kord, kui v\u00e4\u00e4rtust lohistamise ajal muudetakse \u2013 see v\u00f5ib p\u00f5hjustada palju tulekahjusid) <code>onChangeComplete<\/code>. Sellel s\u00fcndmusel tagastatud rekvisiit on samuti objekt, kus peame otsustama, millise osa tahame oma atribuudis salvestada. Selles n\u00e4ites tahame salvestada kuueteistk\u00fcmnendv\u00e4\u00e4rtuse (ilma alfa\/l\u00e4bipaistmatuseta), nii et sees <code>setAttributes()<\/code>eraldame tagastatud objekti <code>hex<\/code>atribuudi. <code>color<\/code>See on ka p\u00f5hjus, miks lisame kinnisvara<code>disableAlpha<\/code>alfakanali kasutajaliidese eemaldamiseks (l\u00e4bipaistmatuse kontrollimiseks), kuna pole m\u00f5tet seda kasutajale pakkuda, kui me l\u00e4bipaistmatuse v\u00e4\u00e4rtust kunagi ei salvesta.<\/p>\n<p>Igal komponendil on <code>label<\/code>saadaval tugi, v\u00e4lja arvatud v\u00e4rvivalija. Kui soovite sildi v\u00f5i teksti enne seda v\u00e4ljastada, peate selle hea v\u00e4ljan\u00e4gemise tagamiseks HTML-i v\u00f5i stiiliga askeldama.<\/p>\n<p>Ilmselgelt saate lisada nii palju paneele, kui soovite, lisage lihtsalt <code>PanelBody<\/code>p\u00e4rast eelmist komponenti.<\/p>\n<p>Kui olete huvitatud plokis\u00e4tete lisamise kohta lisateabe saamiseks, on mul eraldi \u00f5petused Inspectori keerukamate s\u00e4tete ja komponentide jaoks; <a href=\"https:\/\/wordpress.mediadoma.com\/et\/kuidas-lisada-oma-kohandatud-wordpressi-gutenbergi-plokki-pildivalik\/\" title=\"Pildivaliku lisamine\">Pildivaliku lisamine<\/a> ja <a href=\"https:\/\/wordpress.mediadoma.com\/et\/kuidas-lisada-kohandatud-gutenbergi-plokki-vaervisaetteid\/\" title=\"v\u00e4rviseadete paneeli lisamine\">v\u00e4rviseadete paneeli lisamine<\/a>.<\/p>\n<h3>K\u00e4itlemine<code>save<\/code><\/h3>\n<p>J\u00e4tsin <code>save<\/code>funktsiooni endiseks. See on teie otsustada ja k\u00f5ik s\u00f5ltub sellest, mida v\u00e4ljundis olevad s\u00e4tted juhivad. Teate juba, kuidas iga seade v\u00e4\u00e4rtusi hankida. Oletame n\u00e4iteks, et t\u00f5ev\u00e4\u00e4rtuslik atribuut <code>activateLasers<\/code>juhib kohandatud HTML-i elemendi renderdamist v\u00f5i mitte. Kui atribuut on <code>true<\/code>div, tuleks v\u00e4ljastada, muidu mitte. Saate seda teha traditsioonilise if-checkiga v\u00f5i kasutada JSX-i sisemist <code>if<\/code>ja <code>&amp;&amp;<\/code>operaatorit. Lisateavet selle kohta leiate <a href=\"https:\/\/reactjs.org\/docs\/conditional-rendering.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Reacti tingimusliku renderdamise juhendist<\/a>.<\/p>\n<pre><code>save: (props) =&gt; { \n    const { attributes } = props;\n    return (&lt;div&gt;\n            &lt;RichText.Content \n                tagName=\"h2\"\n                value={attributes.myRichHeading}\n            \/&gt;\n            &lt;RichText.Content \n                tagName=\"p\"\n                value={attributes.myRichText}\n            \/&gt;\n            {attributes.activateLasers &amp;&amp; \n                &lt;div className=\"lasers\"&gt;Lasers activated&lt;\/div&gt;\n            }\n        &lt;\/div&gt;\n    );\n}<\/code><\/pre>\n<p>Kuna me kasutame <code>RichText<\/code>seda v\u00e4ljundit, poleks see redaktoris n\u00e4htav, kuid see ilmub kasutajaliideses.<\/p>\n<p>Rohkem komponente leiate <code>wp.components<\/code> <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Githubi repost<\/a>. Enamik neist kaustadest peaks pakkuma teile lugemist koos m\u00f5ningate dokumentidega selle kasutamise kohta. \u00d5ppisin sellest suurema osa sellest repost ja ka WordPressi p\u00f5hikomponentidest uurides, kuidas nad seda tegid.<\/p>\n<p>Sarja <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-wordpress-gutenberg-blocks-part-6-adding-toolbars\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmises etapis<\/a> keskendume sellele, kuidas juhtida ploki t\u00f6\u00f6riistariba. \u00d5pime, kuidas k\u00e4sitleda n\u00e4iteks ploki joondust ja lisada t\u00f6\u00f6riistaribale kohandatud nuppe.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Selles Gutenbergi \u00f5ppetunnis keskendume sellele, kuidas lisada inspektorisse erinevaid komponente \u2013 redaktori paremas servas oleval k\u00fclgribal.<\/p>\n","protected":false},"author":1,"featured_media":153128,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,937,833,894,1110,842,802,863],"tags":[1165],"class_list":["post-233505","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-gutenberg-4","category-juhend-algajatele","category-kood","category-n-a","category-opetused","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=233505"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233505\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/153128"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}