{"id":233479,"date":"2023-02-14T14:02:00","date_gmt":"2023-02-14T11:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233479"},"modified":"2022-11-10T23:55:25","modified_gmt":"2022-11-10T20:55:25","slug":"crea-blocco-gutenberg-personalizzato-parte-6-barre-degli-strumenti","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/crea-blocco-gutenberg-personalizzato-parte-6-barre-degli-strumenti\/","title":{"rendered":"Crea blocco Gutenberg personalizzato &#8211; Parte 6: Barre degli strumenti"},"content":{"rendered":"\n<p>In questo post impareremo come aggiungere le barre degli strumenti di WordPress al nostro blocco, ovvero per l&#8217;allineamento e l&#8217;allineamento dei blocchi. Impareremo anche ad aggiungere le nostre barre degli strumenti con i nostri pulsanti per eseguire azioni personalizzate.<\/p>\n<h2>Aggiunta di barre degli strumenti<\/h2>\n<p>Per aggiungere qualcosa alla barra degli strumenti per il nostro blocco, dovremo racchiudere ci\u00f2 che vogliamo in esso all&#8217;interno di un componente chiamato <code>BlockControls<\/code>(da <code>wp.blockEditor<\/code>). All&#8217;interno di questo componente possiamo aggiungere uno dei componenti di WordPress per le barre degli strumenti standard che conosciamo da altri blocchi (ad esempio l&#8217;allineamento) oppure possiamo aggiungere la nostra barra degli strumenti.<\/p>\n<p>Di default un blocco avr\u00e0 una barra degli strumenti contenente solo l&#8217;icona del blocco (per la funzionalit\u00e0 Trasforma in) e il menu del blocco per es. rimuovere il blocco. Non possiamo rimuoverli, ma possiamo aggiungere i nostri pulsanti e barre degli strumenti nel mezzo.<\/p>\n<p>Tuttavia, alcuni componenti di WordPress aggiungeranno da soli le proprie barre degli strumenti. A partire da ora il nostro blocco mostra una barra degli strumenti per la formattazione del testo che proviene dal <code>RichText<\/code>componente che abbiamo aggiunto.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7785e80.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-153353-61e50c7785e80.png\" alt=\"Crea blocco Gutenberg personalizzato - Parte 6: Barre degli strumenti\" ><\/a><\/p>\n<h2>Aggiunta di una barra degli strumenti di allineamento dei blocchi<\/h2>\n<p>La barra degli strumenti di allineamento dei blocchi esiste praticamente su tutti i tipi di blocchi di WordPress, quindi aggiungiamo anche quella al nostro blocco. Dietro le quinte esiste un componente <code>BlockAlignmentToolbar<\/code>che potremmo aggiungere, tuttavia mi raccomando di non farlo. Il suo utilizzo richiede di gestire manualmente le classi per l&#8217;allineamento dei blocchi e assicurarsi che il blocco estenda la sua larghezza nell&#8217;editor quando si sceglie &quot;Larghezza ampia&quot; o &quot;Larghezza intera&quot;. Fortunatamente WordPress ha reso davvero semplice l&#8217;implementazione, completamente automatica.<\/p>\n<p>PS: il tema attivo deve avere attivamente aggiunto il supporto del tema per questi due allineamenti di blocchi. Puoi aggiungere il supporto per questi avendo <code>add_theme_support('align-wide')<\/code>nel <code>after_setup_theme<\/code>gancio.<\/p>\n<p>Possiamo aggiungere una nuova propriet\u00e0 alla nostra configurazione di oggetti in <code>registerBlockType()<\/code>, chiamata <code>supports<\/code>. Ci sono alcune altre funzionalit\u00e0, ma ci\u00f2 che ci interessa qui \u00e8 <code>align<\/code>. Possiamo impostare <code>align<\/code>per <code>true<\/code>aggiungere tutti i possibili allineamenti, oppure possiamo fornire una matrice di esattamente quali allineamenti consentiamo per il nostro blocco.<\/p>\n<pre><code>...\nregisterBlockType('awp\/firstblock', {\n    ...\n    supports: {\n        align: true\n    },\n    edit: (props) =&gt; {\n        ...\n});<\/code><\/pre>\n<p>Il che ci d\u00e0 questo nell&#8217;editor:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7967acd.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-153353-61e50c7967acd.png\" alt=\"Crea blocco Gutenberg personalizzato - Parte 6: Barre degli strumenti\" ><\/a><\/p>\n<p>Se si desidera, ad esempio, impedire a chiunque di utilizzare Wide Width o Full Width, \u00e8 possibile fornire un array ed escludere quei due. I nomi degli allineamenti dei blocchi sono i seguenti: <code>left<\/code>, <code>right<\/code>, <code>center<\/code>, <code>wide<\/code>, e <code>full<\/code>.<\/p>\n<pre><code>supports: {\n    align: ['left', 'right', 'center']\n},<\/code><\/pre>\n<h3>Hai bisogno di un allineamento predefinito?<\/h3>\n<p>Per impostazione predefinita, il blocco non ottiene alcun allineamento del blocco. Se lo desideri, puoi impostare un valore predefinito creando un attributo con la chiave <code>align<\/code>, imposta il tipo su <code>string<\/code>e imposta l\u00ec il valore predefinito. WordPress collegher\u00e0 automaticamente questo attributo all&#8217;allineamento dei blocchi.<\/p>\n<pre><code>attributes: {\n    align: {\n        type: 'string',\n        default: 'center'\n    }\n},\nsupports: {\n    align: true\n},<\/code><\/pre>\n<p>Con questo ogni volta che viene creato un nuovo blocco del nostro tipo, l&#8217;allineamento del blocco predefinito \u00e8 centrato.<\/p>\n<h3>Blocca il disordine dello stile di allineamento? Non \u00e8 colpa nostra<\/h3>\n<p><strong>Nota:<\/strong> lo stile di blocco predefinito di WordPress roviner\u00e0 il flusso del contenuto del tuo post quando utilizzi l&#8217;allineamento dei blocchi sinistro e destro. La stessa cosa accade anche con altri tipi di blocchi di WordPress e non \u00e8 esclusivamente un problema del nostro blocco. Ci\u00f2 \u00e8 causato dall&#8217;aggiunta di float all&#8217;elemento, che comprime l&#8217;elemento padre. Credimi, ho provato a costruire il blocco per evitare questo problema. L&#8217;unica cosa che ho scoperto che funziona correttamente senza pasticciare con gli altri allineamenti di blocchi \u00e8 l&#8217;aggiunta di uno stile all&#8217;editor e la regolazione dello stile del float.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7baa1f0.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-153353-61e50c7baa1f0.png\" alt=\"Crea blocco Gutenberg personalizzato - Parte 6: Barre degli strumenti\" ><\/a><\/p>\n<p>Indipendentemente da ci\u00f2, WordPress ha semplificato l&#8217;implementazione dell&#8217;allineamento dei blocchi. Ora diamo un&#8217;occhiata ad altre barre degli strumenti che possiamo usare.<\/p>\n<h2>Aggiunta di una barra degli strumenti di allineamento del testo<\/h2>\n<p>Se preferisci la barra degli strumenti per l&#8217;allineamento del testo, puoi farlo invece dell&#8217;allineamento a blocchi: in questa barra degli strumenti abbiamo solo l&#8217;allineamento a sinistra, al centro e a destra. In effetti, puoi utilizzare sia l&#8217;allineamento del testo che l&#8217;allineamento dei blocchi insieme: funzionano separatamente. Per non confondere gli utenti, puoi ad esempio aggiungere solo il supporto per l&#8217;allineamento dei blocchi a larghezza e larghezza intera e utilizzare la barra degli strumenti di allineamento del testo per controllare l&#8217;allineamento a sinistra, al centro o a destra. In questo modo <strong>eviti il \u200b\u200bproblema sopra menzionato<\/strong> con il flusso di blocchi nell&#8217;editor. Sta a te decidere come vuoi che funzioni il tuo blocco.<\/p>\n<p>WordPress ha un componente per l&#8217;output della barra degli strumenti di allineamento del testo, tuttavia nessuna gestione automatica dell&#8217;aggiunta delle classi corrette per allineare effettivamente il contenuto, sia all&#8217;interno dell&#8217;editor che nel frontend (per quanto ho scoperto almeno!). Dobbiamo aggiungere e aggiornare manualmente un attributo per l&#8217;allineamento del testo.<\/p>\n<h3>Aggiunta <code>BlockControls<\/code>e<code>AlignmentToolbar<\/code><\/h3>\n<p>Infine aggiungiamo <code>BlockControls<\/code>alla nostra <code>edit<\/code>funzione per il nostro output nella barra degli strumenti. Il componente per l&#8217;allineamento del testo <code>AlignmentToolbar<\/code>proviene dal <code>wp.blockEditor<\/code>pacchetto.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText, InspectorControls, BlockControls, AlignmentToolbar } = 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        textAlignment: {\n            type: 'string',\n        }\n    },\n    supports: {\n        align: ['wide', 'full']\n    },\n    edit: (props) =&gt; {\n        const { attributes, setAttributes } = props;\n        const alignmentClass = (attributes.textAlignment != null)? 'has-text-align-' + attributes.textAlignment: '';\n\u00a0\n        return (&lt;div className={alignmentClass}&gt;\n                &lt;InspectorControls&gt;\n                    ... \n                &lt;\/InspectorControls&gt;\n                &lt;BlockControls&gt;\n                    &lt;AlignmentToolbar\n                        value={attributes.textAlignment}\n                        onChange={(newalign) =&gt; setAttributes({ textAlignment: newalign })}\n                    \/&gt;\n                &lt;\/BlockControls&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\u00a0\n    },\n    save: (props) =&gt; { \n        const { attributes } = props;\n\u00a0\n        const alignmentClass = (attributes.textAlignment != null)? 'has-text-align-' + attributes.textAlignment: '';\n        return (&lt;div className={alignmentClass}&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    }\n});<\/code><\/pre>\n<p>Nota che ho escluso il contenuto di tutto ci\u00f2 che abbiamo creato nel <code>InspectorControls<\/code>passaggio precedente per abbreviare il codice.<\/p>\n<p>Tra la riga <code>#37<\/code>e <code>#42<\/code>l&#8217;altro c&#8217;\u00e8 l&#8217;intero contenuto della nostra barra degli strumenti (a parte l&#8217;allineamento dei blocchi automaticamente aggiunto dalla <code>supports<\/code>propriet\u00e0 e la formattazione del testo aggiunta dai nostri <code>RichText<\/code>componenti). Usiamo <code>BlockControls<\/code>per accedere alla barra degli strumenti e all&#8217;interno aggiungiamo il <code>AlignmentToolbar<\/code>componente.<\/p>\n<p>Come abbiamo fatto diverse volte con gli input, forniamo un <code>value<\/code>supporto per mostrare il valore salvato e un <code>onChange<\/code>supporto per aggiornare il nostro attributo al <code>AlignmentToolbar<\/code>componente. L&#8217;attributo che utilizzeremo per memorizzare l&#8217;allineamento del testo scelto \u00e8 definito <code>textAlignment<\/code>e deve essere di tipo <code>string<\/code>. Come al solito puoi fornire un <code>default<\/code>per assicurarti che i blocchi appena creati ottengano un allineamento predefinito.<\/p>\n<p>Per garantire che il blocco emetta le informazioni sull&#8217;allineamento e venga anche disegnato correttamente (quindi vediamo effettivamente l&#8217;allineamento della modifica del testo) sia nell&#8217;editor che nel frontend, \u00e8 necessario impostare manualmente la classe corretta sul div di wrapping. In entrambi <code>edit<\/code>e <code>save<\/code>definisco una variabile che controlla se <code>attributes.textAlignment<\/code>\u00e8 impostata. Se lo \u00e8, costruisco il nome della classe seguendo gli standard di WordPress per gli allineamenti del testo, che \u00e8 &quot;has-text-align-(left|center|right)&quot;. Con questa classe WordPress applicher\u00e0 il suo stile al nostro blocco e si assicurer\u00e0 che il nostro blocco venga allineato visivamente correttamente, sia nell&#8217;editor che nel frontend.<\/p>\n<h3>Aggiunta di barre degli strumenti personalizzate con i nostri pulsanti<\/h3>\n<p>Puoi anche aggiungere i tuoi pulsanti nella barra degli strumenti per fare tutto ci\u00f2 che desideri quando fai clic su di essi. Per fare ci\u00f2 ti consigliamo di aggiungere il componente <code>Toolbar<\/code>e all&#8217;interno di questo elemento aggiungere un <code>IconButton<\/code>(entrambi nel <code>wp.components<\/code>pacchetto). Tutto dentro <code>BlockControls<\/code>ovviamente.<\/p>\n<p><strong>Nota<\/strong>: secondo WordPress, il log delle modifiche di Gutenberg <code>IconButton<\/code>\u00e8 deprecato a favore dell&#8217;utilizzo di <code>Button<\/code>. Tuttavia, non riesco a visualizzare un&#8217;icona utilizzando il <code>Button<\/code>componente, indipendentemente da ci\u00f2 che faccio, anche se dovrebbe supportarlo. Quindi d&#8217;ora in poi user\u00f2 <code>IconButton<\/code>.<\/p>\n<p>Ovviamente puoi combinare pi\u00f9 componenti della barra degli strumenti all&#8217;interno di <code>BlockControls<\/code>. Con il codice qui sotto aggiungiamo la barra degli strumenti di allineamento del testo e la nostra barra degli strumenti personalizzata con un pulsante dopo di essa.<\/p>\n<pre><code>&lt;BlockControls&gt;\n    &lt;AlignmentToolbar\n        value={attributes.textAlignment}\n        onChange={(newalign) =&gt; setAttributes({ textAlignment: newalign })}\n    \/&gt;\n    &lt;Toolbar&gt;\n        &lt;IconButton\n            label=\"My very own custom button\"\n            icon=\"edit\"\n            className=\"my-custom-button\"\n            onClick={() =&gt; console.log('pressed button')}\n        \/&gt;\n    &lt;\/Toolbar&gt;\n&lt;\/BlockControls&gt;<\/code><\/pre>\n<p>Il componente IconButton accetta un&#8217;icona <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dashicon di WordPress<\/a> o un SVG per il prop <code>icon<\/code>. Possiamo fornire alcuni altri oggetti di scena come <code>className<\/code>e <code>label<\/code>(appariranno nel suggerimento quando si passa il mouse sopra il pulsante). L&#8217;elica che ci interessa di pi\u00f9 \u00e8 ovviamente l&#8217; <code>onClick<\/code>elica che si attiva quando si fa clic sul pulsante. Qui possiamo fornire una funzione e sostanzialmente fare quello che vogliamo. Le possibilit\u00e0 sono infinite e dipendono da cosa vuoi fare. Nel codice sopra ho semplicemente console di registro qualcosa quando si fa clic sul pulsante. Man mano che avanziamo in questa serie di tutorial, probabilmente avrai alcune idee su come fare in modo che il tuo pulsante personalizzato faccia ci\u00f2 che vuoi che faccia.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7e57cd7.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-153353-61e50c7e57cd7.png\" alt=\"Crea blocco Gutenberg personalizzato - Parte 6: Barre degli strumenti\" ><\/a><\/p>\n<p>Questo \u00e8 ci\u00f2 che abbiamo fatto finora. Nella fase successiva della serie inizieremo a guardare cose pi\u00f9 avanzate e impareremo come creare i nostri componenti per utilizzare lo stato e altri vantaggi.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo post impareremo come aggiungere le barre degli strumenti di WordPress Gutenberg al nostro blocco; allineamento del testo, allineamento dei blocchi e le nostre barre degli strumenti personalizzate.<\/p>\n","protected":false},"author":1,"featured_media":153354,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,896,835,939,939,918,1110,814,814,835,844,844,865,865],"tags":[1168,1168],"class_list":{"0":"post-233479","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-altro","8":"category-codice","10":"category-guida-per-principianti","11":"category-gutenberg-6","14":"category-n-a","15":"category-plugin-2","18":"category-tutorial","20":"category-wordpress-6","22":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233479"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233479\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/153354"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}