В этом посте мы узнаем, как добавить панели инструментов WordPress в наш блок, то есть для выравнивания и выравнивания блоков. Мы также научимся добавлять собственные панели инструментов с собственными кнопками для выполнения пользовательских действий.
Добавление панелей инструментов
Чтобы добавить что-то на панель инструментов для нашего блока, нам нужно обернуть то, что мы хотим, внутри компонента с именем BlockControls
(from wp.blockEditor
). Внутри этого компонента мы можем добавить либо один из компонентов WordPress для стандартных панелей инструментов, которые мы знаем из других блоков (например, выравнивание), либо мы можем добавить нашу собственную панель инструментов.
По умолчанию блок будет иметь панель инструментов, содержащую только значок блока (для функциональности преобразования в) и меню блока, например, для удаления блока. Мы не можем удалить их, но мы можем добавить наши собственные кнопки и панели инструментов между ними.
Однако некоторые определенные компоненты WordPress сами по себе добавляют свои собственные панели инструментов. На данный момент наш блок показывает панель инструментов для форматирования текста, которая исходит от RichText
компонента, который мы добавили.
Добавление панели инструментов выравнивания блоков
Панель инструментов выравнивания блоков существует практически во всех типах блоков WordPress, поэтому давайте добавим ее и в наш блок. За кулисами существует компонент, BlockAlignmentToolbar
который мы могли бы добавить, однако я не рекомендую этого делать. Его использование требует, чтобы вы вручную обрабатывали классы для выравнивания блоков и убеждались, что блок расширяет свою ширину в редакторе при выборе «Широкая ширина» или «Полная ширина». К счастью, WordPress сделал это действительно простым, полностью автоматическим.
PS: Активная тема должна иметь активную поддержку темы для этих двух выравниваний блоков. Вы можете добавить поддержку для них с add_theme_support('align-wide')
помощью after_setup_theme
крючка.
Мы можем добавить новое свойство к нашей конфигурации объекта в registerBlockType()
, называемое supports
. Есть несколько других функций, но нас интересует вот что align
. Мы можем либо указать align
, чтобы true
добавить все возможные выравнивания, либо предоставить массив точных выравниваний, которые мы допускаем для нашего блока.
Что дает нам это в редакторе:
Если вы хотите, например, запретить кому-либо использовать Wide Width или Full Width, вы можете предоставить массив и исключить эти два. Названия блоков выравнивания следующие: left
, right
, center
, wide
и full
.
supports: {
align: ['left', 'right', 'center']
},
Нужно выравнивание по умолчанию?
По умолчанию блок не получает блочного выравнивания. Если вы хотите, вы можете установить значение по умолчанию, создав атрибут с ключом align
, установите тип string
и установите значение по умолчанию там. WordPress автоматически подключит этот атрибут к выравниванию блока.
attributes: {
align: {
type: 'string',
default: 'center'
}
},
supports: {
align: true
},
При этом всякий раз, когда создается новый блок нашего типа, выравнивание блока по умолчанию центрируется.
Беспорядок в стиле выравнивания блоков? Не наша вина
Примечание. Стиль блока по умолчанию из WordPress испортит поток содержимого вашего сообщения при использовании выравнивания блока по левому и правому краям. То же самое происходит и с другими типами блоков из WordPress, и это не только проблема нашего блока. Это вызвано добавлением float к элементу, который сворачивает родительский элемент. Поверьте мне, я пытался построить блок, чтобы избежать этой проблемы. Единственное, что я обнаружил, чтобы работать правильно, не связываясь с другими выравниваниями блоков, – это добавить стиль в редактор и настроить стиль плавающего положения.
Несмотря на это, WordPress упростил выравнивание блоков. Теперь давайте посмотрим на другие панели инструментов, которые мы можем использовать.
Добавление панели инструментов выравнивания текста
Если вам нужна панель инструментов для выравнивания текста, вы можете сделать это вместо выравнивания блока — на этой панели инструментов у нас есть только выравнивание по левому краю, по центру и по правому краю. На самом деле вы можете использовать как выравнивание текста, так и выравнивание блоков вместе — они работают по отдельности. Чтобы не путать пользователей, вы можете, например, добавить поддержку только выравнивания блоков по ширине и во всю ширину и использовать панель инструментов выравнивания текста для управления выравниванием по левому краю, по центру или по правому краю. Делая это, вы избегаете упомянутой выше проблемы с потоком блоков в редакторе. Вам решать, как вы хотите, чтобы ваш блок функционировал.
В WordPress есть компонент для вывода панели инструментов выравнивания текста, но нет автоматической обработки добавления правильных классов для фактического выравнивания контента — как внутри редактора, так и во внешнем интерфейсе (насколько я нашел, по крайней мере!). Нам нужно вручную добавить и обновить атрибут для выравнивания текста.
Добавление BlockControls
иAlignmentToolbar
Давайте, наконец, добавим BlockControls
в нашу edit
функцию для вывода на панель инструментов. Компонент для выравнивания текста взят AlignmentToolbar
из wp.blockEditor
package.
Обратите внимание, что я исключил содержимое всего, что мы создали InspectorControls
на предыдущем шаге, чтобы сократить код.
Между строками #37
находится #42
все содержимое нашей панели инструментов (кроме выравнивания блоков, автоматически добавляемого supports
свойством, и форматирования текста, добавляемого нашими RichText
компонентами). Мы используем BlockControls
для доступа к панели инструментов, а внутри добавляем AlignmentToolbar
компонент.
Как мы делали несколько раз с входными данными, мы предоставляем value
реквизит для отображения сохраненного значения и onChange
реквизит для обновления нашего атрибута в AlignmentToolbar
компоненте. Атрибут, который мы будем использовать для хранения выбранного выравнивания текста, определяется как textAlignment
и должен иметь тип string
. Как обычно, вы можете указать, default
чтобы вновь созданные блоки получали выравнивание по умолчанию.
Чтобы убедиться, что блок выводит информацию о выравнивании, а также получает правильный стиль (чтобы мы действительно видели выравнивание изменения текста) как в редакторе, так и во внешнем интерфейсе, нам нужно вручную настроить правильный класс в обертывающем div. В обоих случаях edit
я save
определяю переменную, которая проверяет, attributes.textAlignment
установлена ли она. Если это так, я создаю имя класса в соответствии со стандартами WordPress для выравнивания текста, то есть «has-text-align-(left|center|right)». С помощью этого класса WordPress применит свой стиль к нашему блоку и убедится, что наш блок визуально правильно выровнен, как в редакторе, так и во внешнем интерфейсе.
Добавление пользовательских панелей инструментов с собственными кнопками
Вы также можете добавить свои собственные кнопки на панель инструментов, чтобы делать все, что вы хотите, при нажатии на них. Для этого вам нужно добавить компонент Toolbar
и внутри этого элемента добавить IconButton
(оба в wp.components
пакете). Все внутри BlockControls
конечно.
Примечание. Согласно журналу изменений WordPress Gutenberg IconButton
устарел в пользу использования Button
. Однако я не могу заставить значок отображаться с помощью Button
компонента независимо от того, что я делаю, даже если он должен его поддерживать. Так что на данный момент я буду использовать IconButton
.
Очевидно, вы можете комбинировать несколько компонентов панели инструментов в файле BlockControls
. С помощью приведенного ниже кода мы добавляем панель инструментов выравнивания текста и нашу пользовательскую панель инструментов с одной кнопкой после нее.
Компонент IconButton принимает значок панели инструментов WordPress или SVG в свойство icon
. Мы можем предоставить некоторые другие реквизиты, такие как className
и label
(появится во всплывающей подсказке при наведении курсора на кнопку). Свойство, которое нас больше всего интересует, — это, очевидно, onClick
свойство, которое срабатывает при нажатии кнопки. Здесь мы можем предоставить функцию и в основном делать все, что захотим. Возможности безграничны и зависят от того, что вы хотите сделать. В приведенном выше коде я просто записываю что-то в консоль при нажатии кнопки. По мере того, как мы продвигаемся в этой серии руководств, вы, вероятно, получите некоторые идеи о том, как заставить вашу пользовательскую кнопку делать то, что вы хотите.
Это то, что мы сделали до сих пор. На следующем этапе серии мы рассмотрим более сложные вещи и узнаем, как создавать собственные компоненты для использования состояния и других преимуществ.