В процессе разработки на «1С-Битрикс» разработчики часто сталкиваются с необходимостью отобразить в шаблоне сайта определённые блоки или изменить их поведение на основе данных из компонента. Классические примеры включают показ специального баннера в футере только для определённых страниц или изменение мета-тегов в зависимости от контента.
В этой статье рассмотрим профессиональный подход к решению подобных задач с использованием встроенного API платформы.
Проблема разделения логики и представления
Типичные сценарии:
-
Динамический футер — отображение специального баннера только в карточках товаров
-
Умные заголовки — изменение
<title>на основе данных компонента -
Контекстные мета-теги — добавление в
<head>специфических тегов для отдельных страниц
Основная сложность заключается в том, что логика определения необходимости этих действий находится внутри компонента, а область их применения — в шаблоне сайта (header.php, footer.php).
Ошибочный путь — использование глобальных переменных через $GLOBALS — приводит к непредсказуемым побочным эффектам и усложняет поддержку кода.
Правильное решение — использование методов $APPLICATION->SetPageProperty() и $APPLICATION->GetPageProperty().
Практическая реализация
Установка свойств в компоненте
Логику передачи данных следует размещать в файле component_epilog.php компонента. Этот файл выполняется после основного шаблона, что делает его идеальным местом для подобных операций. Как передавать данные из result_modifier.php в component_epilog.php смотрите в этой статье.
Базовый пример: установка флага
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die();
}
// Активируем специальный режим отображения
$APPLICATION->SetPageProperty("SPECIAL_FOOTER_OFFER", "Y");
?>Расширенный пример: передача данных
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die();
}
// Формируем динамический заголовок на основе данных компонента
$bannerTitle = "Акция: " . $APPLICATION->GetTitle();
$APPLICATION->SetPageProperty("FOOTER_BANNER_TITLE", $bannerTitle);
?>Использование свойств в шаблоне
Получить установленные свойства можно в любой части шаблона сайта. Второй параметр метода GetPageProperty() задаёт значение по умолчанию.
Пример использования в footer.php
<?php
$showSpecialOffer = $APPLICATION->GetPageProperty("SPECIAL_FOOTER_OFFER", "N");
$bannerTitle = $APPLICATION->GetPageProperty("FOOTER_BANNER_TITLE", "Специальное предложение");
if ($showSpecialOffer === "Y") {
?>
<section class="special-footer-banner">
<h3><?= htmlspecialcharsbx($bannerTitle) ?></h3>
<div class="banner-content">
<p>Только сегодня скидка 15%!</p>
</div>
</section>
<?php
}
?>Пример использования в header.php
<?php
$customPageTitle = $APPLICATION->GetPageProperty("CUSTOM_TITLE");
if ($customPageTitle) {
$APPLICATION->SetTitle(htmlspecialcharsbx($customPageTitle));
}
?>Преимущества подхода
1. Безопасность и стабильность
Отсутствие глобальных переменных исключает конфликты между различными компонентами и модулями системы.
2. Чистая архитектура
Использование штатного API Битрикс обеспечивает правильное разделение ответственности между компонентами и шаблоном.
3. Удобство сопровождения
Код становится более читаемым и предсказуемым. Легко отслеживать установку и использование свойств через стандартные методы платформы.
4. Гибкость конфигурации
Возможность передачи произвольных данных и их использования в различных частях шаблона обеспечивает необходимую степень свободы при сохранении чёткой структуры.
Заключение
Использование методов SetPageProperty() и GetPageProperty() представляет собой идиоматический способ организации взаимодействия между компонентами и шаблоном в «1С-Битрикс».
Этот подход соответствует лучшим практикам разработки, обеспечивая безопасность, поддерживаемость и масштабируемость ваших решений. Переход от глобальных переменных к использованию API платформы — важный шаг в профессиональном росте битрикс-разработчика.