В статье "Создание своего Gutenberg-блока для WordPress на основе wordpress-create-block" мы рассматривали, как создать плагин, который будет давать возможность добавить секцию типа ЧаВо (FAQ) на сайт под управлением WordPress с помощью специального Gutenberg-блока.

Здесь хотелось бы расширить этот плагин добавлением настроек в боковой панели для возможности управления цветом и выравниванием заголовка. Основываться будем на файлах с репозитория на Github.

Управление настройками блока в основной области

Итак, настройки блока могут быть видны при редактировании текста (например, жирный или курсив). Для этого используется панель инструментов, которую мы уже видели. Для настройки кнопок в ней в редакторе Гутенберг существует компонент BlockControls. Ниже на скриншоте вы видите стандартный набор настроек для абзаца.

Настройки для редактирования текста с помощью BlockControls

Что касается этих настроек, их имеет смысл добавлять для RichText. В качестве разрешенных форматов к этому компоненту можно добавить такие опции:

Из всего перечисленного у нас уже есть 'core/bold' и 'core/italic'. Можем еще добавить 'core/text-color' в allowedFormats для возможности цветового выделения, а вот с помощью компонента BlockControls добавим возможность выравнивания:

Тут не весь код: не хватает объявления атрибута alignment и импорта компонентов BlockControls и AlignmentToolbar. Полный код вы найдете ниже.

Те опции, которые мы добавили, дадут нам возможность выбрать такие настройки:

Использование BlockControls для RichText

Боковая панель настроек находится справа от вашего основного контента и изменяется при выборе разных блоков. Предназначена она  для настроек на уровне блока и обычно отвечает за форматирование внутри выделенного блока. Может быть разделена на настройки и стили.

Чтобы добавить стили в виде цвета и отступов (margin, padding), нужно добавить такой код в блок supports файла block.json:

В результате при выделении блока мы увидим такие настройки:

Стили с помощью support

Все стили будут автоматически применяться для вашего блока при изменении любых значений, но тут нужно учитывать, что block.json  описывает стили основного компонента, но никак не вложенного(-ых). Поэтому нам придется воспользоваться настройками, заданными самостоятельно.

Для управления боковой панелью существует специальный компонент InspectorControls, который должен выводится для того элемента, к которому они относятся. Соответственно, настройки должны быть доступны при выделении соответствующего блока (главного или вложенных).

Также для добавления раздела настроек вам понадобится компонент Panel и/или PanelBody , который находится в пакете wp.components(то есть вам нужно импортировать PanelBody из  wp.components). Компонент позволяет открыть или свернуть настройки (initialOpen={true} для открытой панели), а также позволяет задать заголовок. Вы также можете определить собственный класс, иконку и прикрепить функцию события к триггеру открытия-закрытия.

Для размещения в PanelBody вы можете использовать такие компоненты:

  • ToggleControl
  • CheckboxControl
  • SelectControl
  • RadioControl
  • ColorPicker
  • ColorPalette и др.

Вы найдете больше компонентов в wp.components репозитории Github.

Цветовая палитра

Поскольку в этой статье мы размещаем прежде всего цветовые настройки, такой код позволит нам вывести цветовую палитру (ColorPalette) для управления цветом текста и фона для нашего аккордеона.

Код для save.js вы найдете ниже.

Такой код даст нам настройки вида

Цветовые настройки блока Gutenberg

Цвета #222222 и transparent заданы в файле index.js или в block.json в качестве дефолтных.

Учтите, что вам нужно сначала обязательно импортировать используемые компоненты из 2-х пакетов:

Ошибка при импорте компонента

Поскольку вы не всегда можете знать, какой пакет содержит какие компоненты, при разработке блока для редактора Гутенберг вы можете увидеть ошибку в консоли типа Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.[missing argument].

Эта ошибка может возникнуть, если вы попытаетесь импортировать несуществующий компонент. Вам нужно посмотреть в репозитории компонентов, из какого пакета берется нужный вам и импортировать его правильно. Например, так:

Панель цветовых настроек

Вместо таких панелей, которые занимают довольно много места, мы можем вывести компонент PanelColorSettings, который будет компактней за счет того, что изначально цветовая палитра спрятана, но при этом вы видите цвет текста и фона блока.

В index.js нам нужно добавить атрибут alignment для BlockControls, о котором речь шла выше + описать атрибуты titleTextColor, contentTextColor, titleBgColor и contentBgColor, которые мы уже частично использовали в компоненте ColorPalette для возможности задать цвет текста и фона отдельно для заголовка и основного текста.

Код в файле index.js:

Поскольку изначально мы использовали для блока стили, основанные на CSS-переменных, будем использовать их для того, чтобы изменить цвета всего блока. Все переменные были объявлены для :root. Однако, если мы перенесем их значение на уровень стиля блока, то это наверняка переопределит цвета по умолчанию. Поэтому нам нужно встроить инлайн-стили в наших файлах edit.js и save.js для основного компонента.

Код в файле edit.js:

Визуально в админке WordPress это выглядит так:

Настройкис помощью PanelColorSettings

Код в файле save.js:

После сохранения блока на сайте мы увидим такой аккордеон:

Цветовые настройки для Gutenberg-блока аккордеон в WordPress

Файлы с настройками вы можете найти на Github.

В нашем плагине мы не передаем настройки блока от родительского блока к дочерним потому, что используем CSS-переменные для изменения цвета. Однако вам может понадобится это сделать в том случае, если вы меняете вид блока в зависимости от какой-то из настроек. Пример такой передачи данных вы найдете в статье Как передавать данные между блоками Gutenberg с помощью контекста блока.

 

Автор: Админ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *