Как мы создаем админ-панели, о которых мечтают все владельцы сайтов
Делимся с вами первым материалом из серии статей о разработке сайтов на WordPress. Сегодня поговорим о том, как и для чего нужно делать хорошую удобную админку для каждого сайта. Давайте обсудим в комментариях!
В 2017 году WordPress запустил в бета-тестинг плагин Gutenberg, который позволял при помощи готового набора паттернов и блоков формировать страницы сайтов с уже готовой бизнес-логикой. Сегодня We Wizards активно пользуются этим расширением, чтобы создавать удобные и гибкие админ-панели для клиентов.
Раньше страничка на любой CMS делалась так:
- утверждалась статичная верстка;
- по ней на бэкенде создавался темплейт с полями для заполнения;
- пользователь заходил в админку и мог внести в эти поля текст или картинки.
То есть, редактирование материала на сайте было жестким и ограничивалось рамками заданного темплейта каждой страницы.
Потом появились зерокодинг-конструкторы, которые покорили индустрию тем, что любой юзер мог быстро создать полноценный сайт без каких-либо навыков программирования. По какой-то причине из всех крупных CMS только WordPress внедрил подобный инструмент, который можно использовать для коммерческой разработки.
Клиенту должно быть удобно работать с админкой
Один из офферов We Wizards заключается в том, что при работе с нашими сайтами владельцы смогут сами создавать новые уникальные странички из готовых компонентов. Проще говоря, им не нужно обращаться в поддержку, чтобы добавить новое поле или раздел на сайт, они делают это в два клика, просто переставляя блоки и меняя наполнение.
Например, у нас есть блок с текстом и картинкой, которые выводятся в цикле и формируют отдельный компонент. Теперь этот компонент может использоваться где угодно с разным наполнением.
Как мы делаем свои админ-панели?
Берем у дизайнера макеты, разбиваем на блоки и начинаем верстать:
- отдаем компоненты в работу фронтенд-разработчику;
- собранные блоки по мере готовности отправляются в бэкенд;
- и именно контент-менеджер собирает готовые блоки согласно дизайн-макетам.
Таким образом, разработка ведется параллельно и комплексно: фронтенд делает блок, бэкенд создает на него динамику, а контент-менеджер сразу размещает. Каждый элемент в отдельности очень легко поддерживать и кастомизировать, поэтому в итоге мы получаем прекрасно собираемый и масштабируемый сайт, четкое распределение задач и довольно высокие скорость и качество разработки.
Такой подход не только облегчает управление сайтом нашим заказчикам, но и позволяет внедрять интересные фичи и механики. При помощи блоков мы можем создавать и гибко управлять множеством вещей. Например, в одном из проектов мы интегрировали большое количество GА4-ивентов (аналитика и события по ней), которые включались и выключались в админке буквально через чекбокс. Это дало возможность маркетингу и аналитикам в бизнесе действовать независимо от нас и, следовательно, сэкономило кучу времени и денег клиенту.
Мы можем создавать блоки двумя разными способами:
- функция acf_register_block_type
- функция register_block_type()
Для создания полей в этих блоках используется плагин Advanced Custom Fields PRO (подробнее об этом в следующих статьях).
Такой подход позволяет полностью или частично изолировать логику блока от основного приложения. В нашей практике даже было разворачивание отдельного react или vue приложения в рамках gutenberg блока. Причем не обязательно блок должен находится в контентой части записи. WordPress позволяет использовать gutenberg и в области виджетов, с помощью этого можно конструировать модальные окна, навигационные меню и тд. А так же открываются следующие возможности:
- объединение ряда блоков одним функционалом путем клонирования групп полей (примером этому может служить функционал выбора события генерируемого на блоке в GA или создание сложного анимированного фона у блока);
- создание обособленого «микроприложения», например, блок с выводом записей, возможностью добавления фильтрации, пагинации, бесконечной прокрутки и т. д.;
- создание блока-обертки для внутренних блоков (слайдеры, сложные сетки);
- создание собственной колоночной системы по дизайн-макетам;
- создание конструктора форм обратной связи прямо в визуальном редакторе;
- условные блоки для отображения на определенном разрешении.
Разберем процесс создания блока с помощью функции acf_register_block_type
На хук инициализации плагина повесим функцию, в которой зарегистрируем блок. В данном случае это блок, отвечающий за вывод новостей:
В поле render_callback укажем функцию, отвечающую за вывод разметки блока, у нас это wwzrds_news_list_block_callback. Чтобы не загромождать файл, в этой функции мы объединим аргументы функции и поля ACF в один массив и передадим это все параметром в функцию получения шаблона.
В самом файле шаблона нам нужно вытащить эти данные. Для начала обозначим переменную $args, чтобы наша ide’шка не ругалась:
Далее обозначим значения полей по умолчанию:
Затем объединим входящие аргументы и дефолтные значения в один массив и распакуем его. Для этого мы используем функцию-хелпер, которая учитывает типы дефолтных значений и вложенные массивы, но можно использовать и стандартную функцию WordPress wp_parse_args:
Далее на основе этих пере��енных генерируем разметку. Саму разметку, стили и скрипты приводить не будем. Пропустим этот этап. В админке создаем группу полей со следующими правилами отображения:
Ну и создадим сами поля:
В режиме редактирования страницы добавляем наш созданный блок и смотрим что получилось.
Так выглядит панель с настройками блока:
И все изменения применяются в реальном времени в области редактора:
В итоге мы получаем настраиваемый блок с изолированной логикой, который можно встроить в любое место сайта:
Что еще важно сказать про преимущества такого редактора?
WordPress практически полностью перешёл на JSX-синтаксис, и все их новые темплейты рендерятся в HTML. Скорость работы при таком подходе феноменальная, потому что, по большому счёту, мы рендерим кэшированную статику, и это дает ощутимый прирост к нашей производительности. Кстати, с таким подходом очень удобно работать с бенчмарками, PageSpeed и с другими измерителями, в частности по методологии Lighthouse.
Такие админ-панели идеально подходят под корпоративные сайты любого размера и любой отрасли. Мы считаем, что это лучшее решение на рынке на сегодняшний день.