Полезные инструменты для тех, кто в одной лодке с Bitrix
Александр П.
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью, совершенствовал существующую. БУС обладает всем необходимым для разработки веб-сайтов: от обширного набора API для разработчиков: запросы к БД, ORM, HTTP клиент, CSV и XML парсер, и т.д., до многофункционального административного интерфейса, интеграции с 1С: Предприятие, инструментов аналитики, конструктора сайтов и другого.
Хотя новые инструменты и возможности появляются, происходит это не так быстро, как хотелось бы разработчикам. К тому же, некоторые новые возможности БУС не предназначены для разработчиков. Совокупность этих факторов заставляет разработчиков придумывать собственные решения, публиковать их и пользоваться. Для таких расширений у компании 1С есть площадка 1С Битрикс: Маркетплейс, но в этой статье они не рассматриваются.
Инструменты, которые будут рассмотрены в этой статье, были найдены в рамках решения конкретных проблем разработки под Битрикс. С этими проблемами Битрикс разработчики сталкиваются каждый день. Некоторые мы решаем, с некоторыми - смирились. Вот лишь некоторые их них:
Обратите внимание на раздел “Блоги”, ведь они сами по себе являются наборами справочных материалов. Однако представлены далеко не все блоги по Битрикс. Например, отсутствует отличный блог “Mr.Cappuchino”.
Отдельно хочется сказать о небезызвестном инструменте Bitrix API Online. Это кладовая исходного кода Битрикс. Его суть проста - показать исходный код любого метода в модулях Битрикс. Ввиду отсутствия исчерпывающей официальной документации для API у Битрикс, разработчикам часто приходится самостоятельно разбираться в исходном коде. Инструмент Bitrix API Online отлично подойдет, если под рукой нет скачанного исходного кода. Инструмент предлагает поиск по модулю, классу и названию метода. Страница исходного кода метода содержит ссылку на официальную документацию и возможность комментирования. Не хватает только версионирования модулей.
Плагинов интеграции PHPStorm с Битрикс не много. На момент написания статьи - только 2.
Начнем с Bitrix Framework Support. Приведу перечень возможностей, чтобы заинтересовать вас:
Плагин поддерживает PHPStorm версии 8 и выше.
Следующий плагин - BitrixLangCompletion - облегчает работу с языковыми файлами в Битрикс. Разработчик заявляет следующие возможности:
Плагин поддерживает PHPStorm версии 9 и выше.
Увы, но на этом плагины для PHPStorm заканчиваются. Но есть еще несколько интересных вещей.
bxApiDocs - документация 1С-Битрикс в IDE PhpStorm. bxApiDocs - это папка с модулями 1С-Битрикс: Управление сайтом - Бизнес, в которой удалены лишние файлы, добавлены константы, события и phpDocs. В комплекте с IDE колоссально облегчает жизнь разработчику. bxApiDocs состоит из:
Решение этой проблемы простое:
Те, кто следует стандартам оформления кода (а вы ведь следуете, правда?), знают, что у Битрикс есть правила написания исходного кода на PHP. На сайте Интерволги есть отличная статья о том, “Как настроить phpStorm для работы с 1С-Битрикс”.
В заключении поговорим о шаблонах кода, которые в PHPStorm называются Live Templates. Первый набор - шаблоны компонентов bxCompSnpt. Аббревиатуры этих шаблонов разворачиваются в полноценный вызов компонентов с форматированием, комментариями к параметрами и возможностью пройтись по всем параметрам и задать значения. Параметры компонента разбиты на категории с помощью “регионов”, поэтому длинный лист параметров можно свернуть, и вызов компонента будет выглядеть элегантно и коротко: Добавить такую возможность в свою IDE достаточно просто - нужно просто скопировать один .xml файл в определенную папку.
Еще один набор из 93 шаблонов вы найдете в нашей статье “44 Live Templates для Битрикса + ещё 49 для D7”. Приведенные в статье шаблоны не разворачиваются в вызовы компонентов. Они призваны ускорить работу с наиболее часто используемым API Битрикс. Например, если необходимо кэшировать дополнительные данные в result_modifier.php, воспользуйтесь шаблоном “cache”, который развернется в строку “$this->__component->SetResultCacheKeys(array(" $END$ "));”. Курсор будет установлен в позиции $END$, где вы сможете сразу вписать название ключа массива $arResult. Согласитесь, намного быстрее, чем писать эту строку вручную. Подключить модуль инфоблоков еще проще: ibl + <Tab> = CModule::IncludeModule("iblock"). Установка еще проще - нужно просто импортировать .jar файл как файл настроек.
Прелесть шаблонов в том, что они легко изменяются под свои нужды.
Инструмент прост в установке и использовании. Закидываем скрипт на сайт и открываем в браузере. Увидим следующую форму: Необходимо заполнить поля “Логин”, “Пароль” и “Повтор пароля”. По логину будет произведен поиск пользователя в БД. Если такой пользователь найден, то его данные будут обновлены: произойдет активация пользователя, присоединение к группе администраторов, смена пароля на указанный. Опционально, если задан email, он также будет обновлен в БД. Если пользователя с указанным логином не существует, то такой пользователь будет создан. Вдобавок, скрипт еще и авторизует пользователя.
После выполнения, такой скрипт обязательно нужно удалить с сайта, чтобы не оставлять дыр для злоумышленника. Тем более, что сделать это очень легко: скрипт любезно предлагает удалить себя после завершения работы. Также перед размещением на сайте, советуем переименовать скрипт в целях безопасности.
Недостаток скрипта в том, что он загружает все имена файлов из таблицы b_file в оперативную память. Это может привести к падению скрипта в случае нехватки памяти.
Запускать скрипт необходимо из консоли. Есть простор для доработки: прикрутить UI и оптимизировать работу скрипта по использованию оперативной памяти.
Для создания типичного набора страниц для таблицы БД (страница списка и детальная страница) есть отличная библиотека, которая значительно упрощает этот процесс. Встречайте - DigitalWand/admin_helper.
Это “API для сборки кастомных админок в Битриксе”. Модуль реализует подход MVC. В данной статье я не буду подробно описывать структуру модуля и все его возможности. Этому можно посвятить отдельную статью. Кстати, так и сделали разработчики модуля. Есть также статья на Хабр и подробная документация по API.
Здесь же я расскажу, как выглядит создание страниц с использованием модуля:
Плата за удобство - необходимость создания ORM сущности Битрикс. При желании использовать модуль для сущностей, не использующих ORM Битрикс, можно подготовить для таких сущностей класс-обертку, реализующий необходимые методы.
В отличие от HLB есть некоторые преимущества:
Принцип работы достаточно прост:
Вот так выглядит страница настроек из тестового пример модуля:
Поддерживаются однострочные и многострочные текстовые поля, поля ввода пароля, цифр, времени, поле с визуальным редактором и др.
В официальном репозитории есть подробное описание работы с модулем и тестовый пример.
У компании Intervolga есть свое решение для миграций - intervolga.migrato. Это open-source решение с репозиторием на github. Подробно оно описано в нашей статье. Решение отличается принципиально другим подходом к вопросу миграций и поддержкой большого количества сущностей. Нет необходимости описывать каждую миграцию в виде кода. Модуль позволяет выгрузить структуру инфоблоков, настройки свойств, групп пользователей, сайтов, ORM-сущности и т.д. в XML. Эти XML-файлы можно разместить в репозитории проекта, и на другом сервере восстановить из них структуру БД. Модуль способен мигрировать много сущностей, полный список которых есть в Wiki репозитория. Т. к. решение open-source, любой желающий может разработать механизм миграции для недостающей сущности и предложить pull request. В wiki репозитория есть инструкцию по разработке класса миграции для новой сущности.
Начнем с Twig. Для использования шаблонизатора Twig на Github есть решение maximaster/tools.twig. Чтобы начать использовать Twig в Битрикс, нужно:
В целом, решения для шаблонизатора Twig мне показалось более удобным и адаптированным под Битрикс.
Шаблонизаторы делают код более элегантным и читаемым для тех, кто с ними знаком. Однако для новичков это наоборот может вызвать некоторые трудности в понимании.
Мы создаем папку нового шаблона, добавляем файл template.php и первое, что мы делаем, логируем $arResult компонента. Обычно для этого используются функции print_r() и var_dump(), которые выводят информацию на экран браузера. У тех, кто давно ими пользуется, наверняка есть в запасе пара сниппетов для форматированного вывода и добавления мета-информации (например, название файла или дата). $arResult типичного Битрикс компонента на экране выглядит как длинная простыня.
Допустим, мы написали, что то похожее на ”echo '<pre>' . print_r($arResult, true) . '</pre>';” Далее мы открываем браузер, переходим на страницу с новым шаблоном компонента и долго и упорно скролим в поисках необходимой нам информации. Более продвинутый пользователь воспользуется Ctrl+F, если помнит название ключей массива.
Однако, хватит это терпеть! Как раз для таких случаем есть замечательная библиотека kint.
Это красивая и удобная замена функциям var_dump(), print_r() и debug_backtrace(). Библиотека не адаптирована под Битрикс. Она и без того дружит с ним без проблем. После установки решения с помощью composer вам больше не понадобятся сниппеты для форматированного вывода информации. Ведь теперь типичная строка ”echo '<pre>' . print_r($arResult, true) . '</pre>';” превращается в элегантную “d($arResult);”. А на экране вместо простыни, вы увидите примерно следующую картину: Здесь у нас есть все, что нужно:
Есть также и адаптация для недавно упомянутого шаблонизатора Twig - kint-php/kint-twig.
Вообщем, плюсов много, так что скорее открывайте консоль и вводите composer require kint-php/kint.
Если говорить о серьезном логировании php скриптов, то существует не безызвестная библиотека Monolog. Monolog позволяет логировать в файлы, сокеты, почтовые ящики, базы данных и различные веб-сервисы, предоставляя для этого удобное API.
Адаптировать это решение для Битрикс вызвалась команда bitrix-expert, выпустив решение bitrix-expert/monolog-adapter. Решение пополняет коллекцию Monolog возможностью вывода в Журнал событий в админке Битрикс. Помимо результатов ручного логирования, есть возможность записывать в Журнал событий необработанные исключения.
Второй частью библиотеки является инструмент MonologAdapter, который обрабатывает конфиг файл .settings.php. Таким образом, можно конфигурировать логи Monolog в файле .settings.php.
Приобщиться к этому прекрасному инструменту вам поможет composer:
Решение notamedia/console-jedi базируется на инструменте Symfony Console. Предназначено для упорядочивания и автоматизации создания различных консольных скриптов для сайта. Console Jedi – инструмент для разработчиков, вызывается из консоли и позволяет в CLI управлять системой и выполнять консольные команды. Базирование на Symfony Console позволяет без труда подключать сторонние консольные команды (например, PHP CPD, Phinx) и внедрять свои. Из коробки присутствуют такие команды как, установка и удаление модуля, переиндексация поиска и некоторые другие.
Решение arrilot/bitrix-models предлагает новый подход к работе с сущностями Битрикс наподобие того, как это сделано в фреймворках, например Laravel. Данный пакет привносит Model Layer в Битрикс. Этот слой логически состоит из двух частей:
Функциональность решения не велика. Однако она покрывает базовые операции с которыми разработчики сталкиваются каждый день - поиск id. Вы же не указываете id напрямую, так ведь? А за счет удобного API инструментом удобно пользоваться. Например, получение id ИБ по коду выглядит так:
Вам может быть интересно:
Сайты24 на стероидах: добавляем поиск и полноценный блог с ЧПУ
Разработка сложного сайта на 1С-Битрикс.
Настройка интеграции с 1С.
Продвижение интернет-магазинов.
Хотя новые инструменты и возможности появляются, происходит это не так быстро, как хотелось бы разработчикам. К тому же, некоторые новые возможности БУС не предназначены для разработчиков. Совокупность этих факторов заставляет разработчиков придумывать собственные решения, публиковать их и пользоваться. Для таких расширений у компании 1С есть площадка 1С Битрикс: Маркетплейс, но в этой статье они не рассматриваются.
Инструменты, которые будут рассмотрены в этой статье, были найдены в рамках решения конкретных проблем разработки под Битрикс. С этими проблемами Битрикс разработчики сталкиваются каждый день. Некоторые мы решаем, с некоторыми - смирились. Вот лишь некоторые их них:
- отсутствие исчерпывающей официальной документации вынуждает нас искать альтернативные источники информации;
- неадаптированность IDE к работе с Битрикс нет подсказок и автокомплита для методов, переходов по коду и сущностям Битрикс. IDE ругается на неизвестные переменные $arResult, $arParams, $APPLICATION, с которыми разработчик сталкивается каждый день;
- сложность реализации кастомных административных страниц. Типичная административная страница представляет собой полотно из тысяч строк кода;
- отсутствие встроенного инструмента миграции БД вынуждает вручную переносить изменения, сделанные в админке;
- отсутствие встроенного шаблонизатора приводит к тому, что код шаблонов компонентов содержит html вперемешку с php. Этот факт позволяет разработчику добавлять логику в шаблон, что является дурным тоном.
Классификация рассматриваемых инструментов
Рассматриваемые инструменты разделим на следующие группы:- Справочные материалы;
- Для IDE (на примере PhpStorm);
- Автоматизация рутинных операций;
- Работа с админкой;
- Миграции БД;
- Шаблонизаторы;
- Логирование и отладка;
- Другое (то, что не попало в другие категории).
Справочные материалы
Основной справочный материал стоит брать из официальной документации. Несмотря на ее несовершенство, она есть, и ее не мало:- документация для API: старое и новое ядро;
- набор курсов из видео уроков от Академии 1С-Битрикс;
- курс “Разработчик Bitrix Framework”;
- курсы для Администраторов, Контент-Менеджеров и даже хостеров;
- документация по Б24.
- Репозиторий bitrix-info пользователя SidiGi
- Работа с корзиной;
- Оформление заказа на D7;
- Настройки .settings.php;
- Кэширование;
- ORM;
- Отладка;
- .htaccess;
- и др.
- Репозиторий wiki-bitrix пользователя studiofact
- D7;
- Регистрация и авторизация;
- Торговый каталог;
- Оформление заказа;
- Композит;
- Обмен с 1С;
- Редиректы;
- Почта;
- и др.
- Репозиторий “Потрясающий битрикс” пользователя awesomebitrix
- Учебные курсы - ссылки на все официальные курсы по 1С Битрикс;
- Документация - ссылки на официальную документацию;
- Инструменты - инструменты для решения определенных задач. Например, скрипт тестирования конфигурации сервера, скрипт bitrixsetup и др.;
- Блоги - блоги различных компаний и пользователей. Среди них есть и блок компании “Интерволга” :);
- Конференции - видеозаписи конференций по Битрикс;
- и др.
Обратите внимание на раздел “Блоги”, ведь они сами по себе являются наборами справочных материалов. Однако представлены далеко не все блоги по Битрикс. Например, отсутствует отличный блог “Mr.Cappuchino”.
- Блог “Mr.Cappuchino”
- Блог компании “ИНТЕРВОЛГА"
Отдельно хочется сказать о небезызвестном инструменте Bitrix API Online. Это кладовая исходного кода Битрикс. Его суть проста - показать исходный код любого метода в модулях Битрикс. Ввиду отсутствия исчерпывающей официальной документации для API у Битрикс, разработчикам часто приходится самостоятельно разбираться в исходном коде. Инструмент Bitrix API Online отлично подойдет, если под рукой нет скачанного исходного кода. Инструмент предлагает поиск по модулю, классу и названию метода. Страница исходного кода метода содержит ссылку на официальную документацию и возможность комментирования. Не хватает только версионирования модулей.
Для PHPStorm
Достаточно теории. Пора переходить к практике. Практику начнем с категории “Для PHPStorm”. Здесь собраны доступные для PHPStorm плагины интеграции с Битрикс, набор LiveTemplates (aka сниппеты) и настройки.Плагинов интеграции PHPStorm с Битрикс не много. На момент написания статьи - только 2.
Начнем с Bitrix Framework Support. Приведу перечень возможностей, чтобы заинтересовать вас:
- поддержка папок bitrix и local;
- переход на файл компонента, шаблона компонента (поддерживаются Twig и Smarty), шаблона сайта, а также на директории и файлы, найденные в строковых переменных;
- переход на файл включаемой области при клике в вызове на значение ключа 'AREA_FILE_SUFFIX';
- корректное определение типов и автокомплит для специальных переменных и переменных шаблона;
- автокомплит компонента и его шаблона в процессе набора $APPLICATION->IncludeComponent(...) и CBitrixComponent::includeComponentClass(...);
- решена проблема с подсветкой bitrix как неразрешенного пути в вызовах require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); и похожих конструкциях;
- безопасный рефакторинг файлов с автоматическим обновлением их вызовов в строковых переменных;
- поиск использований, например файла some.css, в вызовах $APPLICATION→SetAdditionalCSS('...some.css'), во всех файлах проекта;
- шаблоны создания типовых страниц и разделов сайта.
Плагин поддерживает PHPStorm версии 8 и выше.
Следующий плагин - BitrixLangCompletion - облегчает работу с языковыми файлами в Битрикс. Разработчик заявляет следующие возможности:
- переход по коду языковой фразы из вызова GetMessage();
- автодополнение кода фразы при вызове GetMessage();
- показ значения языковой фразы прямо в коде на месте вызова GetMessage() или loc::getMessage();
- немецкие языковые файлы автоматически открываются в кодировке ISO-8859-15;
- подсветка строк с русскими символами в контексте PHP, как кандидатов на вынесение в языковой файл;
- функция создания языковой фразы из строки с русскими символами (alt+Enter);
- переход в файл, где зарегистрировано js-расширение.
Плагин поддерживает PHPStorm версии 9 и выше.
Увы, но на этом плагины для PHPStorm заканчиваются. Но есть еще несколько интересных вещей.
bxApiDocs - документация 1С-Битрикс в IDE PhpStorm. bxApiDocs - это папка с модулями 1С-Битрикс: Управление сайтом - Бизнес, в которой удалены лишние файлы, добавлены константы, события и phpDocs. В комплекте с IDE колоссально облегчает жизнь разработчику. bxApiDocs состоит из:
- API, со всеми phpDocs, извлеченными из официальной документации;
- Константы. phpDocs есть только у тех, что можно найти в официальной документации;
- События модулей. Синтетические классы с набором методов-событий определенного модуля с документацией.
Решение этой проблемы простое:
- Скачиваем актуальную версию скрипта bitrixsetup.
- Разворачиваем сайт на локальной машине. Желательно редакцию “Бизнес”, чтобы иметь доступ ко всему исходному коду.
- После установки сайта, копируем себе папку bitrix.
- Добавляем папку bitrix в индексацию IDE.
- Поддерживаем актуальность исходного кода с выходом новых версий Битрикс.
Те, кто следует стандартам оформления кода (а вы ведь следуете, правда?), знают, что у Битрикс есть правила написания исходного кода на PHP. На сайте Интерволги есть отличная статья о том, “Как настроить phpStorm для работы с 1С-Битрикс”.
В заключении поговорим о шаблонах кода, которые в PHPStorm называются Live Templates. Первый набор - шаблоны компонентов bxCompSnpt. Аббревиатуры этих шаблонов разворачиваются в полноценный вызов компонентов с форматированием, комментариями к параметрами и возможностью пройтись по всем параметрам и задать значения. Параметры компонента разбиты на категории с помощью “регионов”, поэтому длинный лист параметров можно свернуть, и вызов компонента будет выглядеть элегантно и коротко: Добавить такую возможность в свою IDE достаточно просто - нужно просто скопировать один .xml файл в определенную папку.
Еще один набор из 93 шаблонов вы найдете в нашей статье “44 Live Templates для Битрикса + ещё 49 для D7”. Приведенные в статье шаблоны не разворачиваются в вызовы компонентов. Они призваны ускорить работу с наиболее часто используемым API Битрикс. Например, если необходимо кэшировать дополнительные данные в result_modifier.php, воспользуйтесь шаблоном “cache”, который развернется в строку “$this->__component->SetResultCacheKeys(array(" $END$ "));”. Курсор будет установлен в позиции $END$, где вы сможете сразу вписать название ключа массива $arResult. Согласитесь, намного быстрее, чем писать эту строку вручную. Подключить модуль инфоблоков еще проще: ibl + <Tab> = CModule::IncludeModule("iblock"). Установка еще проще - нужно просто импортировать .jar файл как файл настроек.
Прелесть шаблонов в том, что они легко изменяются под свои нужды.
Автоматизация рутинных операций
В этом разделе будут освещены инструменты, ускоряющие некоторые рутинные операции.Инструмент прост в установке и использовании. Закидываем скрипт на сайт и открываем в браузере. Увидим следующую форму: Необходимо заполнить поля “Логин”, “Пароль” и “Повтор пароля”. По логину будет произведен поиск пользователя в БД. Если такой пользователь найден, то его данные будут обновлены: произойдет активация пользователя, присоединение к группе администраторов, смена пароля на указанный. Опционально, если задан email, он также будет обновлен в БД. Если пользователя с указанным логином не существует, то такой пользователь будет создан. Вдобавок, скрипт еще и авторизует пользователя.
После выполнения, такой скрипт обязательно нужно удалить с сайта, чтобы не оставлять дыр для злоумышленника. Тем более, что сделать это очень легко: скрипт любезно предлагает удалить себя после завершения работы. Также перед размещением на сайте, советуем переименовать скрипт в целях безопасности.
- Гаджет мониторинга и очистки кэша
- Управляемый кэш в папке “/bitrix/managed_cache/”;
- Управляемый кэш в папке “/bitrix/stack_cache/”;
- Неуправляемый кэш в папке “/bitrix/cache/”;
- HTML кэш в папке “/bitrix/html_pages/”;
- Кэш изображений “/upload/resize_cache”
- Скрипт чистки каталога upload/iblock
Недостаток скрипта в том, что он загружает все имена файлов из таблицы b_file в оперативную память. Это может привести к падению скрипта в случае нехватки памяти.
Запускать скрипт необходимо из консоли. Есть простор для доработки: прикрутить UI и оптимизировать работу скрипта по использованию оперативной памяти.
Работа с админкой
Создание кастомных административных страниц - задача, с которой каждый рано или поздно сталкивается. Те, кто уже пробовал знают, насколько это “больно” . Чтобы понимать масштаб трагедии, приведу пример: в модуле iblock версии 18.6.400 код административной страницы списка элементов инфоблоков (/bitrix/modules/iblock/admin/iblock_element_admin.php) представляет собой полотно из 3811 строк кода в котором намешан и PHP, и JavaScript, и HTML. И чтобы создать похожую страницу, например для кастомной таблицы в БД, вам потребуется во всем этом разобраться и воспроизвести. Хватит это терпеть!Для создания типичного набора страниц для таблицы БД (страница списка и детальная страница) есть отличная библиотека, которая значительно упрощает этот процесс. Встречайте - DigitalWand/admin_helper.
Это “API для сборки кастомных админок в Битриксе”. Модуль реализует подход MVC. В данной статье я не буду подробно описывать структуру модуля и все его возможности. Этому можно посвятить отдельную статью. Кстати, так и сделали разработчики модуля. Есть также статья на Хабр и подробная документация по API.
Здесь же я расскажу, как выглядит создание страниц с использованием модуля:
- создаем битриксовую ORM сущность - модель;
- создаем два класса-хелпера: для страницы списка и детальной. Весь код стандартного хелпера - объявление свойства класса с указанием полного имени модели;
- создаем класс с описанием интерфейса админки. Два метода. Первый возвращает массив с описанием выводимых полей и их настроек. Второй возвращает массив с полными именами классов-хелперов;
- добавляем страницу в административное меню.
Плата за удобство - необходимость создания ORM сущности Битрикс. При желании использовать модуль для сущностей, не использующих ORM Битрикс, можно подготовить для таких сущностей класс-обертку, реализующий необходимые методы.
В отличие от HLB есть некоторые преимущества:
- поддерживаются разделы;
- в теории можно не привязываться к ORM сущности Битрикс и даже получать данные из другой БД;
- возможность кастомизации полей.
Принцип работы достаточно прост:
- в своем модуле создаем класс, наследуя от стандартного. В методе getConfig() данного класса необходимо вернуть массив с описанием табов и полей на странице;
- в файле options.php своего модуля “показываем” форму настроек;
- после этого появится страница настроек для вашего модуля («Настройки» -> «Настройки продукта» -> «Настройки модулей» -> «<Название вашего модуля>»).
Вот так выглядит страница настроек из тестового пример модуля:
Поддерживаются однострочные и многострочные текстовые поля, поля ввода пароля, цифр, времени, поле с визуальным редактором и др.
В официальном репозитории есть подробное описание работы с модулем и тестовый пример.
Миграции
Тема миграций актуальна для любого крупного проекта, т.к. разработка обычно производится на тестовом сервере, а изменения постоянно приходится переносить на боевой. Для переноса кода используется git, а для изменений БД - инструмент миграций. У Интерволги есть обзорная статья систем миграции Битрикс. Там подробно описаны существующие решения в маркетплейсе 1С-Битрикс. На Github также есть решения по миграции. Самые популярные из них - arrilot/bitrix-migrations, worksolutions/bitrix-reduce-migrations, cjp2600/bim-core работают по схожему принципу. Для каждой миграции создается отдельный класс, в котором необходимо реализовать методы применения и отката изменений в рамках миграции. arrilot/bitrix-migrations имеет возможность автоматического создания миграций при внесении изменений в админке. Но список мигрируемых сущностей включает только базовые - инфоблоки, HL-блоки, группы пользователей.У компании Intervolga есть свое решение для миграций - intervolga.migrato. Это open-source решение с репозиторием на github. Подробно оно описано в нашей статье. Решение отличается принципиально другим подходом к вопросу миграций и поддержкой большого количества сущностей. Нет необходимости описывать каждую миграцию в виде кода. Модуль позволяет выгрузить структуру инфоблоков, настройки свойств, групп пользователей, сайтов, ORM-сущности и т.д. в XML. Эти XML-файлы можно разместить в репозитории проекта, и на другом сервере восстановить из них структуру БД. Модуль способен мигрировать много сущностей, полный список которых есть в Wiki репозитория. Т. к. решение open-source, любой желающий может разработать механизм миграции для недостающей сущности и предложить pull request. В wiki репозитория есть инструкцию по разработке класса миграции для новой сущности.
Шаблонизаторы
Если вы когда либо работали с одним из php фреймворков (напр. Laravel), то вам наверняка известно понятие шаблонизатора. И тут у Битрикс есть что предложить. На просторах Github были найдены решения по адаптации известных шаблонизаторов Twig и Blade под Битрикс. И оба действительно работают.Начнем с Twig. Для использования шаблонизатора Twig на Github есть решение maximaster/tools.twig. Чтобы начать использовать Twig в Битрикс, нужно:
- установить composer зависимость;
- добавить конфиг в файл .settings.php;
- создать в шаблоне компонента файл template.twig вместо template.php.
В целом, решения для шаблонизатора Twig мне показалось более удобным и адаптированным под Битрикс.
Шаблонизаторы делают код более элегантным и читаемым для тех, кто с ними знаком. Однако для новичков это наоборот может вызвать некоторые трудности в понимании.
Логирование и отладка
Логирование - один из важнейших инструментов для отладки. Рассмотрим типичную задачу по разработке шаблона компонента.Мы создаем папку нового шаблона, добавляем файл template.php и первое, что мы делаем, логируем $arResult компонента. Обычно для этого используются функции print_r() и var_dump(), которые выводят информацию на экран браузера. У тех, кто давно ими пользуется, наверняка есть в запасе пара сниппетов для форматированного вывода и добавления мета-информации (например, название файла или дата). $arResult типичного Битрикс компонента на экране выглядит как длинная простыня.
Допустим, мы написали, что то похожее на ”echo '<pre>' . print_r($arResult, true) . '</pre>';” Далее мы открываем браузер, переходим на страницу с новым шаблоном компонента и долго и упорно скролим в поисках необходимой нам информации. Более продвинутый пользователь воспользуется Ctrl+F, если помнит название ключей массива.
Однако, хватит это терпеть! Как раз для таких случаем есть замечательная библиотека kint.
Это красивая и удобная замена функциям var_dump(), print_r() и debug_backtrace(). Библиотека не адаптирована под Битрикс. Она и без того дружит с ним без проблем. После установки решения с помощью composer вам больше не понадобятся сниппеты для форматированного вывода информации. Ведь теперь типичная строка ”echo '<pre>' . print_r($arResult, true) . '</pre>';” превращается в элегантную “d($arResult);”. А на экране вместо простыни, вы увидите примерно следующую картину: Здесь у нас есть все, что нужно:
- ключи и значения массивов;
- информация о типах данных;
- размеры массивов;
- возможность сворачивать и разворачивать вложенные массивы;
- наглядный поиск с подсветкой;
- возможность получить полный путь к элементу массива (удобно при большой вложенности);
- возможность открыть элемент в отдельном окне;
- стек вызовов.
Есть также и адаптация для недавно упомянутого шаблонизатора Twig - kint-php/kint-twig.
Вообщем, плюсов много, так что скорее открывайте консоль и вводите composer require kint-php/kint.
Если говорить о серьезном логировании php скриптов, то существует не безызвестная библиотека Monolog. Monolog позволяет логировать в файлы, сокеты, почтовые ящики, базы данных и различные веб-сервисы, предоставляя для этого удобное API.
Адаптировать это решение для Битрикс вызвалась команда bitrix-expert, выпустив решение bitrix-expert/monolog-adapter. Решение пополняет коллекцию Monolog возможностью вывода в Журнал событий в админке Битрикс. Помимо результатов ручного логирования, есть возможность записывать в Журнал событий необработанные исключения.
Второй частью библиотеки является инструмент MonologAdapter, который обрабатывает конфиг файл .settings.php. Таким образом, можно конфигурировать логи Monolog в файле .settings.php.
Приобщиться к этому прекрасному инструменту вам поможет composer:
- composer require bitrix-expert/monolog-adapter.
Другое
В эту категорию мы вынесли не объединенные общей темой инструменты. Мы не пробовали их на практике, но заявленная функциональность привлекает внимание. Было бы неуважительно их не упомянуть.Решение notamedia/console-jedi базируется на инструменте Symfony Console. Предназначено для упорядочивания и автоматизации создания различных консольных скриптов для сайта. Console Jedi – инструмент для разработчиков, вызывается из консоли и позволяет в CLI управлять системой и выполнять консольные команды. Базирование на Symfony Console позволяет без труда подключать сторонние консольные команды (например, PHP CPD, Phinx) и внедрять свои. Из коробки присутствуют такие команды как, установка и удаление модуля, переиндексация поиска и некоторые другие.
Решение arrilot/bitrix-models предлагает новый подход к работе с сущностями Битрикс наподобие того, как это сделано в фреймворках, например Laravel. Данный пакет привносит Model Layer в Битрикс. Этот слой логически состоит из двух частей:
- модели для сущностей битрикса работающие внутри через API Битрикса (CIBlockElement и т.д.) и представляющие собой надстройку над ним. С внешней же стороны эта надстройка напоминает Eloquent;
- модели для произвольных таблицы, работающие через illuminate/database в целом и Eloquent в частности.
One more thing...
В заключении хотелось бы рассказать о еще одном инструменте, который не попал ни в одну из наших категорий. Его основная задача - поиск сущностей в БД по устойчивым к миграциям параметрам. Например, поиск инфоблока по символьному коду. Поддерживаются следующие сущности Битрикс:- Инфоблоки (поиск по коду типа ИБ и коду самого ИБ);
- Группы пользователей (поиск по коду группы);
- Highload-блоки (поиск по названию);
- Типы цен (поиск по коду цены).
Функциональность решения не велика. Однако она покрывает базовые операции с которыми разработчики сталкиваются каждый день - поиск id. Вы же не указываете id напрямую, так ведь? А за счет удобного API инструментом удобно пользоваться. Например, получение id ИБ по коду выглядит так:
- $newsIblockId = \Bex\Tools\Iblock\IblockTools::find('news-type', 'news-ibl')->id().
- $newsIblockId = \Intervolga\Migrato\Data\Module\Iblock::getPublicId('', 'news-ibl').
Заключение
Ну вот и подошел к концу мой рассказ о полезностях для Bitrix разработчика. Коллеги, не бойтесь и не ленитесь использовать сторонние решения в своих Bitrix-проектах. Многие из них действительно полезные и удобные и позволяют сделать работу с Bitrix приятнее.Поделитесь этой статьей в соцсетях и мы пришлем вам PDF шпаргалку со всеми полезными инструментами. Сможете распечатать и повесить у своего рабочего места.
Вам может быть интересно:
Сайты24 на стероидах: добавляем поиск и полноценный блог с ЧПУ
Разработка сложного сайта на 1С-Битрикс.
Настройка интеграции с 1С.
Продвижение интернет-магазинов.
Оцените статью
26.07.2019
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!
Статьи по теме
Мы работаем по одному из двух форматов:
- аренда команды (от 2 человек, не менее 3 месяцев);
- итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
- регулярные онлайн-планерки с заказчиком;
- квалифицированных специалистов;
- организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
- полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
- нагруженный интернет-магазин;
- личный кабинет;
- оптовые продажи — B2B-платформа;
- маркетплейс;
- технический аудит сайта;
- Битрикс24 — корпоративные HR-порталы;
- Битрикс24 — построение CRM-системы;
- Битрикс24 — личные кабинеты сотрудников;
- Битрикс24 — аудит портала;
- 1С — интеграция с другими системами;
- 1С — доработка системы;
- маркетинг — комплексное интернет-продвижение;
- маркетинг — продвижение для B2B.
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем