Créer un bloc Gutenberg personnalisé – Partie 5 : Paramètres de l’inspecteur
Dans les étapes précédentes, nous avons appris les bases du rendu des composants et des attributs dans un bloc. Dans cette étape, nous allons nous concentrer sur ce que WordPress (au moins dans le code) appelle Inspector: la barre latérale sur le côté droit de l’éditeur. Nous aborderons quelques nouveaux composants qu’il est logique de placer dans la barre latérale et comment les gérer.
Composant inspecteur/barre latérale
Pour insérer vos paramètres personnalisés et HTML dans la barre latérale de l’inspecteur, vous encapsulez tout dans un composant appelé InspectorControls
. Tout ce que vous mettez à l’intérieur de ce composant sera affiché dans la barre latérale et non à l’intérieur du bloc/éditeur lui-même. Vous pouvez essentiellement mettre le composant et son contenu partout dans le retour de la edit
fonction.
En dehors de cela, vous géreriez les paramètres à l’intérieur de la barre latérale comme ils l’étaient à l’intérieur du bloc. Chaque paramètre nécessite un attribut, et vous chargez et mettez à jour les attributs de la même manière.
Voyons d’abord à quoi ressemble la barre latérale de notre bloc (lorsque notre bloc est actif dans l’éditeur), en nous basant sur le code que nous avons trouvé à l’étape précédente.
Tous les blocs afficheront par défaut l’icône, le nom et la description du bloc, ainsi que la section Avancé – réduite. Dans Advanced, vous trouverez une entrée de texte pour fournir une classe CSS pour le bloc.
Ajout d’une section de barre latérale et de certains paramètres
La barre latérale est divisée en sections (appelées panneaux dans le code), et pour une conception et une fonctionnalité optimales (y compris la fonctionnalité de réduction ouverte), nous devons utiliser les composants de WordPress pour générer correctement les panneaux.
Utilisez le composant PanelBody
pour ajouter une section (celles que vous pouvez ouvrir ou réduire), trouvé dans le wp.components
package. Le composant accepte quelques accessoires, par exemple pour le titre et si le panneau doit être ouvert ou fermé par défaut. Vous pouvez également fournir une classe personnalisée, une icône et attacher une fonction d’événement au déclencheur d’ouverture-fermeture.
Dans PanelBody
WordPress recommande ensuite d’utiliser le PanelRow
composant qui agit comme des conteneurs génériques dans le panneau – pour assurer la rationalisation de la conception. Ce composant applique automatiquement un style de marge et de ligne flexible pour votre contenu. En raison du flex-direction: row
style " ", vous devez envelopper chaque paramètre dans un seul PanelRow
. Ou vous pouvez l’ignorer complètement et prendre la responsabilité de le styler vous-même avec des divs et autres.
Ajout d’un panneau et de paramètres
Ajoutons un panneau de barre latérale pour notre bloc avec quelques paramètres à l’intérieur, juste pour le voir en pratique. Nous allons ajouter un contrôle à bascule, une entrée de sélection, un sélecteur de couleurs et une case à cocher – juste pour acquérir une certaine expérience avec différents types de composants d’entrée. J’ai laissé le contenu du bloc (avec les deux RichText
s) et la save
fonction comme avant.
Comme toujours, nous commençons par déstructurer les composants et la fonction que nous voulons utiliser. À attributes
l’intérieur registerBlockType()
, nous définissons un attribut par entrée et correspondons au type – par exemple, le contrôle bascule attend un booléen et parce que les valeurs de la liste déroulante sont des chaînes, cet attribut doit également être une chaîne de type.
À la ligne, #41
nous démarrons le InspectorControls
composant, et tout, depuis ce point jusqu’à la ligne #80
, apparaîtra dans la barre latérale. Le reste apparaîtra dans l’éditeur lui-même, et je n’y ai apporté aucune modification.
À l’ intérieur, nous créons d’abord un panneau avec PanelBody
et avec la prop initialOpen
définie sur true, nous disons à Gutenberg que ce panneau doit être ouvert par défaut. Et ensuite, c’est à nous de décider quoi ajouter à l’intérieur de chacun PanelRow
.
Pour le composant, ToggleControl
nous utilisons les mêmes props que nous avons fait auparavant avec les entrées de texte, sauf qu’au lieu de la prop, value
nous fournissons la valeur de l’attribut à l’intérieur de la prop checked
. Cela s’applique à toutes les entrées qui attendent un attribut coché en HTML brut, par exemple les cases à cocher. Pour les boutons radio, vous utiliserez le prop selected
, car c’est également ce que vous utiliserez en HTML brut. N’oubliez pas que l’attribut de cette entrée doit être de type boolean
.
Quant à la CheckboxControl
case à cocher lors de la gestion d’un singulier, elle fonctionne exactement de la même manière que ToggleControl
– elle renvoie un booléen, qu’elle soit cochée ou non.
Le SelectControl
génère une liste déroulante de sélection et attend les choix possibles sous forme de tableau dans le prop options
. Chaque élément doit être un objet avec les propriétés label
et value
. Il en va de même pour les cases à cocher et les boutons radio (RadioControl
). Dans des circonstances normales, vous généreriez probablement les choix en tant que variable en dehors de la sortie HTML.
Vous remarquerez peut-être que le ColorPicker
fonctionne un peu différemment des autres car il s’agit d’un composant plus complexe et non d’une entrée HTML standard. Fournissez l’accessoire color
pour la couleur enregistrée, et au lieu de onChange
(se déclenche une fois en cliquant mais aussi à chaque fois que la valeur est modifiée pendant le glissement – ce qui peut entraîner de nombreux incendies), utilisez onChangeComplete
. Le prop renvoyé dans cet événement est également un objet dans lequel nous devons décider quelle partie nous voulons enregistrer dans notre attribut. Dans cet exemple, nous voulons enregistrer la valeur hexadécimale (sans alpha/opacité), donc à l’intérieur, setAttributes()
nous extrayons la hex
propriété de l’ color
objet renvoyé. C’est aussi pourquoi nous ajoutons la propriétédisableAlpha
quant à supprimer l’interface utilisateur du canal alpha (pour contrôler l’opacité) car cela n’a aucun sens de l’offrir à l’utilisateur lorsque nous n’enregistrons jamais la valeur d’opacité.
Chacun des composants a un label
accessoire disponible à l’exception du sélecteur de couleurs. Si vous souhaitez afficher une étiquette ou du texte avant, vous devrez modifier le code HTML ou le style pour vous assurer qu’il est beau.
Vous pouvez évidemment ajouter autant de panneaux que vous le souhaitez, il vous suffit d’ajouter un autre PanelBody
composant après le précédent.
Si vous souhaitez en savoir plus sur l’ajout de paramètres de bloc, j’ai des didacticiels séparés pour des paramètres et des composants plus complexes pour Inspector. Comment ajouter une sélection d’image et comment ajouter un panneau de paramètres de couleur.
Manutentionsave
J’ai laissé la save
fonction telle qu’elle était avant. C’est à vous de décider et tout dépend de ce que les paramètres contrôlent dans la sortie. Vous savez déjà comment obtenir les valeurs de chaque paramètre. Par exemple, supposons que l’attribut booléen activateLasers
contrôle le rendu ou non d’un élément HTML personnalisé. Si l’attribut est true
une div doit être sortie, sinon non. if
Vous pouvez le faire avec la vérification if-check traditionnelle ou utiliser la ligne et l’ &&
opérateur de JSX. En savoir plus à ce sujet dans le guide de React pour le rendu conditionnel.
Parce que nous utilisons RichText
cette sortie ne serait pas visible dans l’éditeur, mais elle apparaîtra dans le frontend.
Vous trouverez plus de composants dans le wp.components
repo Github. La plupart de ces dossiers devraient vous fournir un fichier Lisez-moi avec de la documentation sur la façon de l’utiliser. J’ai appris la plupart de cela en regardant dans ce dépôt et aussi sur les composants de base de WordPress comment ils l’ont fait.
Dans la prochaine étape de la série, nous nous concentrerons sur la façon de contrôler la barre d’outils du bloc. Nous allons apprendre à gérer par exemple l’alignement d’un bloc et à ajouter des boutons personnalisés à la barre d’outils.