Дата последнего изменения: 16.11.2023
В качестве примера сделаем компонент, который выводит текущую дату и время. Причем формат вывода даты и времени задается выбором в свойствах. В реальных условиях такой компонент будет неинтересен. Но нам важно понять, как выполняется разработка компонента. В более сложных случаях все реализуется похожим образом.
Первым делом сразу напишем 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
:
templates/.default/template.php
Пока сделаем компонент без возможности задания входного параметра - формата даты.
Содержимое файлов:
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); $arResult['DATE'] = date('Y-m-d'); $this->IncludeComponentTemplate(); ?>
<? 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С-Битрикс.