О web-разработке
и даже немного больше...

Компоненты. Создание компонента

sozdanie_komponentaНемного теории:

В системе 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

Опубликован: 15.02.2013 г.

См. также:

«Не удалось установить соединение с сервером. Проверьте …».
Получение Email-адреса покупателя в заказе (Bitrix D7)
Работа с URL-адресами в Bitrix D7
Работа с купонами в Bitrix API
Добавляем пункт меню для списков в админке Битрикс
Диалоговые окна в Bitrix API
Создание инфоблока при установке модуля
Создание копии корзины из заказа на Bitrix D7

Комментарии

  1. Владимир пишет:

    А ссылку то как прикрутить к этому?

Добавить комментарий для Владимир Отменить ответ

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

Комментарии
  • Загрузка...
Друзья сайта