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

Это еще одна заметка из моего первого и, скорее всего, единственного заказа на Битриксе. Возможно, кому-нибудь она пригодится.

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

  • КОРЕНЬ/local/components/mynamespace — где «mynamespace» ваше наименование пространства имен;
  • КОРЕНЬ/local/components/mynamespace/mycomponentname — где «mycomponentname» наименование вашего компонента;
  • КОРЕНЬ/local/components/mynamespace/mycomponentname/component.php — обязательный файл, всегда называется так.
  • КОРЕНЬ/local/components/mynamespace/mycomponentname/.description.php — необязательный файл описания функционала компонента, желательно создавать;
  • КОРЕНЬ/local/components/mynamespace/mycomponentname/templates/.default — директория для шаблона и других файлов (css/js обычно) компонента;
  • КОРЕНЬ/local/components/mynamespace/mycomponentname/templates/.default/template.php — файл шаблона компонента, в нем размещается разметка (HTML);
  • КОРЕНЬ/local/components/mynamespace/mycomponentname/templates/.default/script.js — файл со скриптами компонента, который автоматически подключается, главное чтобы наименование было script.js.
  • КОРЕНЬ/local/components/handlers/handle_components_query.php — свой файл, добавил только для примера обращения к файлу из компонента по AJAX’у. Его создавать не обязательно.

КОРЕНЬ/local/components/mynamespace/mycomponentname/component.php:

<?php
 
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die();
}
 
$arResult['MY_VAR_KEY'] = 'MY_VAR_VALUE';
 
$this->IncludeComponentTemplate();

КОРЕНЬ/local/components/mynamespace/mycomponentname/.description.php:

<?php
 
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die();
}
 
$arComponentDescription = [
    "NAME" => 'Наименование компонента',
    "DESCRIPTION" => 'Описание компонента',
];

КОРЕНЬ/local/components/mynamespace/mycomponentname/templates/.default/template.php:

<?php
 
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die();
}
 
echo $arResult['MY_VAR_KEY']; // MY_VAR_VALUE
 
// В этом месте размещается весь HTML-код компонента.

КОРЕНЬ/local/components/mynamespace/mycomponentname/templates/.default/script.js

$(document).ready(function () {
	$.ajax({
		type: 'POST',
		url: '/local/handlers/handle_components_query.php',
		data: {"my_test_var": "my_test_value"},
		dataType: 'html',
		success: function (data) {
			alert(data);
		}
	});
});

КОРЕНЬ/local/components/handlers/handle_components_query.php:

<?php
 
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
 
// global $USER; // Если нужен пользователь.
 
// На странице js-код покажет alert с my_test_value
echo $_POST['my_test_var'];

На этом все, эта заготовка компонента позволит избавиться от копирования одинаковых блоков на разных страницах. Вызывается данный компонент вот так:

<?php $APPLICATION->IncludeComponent(
	"mynamespace:mycomponentname",
	".default",
	[],
	false
) ?>

09.10.2020

Категория(-и): Разработка

#

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