Немного теории:
В системе Bitrix заложена довольно популярная архитектура: разделения данных, представления и обработки действий пользователя на три отдельных компонента.
Данная архитектура именуется как MVC (Model-view-controller, «Модель-представление-поведение»), и широко применяется для проектирования различных программных продуктов.
В свою очередь шаблон MVC для Bitrix Framework формируется из следующих частей:
Модель — это API;
Представление — это шаблоны;
Контроллер — это компонент;
В данной статье мы поговорим о компоненте Bitrix.
Компонент — это контроллер и представление для использования в публичном разделе. Компонент с помощью API одного или нескольких модулей манипулирует данными. Шаблон компонента (представление) выводит данные на страницу.
Далее от теории к практике. Рассмотрим структуру простого компонента Bitrix.
Стандартные компоненты Bitrix хранятся в каталоге /bitrix/components/bitrix/. Как утверждают разработчики: компоненты находящиеся в данном каталоге могут перезаписываться при обновлении, и для кастомизации компонентов предпочтительно заводить отдельный каталог для своих компонентов.
В связи с этим в каталоге /bitrix/components/ заводим новый каталог, в котором будут храниться наши компоненты.
Дадим ему имя custom. Теперь создадим каталог для нашего компонента /bitrix/components/custom/sections.list/. Привычная структура папок и файлов простого компонента выглядит так:
— help
— images
— lang
— templates
.description.php
.parameters.php
component.php
Рассмотрим всё это по порядку.
В папке help обычно лежит файл .tooltips.php, содержащий массив всплывающих подсказок для настроек компонента. Не будем на нём останавливаться, пример этого файла можно посмотреть в других компонентах.
В папке images обычно лежит иконка компонента.
В папке lang лежат подпапки для языковых параметров компонента.
В папке templates — все шаблоны компонента.
Можно сразу сделать шаблон по умолчанию для нашего компонета. Полный путь до него будет выглядеть так: /bitrix/components/custom/sections.list/templates/.default/template.php.
Вставим туда пока одну единственную строчку «Это шаблон компонента custom:sections.list».
В файл .description.php прописываем следующий код:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arComponentDescription = array( "NAME" => 'Custom: список разделов инфоблока', "DESCRIPTION" => 'Список разделов инфоблока', "ICON" => "/images/sections_list.gif", "CACHE_PATH" => "Y", "PATH" => array( "ID" => "utility", ), ); ?>
Итак, файл содержит массив с описанием компонента.
Далее следует файл — .parameters.php:
<? if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true)die(); $arComponentParameters = array( 'PARAMETERS' => array( 'IBLOCK_ID' => array( 'NAME' => 'Id инфоблока', 'TYPE' => 'STRING', 'MULTIPLE' => 'N', 'PARENT' => 'BASE', ), 'CACHE_TIME' => array('DEFAULT'=>3600), ), ); ?>
Рассмотрим содержимое файла более подробно. Ключ PARAMETERS массива $arComponentParameters представляет собой массив с описанием параметров. Наш компонент будет содержать только один основной параметр — IBLOCK_ID (ID инфоблока, из которого будут показываться разделы).
Ключи:
NAME — название параметра;
TYPE – тип;
MULTIPLE — множественность (если ‘Y’, то наш параметр сможет принимать массив значений);
PARENT — родитель (параметры можно делить на группы);
Обратите внимание на второй параметр CACHE_TIME — он по умолчанию для компонентов Bitrix и устанавливает время кеширования.
Из массива $arComponentParameters будет сгенерирован массив $arParams, который будет использоваться в основном файле нашего компонента — component.php
Содержимое файла component.php:
<? if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true)die(); // echo '<pre>'; print_r($arParams); echo '</pre>'; CModule::IncludeModule('iblock'); if ($this->StartResultCache(3600)) { $iblock_id = $arParams['IBLOCK_ID']; $arFilter = array('IBLOCK_ID'=>$iblock_id); $db_list = CIBlockSection::GetList(array('NAME'=>'ASC'), $arFilter, true, array("ID", "NAME", "CODE")); while($ar_result = $db_list->GetNext()) { $arResult[] = array( "ID" => $ar_result['ID'], "CODE" => $ar_result['CODE'], "NAME" => $ar_result['NAME'], "ELEMENT_CNT" => $ar_result['ELEMENT_CNT'] ); } // echo '<pre>'; print_r($arResult); echo '</pre>'; $this->IncludeComponentTemplate(); } ?>
Файл component.php содержит всю логику компонента, основная задача этого файла — сформировать из полученных параметров ($arParams) массив $arResult, который впоследствии будет передан в шаблон компонента. Обратите внимание на два комментария. Раскомментировав их, вы всегда сможете наблюдать за тем, какие параметры приходят в компонент, и какой результат получает шаблон.
Код созданного нами компонента не сложен — в зависимости от полученого параметра (ID инфоблока) мы делаем выборку разделов и сохраняем их в массив $arResult. Следует обратить внимание на вызов метода $this->StartResultCache(). Он проверяет, есть ли у нашего компонента актуальный кеш. Если он есть, то выводится информация из кеша. Следовательно, запроса к базе нету, массив $arResult не генерируется, и даже шаблон не подлючается (метод $this->IncludeComponentTemplate()).
Следующий шаг — создание шаблона для компонента. Шаблон принимает массив $arResult, сгенерированный в файле component.php и выводит его содержимое в браузер. Файл шаблона нашего компонента будет находиться по следующему пути: /bitrix/components/custom/sections.list/templates/.default/template.php
Код в шаблоне компонента:
<h1>Рубрики блога</h1> <?if (is_array($arResult)):?> <?foreach($arResult as $category):?> <?=$category['NAME']?> (<?= $category['ELEMENT_CNT']?>) <?endforeach;?> <?endif;?>
После создания компонента его необходимо вызвать в нужном участке кода на сайте. Для этого создадим в корне сайта файл test.php, и пропишем в него следующий код:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->IncludeComponent("custom:sections.list", ".default", array( "IBLOCK_ID" => 1 ), false); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Для параметра IBLOCK_ID необходимо указать ID инфоблока, содержащего разделы. Записав параметры в файле, следует запросить скрипт посредством браузера, и просмотреть результат./strong
А ссылку то как прикрутить к этому?