Создание компонента Битрикса. (часть 1)

В данной заметке речь пойдет о разработке компонентов для Битрикса с нуля. Я расскажу о том, как правильно написать компонент, сделать описание к нему, а также настроить параметры компонента, чтобы можно было пользоваться вашим компонентам как стандартными компонентами Битрикса. Ранее я уже писал про компоненты Битрикса. Будем считать, что ту статью вы уже прочитали. Итак, начнем.
Структура папки компонента имеет вид:Разберем каждый файл отдельно.

Файл .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» (служебные).
    AREA_BUTTONS — пользовательские кнопки, которые показываются для компонента в режиме редактирования сайта.CACHE_PATH — если значение равно «Y», отображается кнопка очистки кэша компонента в режиме редактирования сайта .COMPLEX — элемент должен иметь значение «Y» для комплексного компонента, для простых компонентов не имеет значения.

Файл .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 выводит шаблон компонента. Также при вызове этой функции обновляется кэш. 

Создание реального компонента битрикс.

Вам также может понравиться

About the Author: Vladimir Kusakin

Hi. I am web developer. For the past 9 years, I've been developing applications for the web using mostly PHP and Python. About me

1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *