В данной заметке речь пойдет о разработке компонентов для Битрикса с нуля. Я расскажу о том, как правильно написать компонент, сделать описание к нему, а также настроить параметры компонента, чтобы можно было пользоваться вашим компонентам как стандартными компонентами Битрикса. Ранее я уже писал про компоненты Битрикса. Будем считать, что ту статью вы уже прочитали. Итак, начнем.
Структура папки компонента имеет вид:Разберем каждый файл отдельно.
Файл .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 комментарий