DIGITAL SECTOR

Плагин PhpStorm для создания компонентов «1С-Битрикс»

Проблема

Компоненты являются одной из важнейших частей проектов, разрабатываемых на CMS «1С-Битрикс». Компонент — это логически завершённый код, предназначенный для извлечения информации из инфоблоков и других источников и преобразования её в HTML-код для отображения в виде фрагментов web-страниц. К сожалению, из-за структуры компонента, на его создание уходит много времени: нужно создать корректную иерархию из папок, создать файлы с описанием и свойствами, для них создать файлы с языковыми фразами, создать файлы с шаблонами и языковые фразы для них.

Типовая структура компонента

На создание этой структуры вручную уходило слишком много времени, и как правило, новые компоненты создавались путем копирования уже существующих, с изменением названия папки и класса компонента. Копирование отлично работает для комплексных компонентов, задача которых сводится к определению роута и подключению корректного шаблона, т.к. для таких компонентов создаётся базовый компонент, реализующий всю логику, а все остальные подобные компоненты просто наследуют его.

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

Несомненно, для решения этой проблемы можно воспользоваться инструментом поиска и замены строк в каталоге компонента, но это ещё один дополнительный шаг в уже ёмком процессе создания нового компонента.

От этой проблемы также страдают и модули: в них нужно создавать структуру, а главное — не ошибиться в названии класса-установщика модуля, иначе инсталлятор работать не будет!

Очевидным решением этой проблемы являлся бы скрипт, позволяющий быстро скопировать шаблонные компоненты и заменить шаблоны названий и языковых фраз внутри. Скрипт решает проблему создания структуры и во много раз ускоряет процесс разработки, но возникает ряд других проблем:

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

Итак, скрипт может решить основную проблему в создании компонентов, но все ещё недостаточно удобен при частом использовании на множестве разных проектов. Для устранения этих недостатков мы решили объединить скрипт со стандартной в компании средой разработки — JetBrains PhpStorm. Таким образом появился плагин для создания компонентов и модулей.

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

Внешний вид окна создания
компонента

Плагин сканирует директорию с шаблонными компонентами и модулями и отображает доступные шаблоны в диалоге создания. От разработчика требуется только ввести название нового компонента и относительный путь, куда поместить новый компонент (в случае, если он отличается от пути по умолчанию; в дальнейшем эта настройка сохраняется для каждого проекта). Плагин автоматически генерирует название класса для компонента/модуля, а также ключи для языковых фраз. Так как для создания нового компонента используются шаблоны, каждый разработчик может заготовить для себя ряд шаблонных компонентов, который потом сможет в два клика развернуть на любом другом проекте.

Пример шаблонного компонента
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
                            die();
                          }

                          use Bitrix\Main;
use Bitrix\Main\Localization\Loc as Loc;

/**
* Class #TEMPLATE_COMPONENT_CLASS_NAME#
*/
class #TEMPLATE_COMPONENT_CLASS_NAME# extends CBitrixComponent
                          {
                            public $response;

                            protected $page = '';

                            public function onIncludeComponentLang() {...}

                            protected function checkModules() {...}

                            protected function getResult() {...}

                            public function executeComponent() {...}
                          }
Пример созданного плагином
файла .description.php
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die();
  }

  use Bitrix\Main\Localization\Loc as Loc;
Loc::loadMessages(__FILE__);

$arComponentDescription = array(
  'NAME' => Loc::getMessage('MY_COMPONENT_NAME_DESCRIPTION_NAME'),
  'DESCRIPTION' => Loc::getMessage('MY_COMPONENT_NAME_DESCRPTION_DESCRIPTION'),
  'ICON' => '/images/icon.gif',
  'SORT' => 20,
  'PATH' => array(
    'ID' => 'project',
    'NAME' => Loc::getMessage('MY_COMPONENT_NAME_DESCRIPTION_GROUP'),
    'SORT' => 10,
  ),
);

Стандартные шаблоны для плагина хранятся в Git репозитории и легко скачиваются и обновляются на рабочих станциях пользователей, в то время как сам плагин устанавливается и обновляется через PhpStorm.

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

Инструменты

PhpStorm
Java
Согласен