4 декабря 2019 в 23:08
на сайт, и вы сможете вступить в группу.
Вы сможете подписаться на выход новых материалов группы.
Вы сможете подписаться на новые комментарии к выбранной записи группы.

Редактор блоков WordPress. 4 часть - несколько способов добавить свою SVG иконку

Во 2-й части я пообещал рассказать - как можно добавить свою иконку в разрабатываемый блок. В этом руководстве я покажу ещё 2 способа как это можно сделать.

Во 2-й части был назван самый простой, но самый ограниченный способ по добавлению иконки.
icon: 'universal-access-alt' - из вордпресс набора dashicons. Иконок и вправду там очень мало и они уже "приелись".

Там вы просто указываете имя иконки:
dashicons-welcome-learn-more без приставки dashicons-

Описание свойства вы найдёте в справочнике Gutenberg.

Итак - первый способ вставить иконку с dashicons мы рассмотрели.


Далее мы будем работать с svg. Скачиваем нужную нам иконку формата svg и открываем её в текстовом редакторе. Нам потребуется её содержимое.

1 способ: Добавим svg как HTML

Можно использовать компонент:

wp.element.RawHTML

он позволяет передать строку в виде html:

const ico = wp.element.RawHTML( {
    children: '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z" /><path d="M19 13H5v-2h14v2z" /></svg>'
} );
// 
wp.blocks.registerBlockType( 'otfm-html/block-hr', {
    icon: ico,  // svg
// и далее всё остальное

- на второй строке в компонент передаём svg "как есть". И указываем её в нужном месте функции как иконку (6-я строка)

Это наиболее простой метод указать svg-иконку.


2 способ: Создадим svg-элемент

Этот способ несколько сложней, на как по мне - не содержит мусора обязательных атрибутов svg. Их Gutenberg создает самостоятельно.

Рассмотрим нашу svg-иконку:

<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z" /><path d="M19 13H5v-2h14v2z" /></svg>

Для наглядности - рассмотрим её в виде вложенной структуры:

<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
    <path fill="none" d="M0 0h24v24H0V0z" />
    <path d="M19 13H5v-2h14v2z" />
</svg>

В теге svg у нас размеры блока viewBox="0 0 24 24" - ширина и высота в 24 пикселя - стандарт иконки при регистрации WordPress блока.
Далее у нас идут 2 тега "пути" path и они содержат атрибуты: fill и d - координаты описывающие кривые.
По ним мы и создадим элемент.

Вот как это выглядит:

const iconLine = wp.element.createElement('svg', {
        width: 24,
        height: 24
    },
    wp.element.createElement('path', {
        fill: "none",
        d: "M0 0h24v24H0V0z"
    }),
    wp.element.createElement('path', {
        d: "M19 13H5v-2h14v2z"
    })
);

wp.blocks.registerBlockType('otfm-html/block-hr', {
    icon: iconLine, // svg
    // остальное

- на 1-й строке мы создаём svg-элемент и вложенностью создаем еще 2 path (5, 9 - строки) тега. Внутри svg задаем атрибуты ширины и высоты иконки, а внутри path указываем fill и d атрибуты.
Мы дальше можем передать нашу переменную в функцию (15 строка)


Отличия 1-го способа с svg и второго

Первый способ передает html как есть. т.е. что пришло - то и будет на выходе. В руководстве на это обращают внимание - неэкранированный html. На простых данных думаю проблем не будет.

А вот второй способ предпочтительней - дело в том что ядро блоков WordPress, svg дополняет элементами доступности: добавляет атрибуты aria-hidden, role, и focusable. т.е. делает всё по стандартам.


Выделение цветом иконок

Вы можете передать бекграунд или цвет для иконки:

icon: {
    // добавление бекграунка
    background: '#7e70af',
    // добавление цвета иконки
    foreground: '#fff',
    // dashicon иконка
    src: 'book-alt',
} ,

Вот такие способы добавления иконок к вашим блокам вам доступны. Надеюсь данный материал был вам полезен.

Если знаете ещё варианты - поделитесь в комментариях.

Комментариев нет

Оставьте комментарий

Авторизация
*
*
Регистрация
*
*
*
Настоящим подтверждаю, что я ознакомлен и согласен с условиями политики конфиденциальности
Генерация пароля
Закрыть