На пути к 17-й версии WP-Recall мы получили единое апи кнопок.
API Buttons вошло в ядро плагина в версии 16.21 и описывается классом classes/class-rcl-button.php
Целью введения стала стандартизация кнопок, их внешнего вида и состояний.
Внешний вид кнопок:
Как видно из скриншота выше - кнопки разделены на 3 основных вида: primary (по умолчанию), simple и clear.
В будущем возможны некоторые косметические изменения в стилях кнопок. Это первая реализация - высказывайтесь "за" и "против" и аргументируйте. Мы открыты к обсуждению.
Кнопки имеют размеры:
Кнопки имеют состояния (status): loading, disabled, active и атрибуты. Полный список вы найдёте ниже.
Разработчикам предлагается использовать функцию rcl_get_button( $args );
где в аргументах передают все возможные параметры для формирования кнопки.
Список аргументов:
$args = [ 'type' => 'primary', // тип кнопки: primary, simple, clear 'label' => false, // текст кнопки 'counter' => false, // счетчик 'icon' => false, // иконка fa-star-o 'icon_align' => 'left', // положение иконки: left, right 'icon_mask' => false, // маска на иконке: 1 - чтоб включить 'avatar' => false, // аватарка - <img> tag и размер (26) 'size' => 'standart', // размеры - small, standart, medium, large, big 'fullwidth' => false, // кнопка на полную ширину: 1 - чтоб включить 'style' => false, // дополнительный стиль. например: justify-content: space-between; 'title' => false, // атрибут title. Например: В личный кабинет 'href' => 'javascript:void(0);', // урл назначения 'class' => false, // дополнительный класс к кнопке 'id' => false, // дополнительный id к кнопке 'onclick' => false, // для js. например: alert("Клик!") 'data' => false, // data-атрибут. Например: ['feed' => 3] 'submit' => false, // для передачи в js реколл onclick="rcl_submit_form(this);return false;" 'status' => false, // состояние кнопки: loading, disabled, active 'avatar_circle' => false, // только для обертки .rcl-wrap__wiget ];
Базовое использование:
$args = [ 'label' => 'В кабинет', 'icon' => 'fa-id-badge', ]; return rcl_get_button( $args );
Получим стандартную кнопку с иконкой:
Примеры:
Простая кнопка - иконка:
$args = [ 'icon' => 'fa-user-o', ]; return rcl_get_button( $args );
Текст и иконка справа и счётчик и маска:
$args = [ 'label' => 'Рейтинг', 'counter' => '2398', 'icon' => 'fa-star-o', 'icon_align' => 'right', 'icon_mask' => '1', ]; return rcl_get_button( $args );
Аватарка и текст и счетчик:
$args = [ 'label' => 'В кабинет', 'counter' => '67', 'avatar' => get_avatar(1, 26), // user_id and sizes ]; return rcl_get_button( $args );
Полная ширина:
$args = [ 'label' => 'В кабинет', 'icon' => 'fa-plane', 'fullwidth' => '1', ]; return rcl_get_button( $args );
Полная ширина. Иконки разнесены и ограничения на макс. ширину:
$args = [ 'label' => 'В кабинет', 'icon' => 'fa-plane', 'icon_align' => 'right', 'fullwidth' => '1', 'style' => 'justify-content: space-between;max-width: 400px;', ]; return rcl_get_button( $args );
В атрибут style вписывайте дополнительные стили для кнопки. Например можно передать:
$args = [ 'label' => 'В кабинет', 'icon' => 'fa-plane', 'style' => 'background:red;box-shadow:6px 6px 12px -6px #000;', ]; return rcl_get_button( $args );
и получим:
Использование состояний кнопок:
status — active:
Активная кнопка (текущая страница, вкладка) — клик по ней не ведет никуда
status — disabled:
для переходных процессов (например пока выполняется js)
status — loading:
режим ожидания и загрузки. Например пока выполняется ajax-запрос
$args = [ 'label' => 'В кабинет', 'icon' => 'fa-plane', 'status' => 'loading', ]; return rcl_get_button( $args );
Использование обёрток (wrappers):
Если не оборачивать в дополнительный div — то все кнопки будут горизонтально выравниваться от левого края.
— но в таком случае они будут инлайновые. Если вам все же надо чтобы кнопки шли с новой строки — оборачивайте в div с классом rcl-wrap
— тогда кнопки будут идти в начале строки и позиционироваться слева (по умолчанию).
Но если нам надо кнопку или несколько кнопок выводить иначе — смотрим примеры ниже: потребуется тег «a» (наши кнопки) обернуть так:
<div class="rcl-wrap rcl-wrap__***"> <a></a> <a></a> </div>
rcl-wrap
— задает общий контейнер-обертку. После него надо дописывать еще модификатор.
Почему выбрано имя, например:
rcl-wrap__right
, а неrcl-wrap__bttn-right
? Потому что контейнер-обёртку для позиционирования можно будет использовать не только для кнопок. А вообще глобально (картинки, другие блоки…) — используя единые стили и значит писать меньше стилей придётся
одна кнопка — слева:
Просто rcl-wrap
устанавливает выравнивание слева. т.е. для кнопок слева больше писать кроме rcl-wrap
не нужно.
одна кнопка — справа:
Добавляем основную обёртку и модификатор: rcl-wrap rcl-wrap__right
пример:
<div class="rcl-wrap rcl-wrap__right"> <a></a> </div>
Кнопки вертикально — слева:
Структура:
<div class="rcl-wrap rcl-wrap__vertical"> <a></a> <a></a> <a></a> </div>
Добавляем rcl-wrap__vertical
— для расположения столбцом. Выравнивание добавлять не нужно — по умолчанию выравнивается слева:
Кнопки вертикально — справа:
Структура:
<div class="rcl-wrap rcl-wrap__right rcl-wrap__vertical"> <a></a> <a></a> <a></a> </div>
— в этом случае блок позиционируется справа, а кнопки выровнены по левому краю. Если надо их вывести на всю ширину или по центру (при расположении обертки справа и в вертикальном представлении кнопок конечно же) — пишите свои стили. т.к. в этом блоке могут быть разные типы кнопок (с иконками и без, текстовые или нет, ну и так далее) — тут тонко самостоятельно настраивайте под свои задачи.
Пример выравнивания:
<div class="rcl-wrap rcl-wrap__right rcl-wrap__vertical" style="align-items: normal;"> <a></a> <a></a> <a></a> </div>
Специальный стиль:
Идеально подойдет для сайдбаров и виджетов, для меню. Готовый к использованию напоминает виджеты ютуба
p.s. ширину здесь я специально ограничил 350px — в стилях апи кнопок ее нет — полная ширина. Учитывайте это.
Структура:
<div class="rcl-wrap rcl-wrap__wiget" style="width: 350px;"> <php $args["size"] = "medium"; $args["type"] = "clear"; $args["avatar"] = get_avatar(1, 26); $args["counter"] = "3"; $args["label"] = "Otshelnik-Fm"; echo rcl_get_button($args); ?> ... </div>
Мы рассмотрели примеры нового апи кнопок и оберток. Уже сейчас можно начинать использовать. И что хорошо - не задумываться о стилизации. Всё стремится к тому чтобы вся экосистема плагина выглядела единой системой.
Есть идеи, замечания, предложения?
- пишите в комментариях.
Отлично, буду изучать, теперь в выходные не надо искать занятия 😁
да там всё просто))
Изучай - может предложения какие будут.
Было бы неплохо добавить в запись классы, которые можно было бы использовать при формировании кнопки на js
а что за классы?
Что-то я не понял.
Для js там onclick - в него функцию обработчик вписывать - ну и уже ловить
Ну если мне на js надо сформировать кнопку, например среднего размера с иконкой слева, то как это сделать?