Компоненты Битрикса. Шаг 0.

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

В компонентах Битрикса реализовано разделение логики и представления. Логика реализуется в самом компоненте, а представление через шаблоны. Зачем нужно такое разделение? Чтобы удобнее было разделять данные разных типов и не мешать все в одну кучу. Плюс к тому если, например, одному человеку понадобиться подредактировать какую-то часть шаблона, а другому надо подправить PHP код, то в результате получиться дикий ад. Плюс к тому, разделение PHP, HTML и JavaScript делает код более читаемым и удобным.

Структура папок коспонента Битрикс

Код компонентов лежит в папке /bitrix/components/. Подпапки будут являться пространствами имен. Например в пространстве имен bitrix лежат системные компоненты. Менять их не рекомендуется. Лучше создайте свою папку типа mycompany. Каждая папка в ней будет названием для компонентов битрикса. Теперь рассмотрим структуру папка компонента битрикса. 

Структура компонента Битрикс

Все более-менее понятно из самих названий, но все-таки стоит сделать пояснения.

Папка lang

В этой папке хранятся тексты для компонента. подпапки данной папки могут быть ru, en и др. языки. Структура этих папок должна повторять структуру компонента. 

Структура папки lang компонента битрикса

Как видим, структура папки повторяет структуру папок компонента. Файлу .description.php в корневой папки компонента соответствует файл .description.php из языковой папки. Что же находиться внутри этих файлов? Рассмотрим структуру файла .description.php в папке /land/ru

$MESS["BCAT_DEFAULT_TEMPLATE_NAME"]="Теги блога";
$MESS["BCAT_DEFAULT_TEMPLATE_DESCRIPTION"]="Позволяет редактировать теги сообщений блога";
$MESS["BCAT_NAME"]="Блоги";

Тут мы видим массив $MESS в котором задаются текстовые строки, которые будут вызываться из файла .description.php из корня компонента. Взглянем на этот файл.

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arComponentDescription = array(
        "NAME" => GetMessage("BCAT_DEFAULT_TEMPLATE_NAME"),
        "DESCRIPTION" => GetMessage("BCAT_DEFAULT_TEMPLATE_DESCRIPTION"),
        "ICON" => "/images/icon.gif",
        "SORT" => 320,
        "PATH" => array(
                "ID" => "communication",
                "CHILD" => array(
                        "ID" => "blog",
                        "NAME" => GetMessage("BCAT_NAME")
                )
        ),
);

Значения для текстовых полей берутся из файлов в папке lang при помощи функции GetMessage($arg), где $arg - это ключ в массиве $MESS. Например, следующий код:

$str = GetMessage("BCAT_DEFAULT_TEMPLATE_DESCRIPTION");

Значение $str будет завно значению $MESS['BCAT_DEFAULT_TEMPLATE_DESCRIPTION']. 

Папка help

help - тут находятся файлы, для обеспечения пользователя справочной информацией. В папке могут содержаться подпапки  идентификатором языка. Внутри должен находиться файл index.php. Также папка должна содержать файл .tooltips.php. В этих файлах должен объявляться массив $arTooltips, ключами у которого являются идентификаторы параметров. А значения берутся из файла сообщений, о котором чуть ниже. Структура папки help:

Структура папки help компонента Битрикса.

Вид файла .tooltips.php:

$arTooltips = array(
        "MESSAGE_COUNT" => GetMessage("MESSAGE_COUNT_TIP"),
        "PATH_TO_BLOG" => GetMessage("PATH_TO_BLOG_TIP"),
        "PATH_TO_BLOG_CATEGORY" => GetMessage("PATH_TO_BLOG_CATEGORY_TIP"),
        "PATH_TO_POST" => GetMessage("PATH_TO_POST_TIP"),
        "PATH_TO_POST_EDIT" => GetMessage("PATH_TO_POST_EDIT_TIP"),
        "PATH_TO_USER" => GetMessage("PATH_TO_USER_TIP"),
        "PATH_TO_SMILE" => GetMessage("PATH_TO_SMILE_TIP"),
        "BLOG_VAR" => GetMessage("BLOG_VAR_TIP"),
        "POST_VAR" => GetMessage("POST_VAR_TIP"),
        "USER_VAR" => GetMessage("USER_VAR_TIP"),
        "PAGE_VAR" => GetMessage("PAGE_VAR_TIP"),
        "BLOG_URL" => GetMessage("BLOG_URL_TIP"),
        "YEAR" => GetMessage("YEAR_TIP"),
        "MONTH" => GetMessage("MONTH_TIP"),
        "DAY" => GetMessage("DAY_TIP"),
        "CATEGORY_ID" => GetMessage("CATEGORY_ID_TIP"),
        "CACHE_TYPE" => GetMessage("CACHE_TYPE_TIP"),
        "CACHE_TIME" => GetMessage("CACHE_TIME_TIP"),
        "CACHE_TIME_LONG" => GetMessage("CACHE_TIME_LONG_TIP"),
        "SET_NAV_CHAIN" => GetMessage("SET_NAV_CHAIN_TIP"),
        "SET_TITLE" => GetMessage("SET_TITLE_TIP"),
        "POST_PROPERTY_LIST" => GetMessage("POST_PROPERTY_LIST_TIP"),
);

Ключи масива $arTooltips - это символьные идентификаторы параметров компонента. Сами значения подсказов берутся уже знакомой нам функцией GetMessage.

Папка Templates

Самая интересная папка, тут хранятся шаблоны. Подпапками являются шаблоны. В самых шаблонах должен быть файл template.php. Он вызывается автоматом. Шаблон представляет собой заготовку из HTML-кода, в которую подставляются нужные значения. Если в папке шаблона лежит файл стилей style.css, то он будет автоматически подключен. 

Подключение компонента

Подключение компонента производиться функцией IncudeComponent. За подробностями обратитесь к документации. Приведем пример:

$APPLICATION->IncludeComponent(
    "bitrix:catalog",
    "template",
    Array(
        "SEF_MODE" => "N",
        "IBLOCK_TYPE_ID" => "catalog",
        "ACTION_VARIABLE" => "action",
        "CACHE_TIME" => 1*24*60*60,
        "BASKET_PAGE_TEMPLATE" => "/personal/basket.php",
    )
);
  • "bitrix:catalog" - название компонента. Причем обратите внимание, сначала указывается пространство имен(bitrix), а потом название компонента.
  • "template" - название шаблона. Если этот аргумент не указан, то будет вызван шаблон .default.
  • Array(...) - массив параметров. Этот массив в компоненте будет доступен как массив $arParams.

На этом на сегодня все.

Тэги :

2 Комментариев

    Элементы 1—2 из 2.
    • Денис
      Подскажите, разрабатываю сайты на Битрикс, когда нужно выводить список элементов инфоблоков, всегда пользуюсь компонентом news.list. Я один такой или так и нужно? :)
      Или, может, есть другие компоненты и (или) способы, о которых я не знаю?
    • Таня
      Спасибо! Очень хорошо написано, понятно!

Оставьте комментарий

Мы не опубликуем ваш email

Scroll To Top