{"id":228065,"date":"2022-10-12T10:37:00","date_gmt":"2022-10-12T07:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228065"},"modified":"2022-11-09T00:31:22","modified_gmt":"2022-11-08T21:31:22","slug":"dodaj-select2-jako-inspectorcontrol-w-wordpress-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dodaj-select2-jako-inspectorcontrol-w-wordpress-gutenberg\/","title":{"rendered":"Dodaj Select2 jako InspectorControl w WordPress Gutenberg"},"content":{"rendered":"\n<p>W przypadku projektu, nad kt\u00f3rym pracowa\u0142em, chcia\u0142em u\u017cy\u0107 Select2 jako Gutenberga <code>InpectorControl<\/code>, aby umo\u017cliwi\u0107 mi zastosowanie ustawie\u0144 do bloku. Ten samouczek zapewni r\u00f3wnie\u017c podstawy potrzebne do wprowadzenia dowolnego komponentu React innej firmy do edytora WordPress Gutenberg.<\/p>\n<p>Select2 to bardzo por\u0119czny zamiennik wybranych p\u00f3l w Twojej witrynie. W szczeg\u00f3lno\u015bci ma kilka \u015bwietnych opcji wyboru wielu przedmiot\u00f3w.<\/p>\n<p>Gotowy produkt, Select2 w WordPress Gutenberg InspectorControls<\/p>\n<p>Dobr\u0105 wiadomo\u015bci\u0105 jest to, \u017ce nie musia\u0142em budowa\u0107 komponentu React, aby wprowadzi\u0107 Select2 do Gutenberga, <a href=\"https:\/\/github.com\/JedWatson\/react-select\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>react-select<\/code>komponent Jeda Watsona<\/a>, ju\u017c wykonuje \u015bwietn\u0105 robot\u0119, jednak sprawienie, by gra\u0142 przyjemnie z Gutenbergiem, nie by\u0142o tak \u0142atwe, jak po prostu pod\u0105\u017canie instrukcje.<\/p>\n<p>Po pierwsze, musieli\u015bmy zainstalowa\u0107 komponent w naszej kompilacji. Poniewa\u017c by\u0142o to w npm, wystarczy\u0142o wprowadzi\u0107 do naszego terminala:<\/p>\n<h2>Wprowadzanie Select2 do bloku Gutenberg<\/h2>\n<p>Korzystaj\u0105c z <a href=\"https:\/\/github.com\/zgordon\/gutenberg-course\/blob\/master\/blocks\/06-inspector-controls\/index.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repozytorium Zac Gordons Gutenberg Course Git<\/a> (cz\u0119\u015b\u0107 <a href=\"https:\/\/javascriptforwp.com\/courses\/gutenburg-development\/ref\/648\/?campaign=GutenbergDevelopment\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fantastycznego kursu programistycznego Zac Gordons Gutenberg<\/a>) jako podstawy dla mojej wtyczki (w szczeg\u00f3lno\u015bci <code>InspectorControls<\/code>przyk\u0142adu), <code>react-select<\/code>musia\u0142em doda\u0107 nast\u0119puj\u0105ce do\u0142\u0105czenia na g\u00f3rze mojego pliku:<\/p>\n<pre><code>import React from 'react';\nimport Select from 'react-select';\n<\/code><\/pre>\n<p>O nie! Kompilacja daje nam b\u0142\u0105d:<\/p>\n<blockquote>\n<p>Nie znaleziono modu\u0142u: B\u0142\u0105d: nie mo\u017cna rozwi\u0105za\u0107 problemu \u201ezareagowa\u0107&quot;<\/p>\n<\/blockquote>\n<p>Nie obawiaj si\u0119, ten \u015bwietny artyku\u0142 na temat <a href=\"https:\/\/www.cssigniter.com\/how-to-use-external-react-components-in-your-gutenberg-blocks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u201eJak u\u017cywa\u0107 zewn\u0119trznych komponent\u00f3w React w swoich blokach Gutenberga&#8221; autorstwa CSS Igniter<\/a> przyszed\u0142 na ratunek, wystarczy zarejestrowa\u0107 <code>externals<\/code>si\u0119 w naszym <code>webpack.config.js<\/code>pliku:<\/p>\n<pre><code>externals: {\n    'react': 'React',\n    'react-dom': 'ReactDOM',\n}\n<\/code><\/pre>\n<p>Tak jak:<\/p>\n<pre><code>module.exports = {\n    entry: {\n        '.\/assets\/js\/editor': '.\/blocks\/index.js',\n        '.\/assets\/js\/script': '.\/blocks\/script.js',\n    },\n    output: {\n        path: path.resolve( __dirname ),\n        filename: '[name].js',\n    },\n    externals: {\n        'react': 'React',\n        'react-dom': 'ReactDOM',\n    }\n...\n<\/code><\/pre>\n<h2>Rejestracja InspektoraKontroli<\/h2>\n<p>Wewn\u0105trz rolki panelu swojego <code>&lt;InspectorControls&gt;<\/code>komponentu musisz doda\u0107 nast\u0119puj\u0105ce elementy:<\/p>\n<pre><code>&lt;Select\n    name='select-two'\n    value={ JSON.parse( selectedOption) }\n    onChange={ handleSelectChange }\n    options={[\n        { value: 'health', label: 'Health' },\n        { value: 'wealth', label: 'Wealth' },\n        { value: 'code', label: 'Code' },\n    ]}\n    isMulti='true'\n    \/&gt;\n<\/code><\/pre>\n<p>Jeszcze nie sko\u0144czyli\u015bmy, poniewa\u017c b\u0119dziemy musieli r\u00f3wnie\u017c zarejestrowa\u0107 <code>selectedOption<\/code>atrybut i <code>handleSelectChange<\/code>funkcj\u0119. Mo\u017cemy to zrobi\u0107 tak:<\/p>\n<pre><code>attributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\n<\/code><\/pre>\n<p>\u2026a teraz funkcja\u2026<\/p>\n<pre><code>const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n<\/code><\/pre>\n<p>Poczekaj, dlaczego potrzebujemy <code>JSON.stringify()<\/code>i <code>JSON.parse()<\/code>warto\u015bci? C\u00f3\u017c, poniewa\u017c warto\u015b\u0107, kt\u00f3r\u0105 <code>react-select<\/code>akceptuje komponent, jest tablic\u0105, a poniewa\u017c Gutenberg nie pozwoli nam zapisa\u0107 tej warto\u015bci jako tablicy, jest to obej\u015bcie, kt\u00f3rego mo\u017cemy u\u017cy\u0107.<\/p>\n<h2>Sk\u0142adamy to razem<\/h2>\n<p>Nasz ca\u0142y <code>InspectorControls<\/code>obszar powinien teraz wygl\u0105da\u0107 tak:<\/p>\n<pre><code>...\nattributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\nedit: props =&gt; {\n    const { attributes: { selectedOption }, className, setAttributes } = props;\n    const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n    return [\n        &lt;InspectorControls&gt;\n            &lt;PanelBody\n                title={ __( 'Select2', 'text-domain') }\n            &gt;\n                &lt;PanelRow&gt;\n                    &lt;Select\n                        name='select-two'\n                        value={ JSON.parse( selectedOption) }\n                        onChange={ handleSelectChange }\n                        options={[\n                            { value: 'health', label: 'Health' },\n                            { value: 'wealth', label: 'Wealth' },\n                            { value: 'code', label: 'Code' },\n                        ]}\n            isMulti='true'\n                        \/&gt;\n                 &lt;\/PanelRow&gt;\n             &lt;\/PanelBody&gt;\n         &lt;\/InspectorControls&gt;,\n...\n<\/code><\/pre>\n<h2>Wygl\u0105da dobrze w Gutenberg<\/h2>\n<p>Jak wida\u0107 na zrzucie ekranu, dzia\u0142a to ca\u0142kiem nie\u017ale:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169504-61e816febb7e8.png\" alt=\"Dodaj Select2 jako InspectorControl w WordPress Gutenberg\" \/>Select2 jako Gutenberg InspectorControl<\/p>\n<h2>Id\u0105c dalej<\/h2>\n<p>U\u017cy\u0142em tej kontroli Inspector w mojej wtyczce Secure Blocks for Gutenberg, dowiedz si\u0119, jak wype\u0142ni\u0142em kontrolk\u0119 Select2 <a href=\"https:\/\/wholesomecode.ltd\/articles\/working-with-gutenberg-and-the-wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dynamicznymi danymi z WordPress REST API<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W przypadku projektu, nad kt\u00f3rym pracowa\u0142em, chcia\u0142em u\u017cy\u0107 Select2 jako Gutenberga InpectorControl, aby umo\u017cliwi\u0107 mi zastosowanie ustawie\u0144 do bloku. Ten samouczek da Ci r\u00f3wnie\u017c podstawy, kt\u00f3rych potrzebujesz&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224196,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,845],"tags":[1169],"class_list":["post-228065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228065"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224196"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}