В данной заметке речь пойдет о разработке компонентов для Битрикса с нуля. Я расскажу о том, как правильно написать компонент, сделать описание к нему, а также настроить параметры компонента, чтобы можно было пользоваться вашим компонентам как стандартными компонентами Битрикса. Ранее я уже писал про компоненты Битрикса. Будем считать, что ту статью вы уже прочитали. Итак, начнем.
Структура папки компонента имеет вид:
Разберем каждый файл отдельно.
Файл .description.php
В данном файле храниться описание компонента. Эта информация используется Битриксом в режиме редактирования и в визуальном редакторе. Описание — это как раз то короткое описание компонента, которые вы видите в визуальном редакторе, а также иконка. При работе компонента эта информация не используется. С точки зрения программирования файл .description.php нужен для определения массива $arComponentDescription, в котором определяются основные параметры описания.
Типичная структура этого массива такова:
$arComponentDescription = array(   "NAME" => GetMessage("COMP_NAME"),   "DESCRIPTION" => GetMessage("COMP_DESCR"),   "ICON" => "/images/icon.gif",   "PATH" => array(      "ID" => "content",      "CHILD" => array(         "ID" => "catalog",         "NAME" => "Каталог товаров"      )   ),   "AREA_BUTTONS" => array(      array(         'URL' => "javascript:alert('Это кнопка!!!');",         'SRC' => '/images/button.jpg',         'TITLE' => "Это кнопка!"      ),   ),   "CACHE_PATH" => "Y",   "COMPLEX" => "Y");Ключи компонента значат следующее:
- NAME — название компонентаDESCRIPTION — описание компонентаICON — путь к файлу иконки компонента, относительно папки компонента.PATH— путь в виртуальном дереве компонентов. Это то самое дерево, что мы видим в визуальном редакторе и из которого можно перетащить кнопки компонентов. Если этот параметр не задан, то компонент не появится в дереве компонентов. Сам по себе этот пункт является массивом и имеет следующие ключи:
- ID — код ветки дерева.NAME — название ветки компонентов.CHILD — массив дочерней ветки, имеет ту же структуру, что и данный массив. Для первого уровня дерева зарезервированы следующие ветки, которые нельзя использовать: «content» (контент), «service» (сервисы), «communication» (общение), «e-store» (магазин), «utility» (служебные).
 
 
Файл .parameters.php
В этом файле содержится описания вводимых параметров компонента. Описание производиться путем задания массива $arComponentParameters, который имеет вид:
$arComponentParameters = array(   "GROUPS" => array(      "SETTINGS" => array(         "NAME" => GetMessage("SETTINGS_PHR")      ),      "PARAMS" => array(         "NAME" => GetMessage("PARAMS_PHR")      ),   ),   "PARAMETERS" => array(      "IBLOCK_TYPE_ID" => array(         "PARENT" => "SETTINGS",         "NAME" => GetMessage("INFOBLOCK_TYPE_PHR"),         "TYPE" => "LIST",         "ADDITIONAL_VALUES" => "Y",         "VALUES" => $arIblockType,         "REFRESH" => "Y"      ),      "BASKET_PAGE_TEMPLATE" => array(         "PARENT" => "PARAMS",         "NAME" => GetMessage("BASKET_LINK_PHR"),         "TYPE" => "STRING",         "MULTIPLE" => "N",         "DEFAULT" => "/personal/basket.php",         "COLS" => 25      ),      "SET_TITLE" => array(),      "CACHE_TIME" => array(),      "VARIABLE_ALIASES" => array(         "IBLOCK_ID" => array(            "NAME" => GetMessage("CATALOG_ID_VARIABLE_PHR"),         ),         "SECTION_ID" => array(            "NAME" => GetMessage("SECTION_ID_VARIABLE_PHR"),         ),      ),      "SEF_MODE" => array(         "list" => array(            "NAME" => GetMessage("CATALOG_LIST_PATH_TEMPLATE_PHR"),            "DEFAULT" => "index.php",            "VARIABLES" => array()         ),         "section1" => array(            "NAME" => GetMessage("SECTION_LIST_PATH_TEMPLATE_PHR"),            "DEFAULT" => "#IBLOCK_ID#",            "VARIABLES" => array("IBLOCK_ID")         ),         "section2" => array(            "NAME" => GetMessage("SUB_SECTION_LIST_PATH_TEMPLATE_PHR"),            "DEFAULT" => "#IBLOCK_ID#/#SECTION_ID#",            "VARIABLES" => array("IBLOCK_ID", "SECTION_ID")         ),      ),   ));Массив имеет следующие ключи:
- GROUPS — все параметры разделены на группы. Группы задаются массивом следующего вида:
 
"код группы" => array( "NAME" => "название группы на текущем языке", "SORT" => "сортировка",)
Перечень стандартных групп:
- ADDITIONAL_SETTINGS (сортировка — 700) Эта группа появляется, например, при указании параметра SET_TITLE.CACHE_SETTINGS (сортировка — 600) Появляется при указании параметра CACHE_TIME.SEF_MODE (сортировка 500) Группа для всех параметров, связанных с использованием ЧПУ.URL_TEMPLATES (сортировка 400) Шаблоны ссылокVISUAL (сортировка 300) Редко используемая группа. Сюда предполагается загонять параметры, отвечающие за внешний вид.DATA_SOURCE (сортировка 200) Тип и ID инфоблока и тому подобное.BASE (сортировка 100) Основные параметры.AJAX_SETTINGS (сортировка 550) Все, что касается ajax. PARAMETERS — массив описаний параметров. Описание имеет следующую структуру:
 
"код параметра" => array( "PARENT" => "код группы", // если нет - ставится ADDITIONAL_SETTINGS "NAME" => "название параметра на текущем языке", "TYPE" => "тип элемента управления, в котором будет устанавливаться параметр", "REFRESH" => "перегружать настройки или нет после выбора (N/Y)", "MULTIPLE" => "одиночное/множественное значение (N/Y)", "VALUES" => "массив значений для списка (TYPE = LIST)", "ADDITIONAL_VALUES" => "показывать поле для значений, вводимых вручную (Y/N)", "SIZE" => "число строк для списка (если нужен не выпадающий список)", "DEFAULT" => "значение по умолчанию", "COLS" => "ширина поля в символах",)
Возможные значения для TYPE:
- LIST — список элементовCHECKBOX — флажок да/нетSTRING — строка символовFILE — файлCOLORPICKER — цветCUSTOM — Примером пользовательского (CUSTOM) типа параметров является параметр MAP_DATA в компоненте bitrix:map.google.view
 
Для типа LIST ключ VALUES содержит массив значений следующего вида:
VALUES => array( "ID или код, сохраняемый в настройках компонента" => "языкозависимое описание",)
Файл component.php
Итак, взглянем на основной файл компонента. Базовая структура такова:
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arResult = array(); if ($this->StartResultCache()){    $this->IncludeComponentTemplate();}Первая строчка нужна для ограничения прямого доступа к файлу компонента. Далее идет определение массива $arResult, который мы должны передать шаблону. Метод StartResultCache возвращает true, если кэш не действителен и его данные устарели. Данные заносятся в кэш при вызове шаблона. За дополнительной информацией по этой функции лучше обратиться к документации.Функция IncludeComponentTemplate выводит шаблон компонента. Также при вызове этой функции обновляется кэш.
Создание реального компонента битрикс.
								
								
1 комментарий