Структура компонента
Здесь приведу тексты типовых файлов компонента. А вот и ссылка на документацию Bitrix. Отличие моей статьи в том, что здесь одна страница, а там целый раздел. И тексты приведенные здесь являются заготовками для будущих компонентов. Я рекомендую ознакомится с документацией битрикса, а затем использовать эту страницу как шпаргалку (я так и делаю)
Типовая структура компонента
.parameters.php
.parameters.php
Тут описываются какие параметры есть у компонента, ссылка на документацию Bitrix. Здесь я обычно также не использую все возможности. А они, надо сказать, довольно большие, поэтому по приведенной ссылке перейти стоит. Привожу краткий пример:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arComponentParameters = array(
"GROUPS" => array(
),
"PARAMETERS" => array(
"IBLOCK_ID" => Array(
"PARENT" => "BASE",
"NAME" => 'Инфоблок',
"TYPE" => "STRING",
),
"CODE" => array(
"PARENT" => "BASE",
"NAME" => 'Код элемента',
"TYPE" => "STRING",
),
"SECTION_CODE" => array(
"PARENT" => "BASE",
"NAME" => 'Код раздела',
"TYPE" => "STRING",
),
"CACHE_TIME" => Array("DEFAULT"=>36000000),
),
);
component.php
Наконец то, добрались до самого компонента. В документации битрикса, я не нашел полноценной статьи, которая описывает возможную структуру компонента. Здесь приведу мой шаблон нового компонента. Пример избыточен, удали лишнее:
if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
//Проверим параметры
if(!isset($arParams['CACHE_TIME']))
$arParams['CACHE_TIME'] = 36000000;
$arParams['CODE'] = trim($arParams['CODE']);
$arParams['SECTION_CODE'] = trim($arParams['SECTION_CODE']);
$arParams['IBLOCK_ID'] = intval($arParams['IBLOCK_ID']);
//Если параметр некорректен, можно сразу вернуть 404
if (!strlen($arParams['CODE'])){
@define("ERROR_404","Y");
return;
}
//Начали
if($this->StartResultCache(false)) {//кешируем
CModule::IncludeModule('iblock');
//получение данных
//......................
//вынесем отдельно мета теги:
$arResult['META']['H1'] = $arResult['ELEMENT']['NAME'];
$arResult['META']['DESCRIPTION'] = $arResult['ELEMENT']['PREVIEW_TEXT'];
$arResult['META']['KEYWORDS'] = $arResult['ELEMENT']['PROPERTY_KEYWORDS_VALUE'];
//Если не нашли элемент вернем 404-ю
{
@define("ERROR_404","Y");
$this->AbortResultCache();
return;
}
//Сохраним вне кеша мета теги и другие необходимые данные
$this->SetResultCacheKeys(array('META','ELEMENT_ID'));
//Если ничего не нужно сохранять вне кеша,
//то нужно в данную функцию передать пустой массив,
//иначе в кеш попадет массив $arResult целиком
$this->SetResultCacheKeys(array());
//Подключаем шаблон и заканчиваем кеширование
$this->IncludeComponentTemplate();
//либо можно закончить кеширование без подключения шаблона, а закешировать весь
//массив $arResult, который будет доступен далее в неизменном виде
$this->EndResultCache();
}
//Установим мета теги:
if($arResult['META']['H1']){
$APPLICATION->SetTitle($arResult['META']['H1']);
}
if($arResult['META']['TITLE']){
$APPLICATION->SetPageProperty('title', $arResult['META']['TITLE']);
}
if($arResult['META']['DESCRIPTION']){
$APPLICATION->SetPageProperty('description', $arResult['META']['DESCRIPTION']);
}
if($arResult['META']['KEYWORDS']){
$APPLICATION->SetPageProperty('keywords', $arResult['META']['KEYWORDS']);
}
//Затем можно вернуть какое либо значение вне компонента,
//чтобы использовать на странице, например передать в
//другой компонент в качестве параметра
return $arResult['ELEMENT_ID'];
Для установки мета тегов, была написана специальная функция setMeta($arResult['META']);, о ней можно прочитать в разделе Meta для всех
Комментарии:
Николай
21.06.2018 09:52:52
Подскажите как программно установить шаблон компонента (стандартного, например меню)?
Т.е. в настройках компонента например указан один шаблон,а при выполнении определенного условия в коде, компонент бы подгружал другой шаблон.
Знаю, что шаблон передается в массиве $arParams['COMPONENT_TEMPLATE'], я пытался просто писать и в result_modifier.php и в component.php что то вроде $arParams['COMPONENT_TEMPLATE'] = "map" толку нет...
Максим
22.06.2018 05:34:40
Но я бы лучше делал по другому, в самом шаблоне template.php смотрел на условия и в зависимости от них подгружал различные template. Думаю так было бы правильнее.
Николай
22.06.2018 08:53:19
Насчет $component, кроме как вывести ее целиком на экран командой print_r у меня ничего не выходит. Похоже здесь необходимо использовать другие методы чем с обычными переменными.
Оставить комментарий: