Битрикс. Создание простого компонента. Часть 1 из 2

26.08.2018

Теги: $arParams$arResult.description.php.parameters.phpCMSWeb-разработкаБитриксКомпонентШаблонКомпонентаЭлементИнфоблока

Давайте создадим простой компонент, который умеет выводить элемент каталога (товар) по его идентификатору. В первую очередь нужно создать свое пространство имен, например demo. Для этого создаем папку /bitrix/components/demo, а внутри нее делаем папку компонента catalog.element. И в ней, в свою очередь, создаем следующие папки и файлы:

  • файл component.php
  • файл .description.php
  • файл .parameters.php
  • папка templates
[bitrix]
    [components]
        [bitrix]
            [advertising.banner]
            ..........
        [demo]
            [catalog.element]
                [templates]
                    [.default]
                        template.php
                component.php
                .description.php
                .parameters.php

В файле component.php размещаем код, получающий из базы данных элемент инфоблока по идентификатору:

<?php
/*
 * Файл bitrix/components/demo/catalog.element/component.php
 */
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();

// массив результата работы компонента
$arResult = array();
if (CModule::IncludeModule('iblock')) {
    // получаем из базы данных элемент инфоблока по идентификатору;
    // идентификатор получаем из входных параметров компонента
    $PRODUCT_ID = (int)$arParams['PRODUCT_ID'];
    $result = CIBlockElement::GetByID($PRODUCT_ID);
    if ($product = $result->GetNext()) {
        $arResult['GENERAL'] = $product;
    }
}
// подключаем шаблон компонента
$this->IncludeComponentTemplate();

В файле .description.php задаем имя и описание компонента и задаем расположение компонента в визуальном редакторе:

<?php
/*
 * Файл bitrix/components/demo/catalog.element/.description.php
 */
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
$arComponentDescription = array(
    'NAME' => 'Товар каталога',
    'DESCRIPTION' => 'Выводит товар каталога',
    'PATH' => array(
        'ID' => 'demo',
        'NAME' => 'Мои компоненты',
        'CHILD' => array(
            'ID' => 'demo_catalog',
            'NAME' => 'Каталог товаров'
        )
    ),
    'ICON' => '/images/icon.gif'
);

Ключи массива $arComponentDescription:

  • NAME — название компонента;
  • DESCRIPTION — описание компонента;
  • ICON — путь к иконке компонента относительно папки компонента;
  • PATH — расположение компонента в виртуальном дереве компонента в визуальном редакторе. Значением этого элемента должен быть массив, имеющий ключи:
    • ID — код ветки дерева
    • NAME — название ветки дерева
    • CHILD — подчиненная ветка. В элементе с ключем CHILD может быть задана подчиненная ветка дерева с той же структурой, что и родительская ветка. Названия первого уровня content (контент), service (сервисы), communication (общение), e-store (магазин), utility (служебные) стандартизованы и их задавать не следует. Если ключ PATH не задан, то компонент не будет присутствовать в визуальном редакторе.
<?php
/*
 * Файл bitrix/components/demo/catalog.element/.parameters.php
 */
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
$arComponentParameters = array(
    'GROUPS' => array(),
    'PARAMETERS' => array(
        'PRODUCT_ID' => array(
            'PARENT' => 'BASE', // код группы, если отсутствует, подразумевается ADDITIONAL_SETTINGS
            'NAME' => 'Идентификатор товара', // название параметра на текущем языке
            'TYPE' => 'STRING', // тип элемента управления, в котором будет устанавливаться параметр
            'MULTIPLE' => 'N',  // одиночное/множественное значение (N/Y)
            'DEFAULT' => '346', // значение по умолчанию
            'REFRESH' => 'Y',   // перегружать настройки или нет после выбора (N/Y)
        ),
    ),
);

Параметры в визуальном параметре группируются, ключ GROUPS задает массив групп параметров компонента. Имеется предопределенный набор групп:

Код Сортировка Название Описание
BASE 100 Основные параметры Базовые параметры для работы компонента
DATA_SOURCE 200 Источник данных Параметры, указывающие, откуда выбирать данные для компонента (к примеру, для компонент модуля Инфоблоки это тип и ID инфоблока).
VISUAL 300 Настройки внешнего вида Сюда предполагается размещать параметры, отвечающие за внешний вид.
USER_CONSENT 350 Согласие пользователя Настрйока параметров на получение согласия пользователя, согласно законодательству РФ.
URL_TEMPLATES 400 Шаблоны ссылок Служебная
SEF_MODE 500 Управление адресами страниц Группа для всех параметров, связанных с использованием ЧПУ.
AJAX_SETTINGS 550 Управление режимом AJAX Все, что касается использования AJAX.
CACHE_SETTINGS 600 Настройки кеширования Появляется при указании параметра CACHE_TIME.
ADDITIONAL_SETTINGS 700 Дополнительные настройки Эта группа появляется, например, при указании параметра SET_TITLE.

Ключ PARAMETERS задает массив параметров компонента. У нас единственный параметр, который задает идентификатор элемента инфоблока.

И наконец, файл шаблона компонента, который отвечает за показ элемента инфоблока:

<?php
/*
 * Файл bitrix/components/demo/catalog.element/templates/.default/template.php
 */
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
?>

<h1><?= $arResult['GENERAL']['NAME']; ?></h1>

<?php if (!empty($arResult['GENERAL']['DETAIL_TEXT'])): ?>
    <div class="description">
    <?= $arResult['GENERAL']['DETAIL_TEXT']; ?>   
    </div>
<?php endif; ?>

<?php if (!empty($arResult['GENERAL']['DETAIL_PICTURE'])): ?>
    <?php $image = CFile::GetPath($arResult['GENERAL']['DETAIL_PICTURE']); ?>
    <img src="<?= $image; ?>" alt="" />
<?php endif; ?>

В принципе, компонент готов. Давайте создадим раздел сайта demo и откроем страницу /demo/index.php в визуальном редакторе:

После размещения компонента на странице появится форма параметров компонента:

А файл /demo/index.php будет содержать код вызова компонента:

<?php require $_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"; ?>

<?php
$APPLICATION->IncludeComponent(
    "demo:catalog.element",
    "",
    Array(
        "PRODUCT_ID" => "346"
    )
);
?>

<?php require $_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"; ?>

Поиск: $arParams • $arResult • .description.php • .parameters.php • CMS • Web-разработка • Битрикс • Компонент • Шаблон компонента • Элемент инфоблока • $arComponentDescription • $arComponentParameters

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.