361  /  382
Справочник

Простой пример создания компонента

Просмотров: 104252
Дата последнего изменения: 16.11.2023
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

В качестве примера сделаем компонент, который выводит текущую дату и время. Причем формат вывода даты и времени задается выбором в свойствах. В реальных условиях такой компонент будет неинтересен. Но нам важно понять, как выполняется разработка компонента. В более сложных случаях все реализуется похожим образом.

Предварительные действия

Готовим php-код компонента

Первым делом сразу напишем php-код, который выполняет, то, что нам нужно.

<?
echo date('Y-m-d');
?>

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

<?
$format = 'Y-m-d';
echo date($format);
?>

И последний штрих — нужно разделить логику и представление:

<?
// параметры
$format = 'Y-m-d';
// логика
$d = date($format);
// представление
echo $d;
?>

Создаем структуру папок и файлов компонента

Теперь нужно создать свое пространство имен, например: dv. Для этого надо создать папку /local/components/dv. В ней делаем папку компонента — date.current. И в ней, в свою очередь, создаем два обязательных файла и папку для хранения шаблонов templates. В этой папке должна быть создана папка .default и в ней файл template.php.

Получаем такую структуру в папке /local/components/dv/date.current:

  • component.php
  • .description.php
  • templates/.default/template.php

Компонент без входных параметров

Пока сделаем компонент без возможности задания входного параметра - формата даты.

Содержимое файлов:

  • component.php
    <? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
    	$arResult['DATE'] = date('Y-m-d');
    	$this->IncludeComponentTemplate();
    ?>
  • .description.php
    <? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arComponentDescription = array(
    	"NAME" => GetMessage("Текущая дата"),
    	"DESCRIPTION" => GetMessage("Выводим текущую дату"),
    );
    ?>
  • templates/.default/template.php
    <? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
    	echo $arResult['DATE'];
    ?>

Как вы могли заметить в каждом из файлов компонента в начале пишется строка if (!defined(“B_PROLOG_INCLUDED”) || B_PROLOG_INCLUDED!==true) die();. Она нужна для того, чтобы данные файлы нельзя было вызвать напрямую из окна браузера.

В простейшем виде компонент готов — его можно вызвать в коде страниц при помощи конструкции:

<? $APPLICATION->IncludeComponent(
	"dv:date.current",
	".default",
	Array(
	),
	false
);?>

Компонент с входными параметрами

Теперь давайте сделаем, чтобы компонент можно было добавлять на страницу из визуального редактора, и чтобы можно было задавать шаблон выдачи даты в настройках компонента.

Чтобы наш компонент появился в визуальном редакторе нужно дополнить файл описания компонента.

.description.php:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); 
$arComponentDescription = array(
	"NAME" => GetMessage("Текущая дата"),
	"DESCRIPTION" => GetMessage("Выводим текущую дату"),
	"PATH" => array(
		"ID" => "dv_components",
		"CHILD" => array(
			"ID" => "curdate",
			"NAME" => "Текущая дата"
		)
),
"ICON" => "/images/icon.gif",
);
?>

Для размещения компонента в дереве компонентов мы добавили элемент массива описания PATH. Таким образом, наш компонент будет показан в отдельной папке. Опционально, можно задать иконку компонента — она будет показываться в дереве и в визуальном редакторе.

Разберемся с настройками компонента. Будем считать, что опцию шаблон даты мы будем задавать строкой. Создаем файл .parameters.php с таким содержанием:

<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
 $arComponentParameters = array(
	"GROUPS" => array(),
	"PARAMETERS" => array(
		"TEMPLATE_FOR_DATE" => array(
			"PARENT" => "BASE",
			"NAME" => "Шаблон для даты",
			"TYPE" => "STRING",
			"MULTIPLE" => "N",
			"DEFAULT" => "Y-m-d",
		),
	),
);
?>

И изменяем файл с логикой компонента, чтобы он мог использовать параметр, который мы задаем component.php:

<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
	$arResult['DATE'] = date($arParams["TEMPLATE_FOR_DATE"]);
	$this->IncludeComponentTemplate();
?>

Результат

Мы создали компонент, в самом простом виде. Мы не учитывали мультиязычность, не учитывали возможность создания помощи к компоненту и прелести кеширования компонентов.

Большая часть заказных компонентов для Bitrix Framework создается путем изменения компонентов, идущих в поставке продуктов. Поэтому очень нужно хорошо изучить стандартные компоненты, перед тем как программировать новые. Скорее всего, задачу, которую вы хотите решить — уже решили разработчики компании 1С-Битрикс.


66
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии