Создание простого компонента Битрикс

Теория

Основная структура компонента

- help

- images

- lang

- templates

.description.php

.parameters.php

component.php

В папке help обычно лежит файл .tooltips.php, содержащий массив всплывающих подсказок для настроек компонента. Не будем на нём останавливаться, пример этого файла можно посмотреть в других компонентах. В папке images обычно лежит иконка компонента. В папке lang лежат подпапки для языковых параметров компонента. В папке templates - все шаблоны компонента.

Можно сразу сделать дефолтных шаблон для нашего компонета. Полный путь до него будет выглядеть так: /bitrix/components/user/elements/templates/.default/template.php. Вставим туда пока одну единственную строчку "Это дефолтный шаблон компонента user:elementst".

Практика

Решим самую простую задачу - пусть наш компонент должен будет выводить значения элементов ифоблока.

Поместим в файл .description.php следующий код:;

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

$arComponentDescription = array(
	"NAME" => 'elements: Элементы инфоблока',
	"DESCRIPTION" => 'Элементы инфоблока',
	"ICON" => "/images/logo.gif",
	"CACHE_PATH" => "Y",
	"PATH" => array(
		"ID" => "utility",
	),
);
?>

Массив с описанием компонента. Следующий файл - .parameters.php:

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

$arComponentParameters = array(
	'PARAMETERS' => array(
		'ID_BLOCK' => array(
			'NAME' => 'Id Инфоблока',
			'TYPE' => 'INTEGER',
			'MULTIPLE' => 'N',
			'PARENT' => 'BASE',
			),
		'CACHE_TIME'  =>  array('DEFAULT'=>3600),
	),
);
?>

Ключ PARAMETERS массива $arComponentParameters представляет собой массив с описанием параметров. У нашего компонента будет только один параметр - IBLOCK_ID (ID инфоблока, из которого мы будем выводить элементы). Ключи NAME - название параметра, TYPE - тип, MULTIPLE - множественность (если 'Y', то наш параметр сможет принимать массив значений), PARENT - родитель (параметры можно делить на группы. В этой статье не рассматривается). Обратите внимание на второй параметр CACHE_TIME - он дефолтный для компонентов Битрикса и устанавливает время кеширования.

Из массива $arComponentParameters будет сгенерирован массив $arParams, который будет использоваться в основном файле нашего компонента - component.php

 <?
if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true)die();
// echo '<pre>'; print_r($arParams); echo '</pre>';
if ($this->StartResultCache(3600))
{
	$idblock=$arParams["ID_BLOCK"];
	// echo $idblock;
	if(CModule::IncludeModule('iblock'))  //обязательное условие для работы указанных методов
    { 
        $arSelect = Array("ID","NAME","DETAIL_TEXT"); 
        /// выборка значений полей.   DETAIL_TEXT - детальное описание элемента 
         
        $arFilter = Array("IBLOCK_ID"=>$idblock, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
        $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>100), $arSelect); // nPageSize - количество элементов на 1 странице
        while($ob = $res->GetNextElement()) // "бежим" по элементам
        {
          $arResult[] = $ob->GetFields();  // $arResult массив значений полей текущего элемента
        }
         
    }  
	//print_r($arResult);
	//print_r($_GET);
	$this->IncludeComponentTemplate();
}
?>

В файле component.php содержится вся логика компонента. Задача этого файла - сформировать из полученных параметров ($arParams) массив $arResult, который впоследствии попадет в шаблон компонента. Обратите внимание на два комментария. Раскомментировав их, вы всегда сможете наблюдать за тем, какие параметры приходят в компонент, и какой результат получает шаблон.

Сам код нашего компонента не сложен - в зависимости от полученого параметра (ID инфоблока) мы делаем выборку разделов и сохраняем их в массив $arResult. Следует обратить внимание на вызов метода $this->StartResultCache(). Он проверяет, есть ли у нашего компонента актуальный кеш. Если он есть, то выводится информация из кеша. Следовательно, запроса к базе нету, массив $arResult не генерируется, и даже шаблон не подлючается (метод $this->IncludeComponentTemplate()).

Шаблон компонента

Следующий шаг - создание шаблона для компонента. Шаблон принимает массив $arResult, сгенерированный в файле component.php и выводит его содержимое в браузер. Поправим файл /bitrix/components/user/elements/templates/.default/template.php:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?></p>
<h2>
	Элементы инфоблока</h2>
<? foreach($arResult as $res): ?>
<div>
	Название: <?=$res['NAME']?></div>
<div>
	Детальное описание: <?=$res['DETAIL_TEXT']?></div>
<? endforeach; ?>
<p>
	

 

Вызов компонента

Теперь всё готово, осталось только вызвать наш компонент. Как мы помним, компоненты вызываются в публичной части сайта. Создадим прямо в корне сайта файл test.php:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Тест");
?><?$APPLICATION->IncludeComponent("user:elements", ".default", array(
	"ID_BLOCK" => "9"
	),
	false
);?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

При создании материала использована статья: http://www.bxdev.ru/posts/components/bitrix_components_creating_simple_component/

Файл: 

Оставлен Дени (не проверено) 9 Ноябрь, 2012 - 19:42

Спасибо за статью, все понятно и просто)

Оставлен Вовка (не проверено) 24 Январь, 2013 - 13:17

Спасибо большое! В отличии от оригинальной статьи этот пример работает!

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

comment

  • Доступные HTML теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
2011 © zapiski.pro