На создание этой структуры вручную уходило слишком много времени, и как правило, новые компоненты создавались путем копирования уже существующих, с изменением названия папки и класса компонента. Копирование отлично работает для комплексных компонентов, задача которых сводится к определению роута и подключению корректного шаблона, т.к. для таких компонентов создаётся базовый компонент, реализующий всю логику, а все остальные подобные компоненты просто наследуют его.
Но создание компонентов, непосредственно отображающих интерфейсы или реализующих логику, требует редактирования большего числа файлов в копии и менее удобно. Более того, при копировании можно упустить языковые фразы и описание компонента, из-за чего можно получить несколько компонентов с одинаковым названием в визуальном редакторе и переопределить существующие языковые фразы оригинального компонента.
Несомненно, для решения этой проблемы можно воспользоваться инструментом поиска и замены строк в каталоге компонента, но это ещё один дополнительный шаг в уже ёмком процессе создания нового компонента.
От этой проблемы также страдают и модули: в них нужно создавать структуру, а главное — не ошибиться в названии класса-установщика модуля, иначе инсталлятор работать не будет!
Очевидным решением этой проблемы являлся бы скрипт, позволяющий быстро скопировать шаблонные компоненты и заменить шаблоны названий и языковых фраз внутри. Скрипт решает проблему создания структуры и во много раз ускоряет процесс разработки, но возникает ряд других проблем:
Итак, скрипт может решить основную проблему в создании компонентов, но все ещё недостаточно удобен при частом использовании на множестве разных проектов. Для устранения этих недостатков мы решили объединить скрипт со стандартной в компании средой разработки — 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() {...}
}
<?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.