Модуль создан для проектов, где контент не укладывается в «одно поле = одно значение».
Модуль добавляет гибкое комбинированное свойство: вы настраиваете набор подполей под бизнес-задачу и управляете ими в одной удобной форме — без лишних инфоблоков, сложных костылей и потери контроля над структурой.
Подходит для сайтов услуг, каталогов, корпоративных порталов, лендингов и проектов с насыщенным контентом, где важно быстро запускать новые форматы страниц и при этом сохранять чистую архитектуру данных.
Что даёт модуль- объединяет связанные данные в одно логическое поле (хранение в JSON);
- позволяет собирать собственные структуры из подполей разных типов;
- ускоряет работу контент-менеджера за счёт понятной формы в админке;
- снижает стоимость доработок: структура меняется в настройках свойства, а не через создание новых сущностей;
- сохраняет гибкость вёрстки: данные готовы для произвольного вывода в шаблонах.
- строка;
- число;
- файл;
- текст (в том числе многострочный / HTML-редактор);
- дата;
- привязка к элементу;
- привязка к разделу;
- список;
- цвет;
- Яндекс.Карта.
Один из главных сценариев, под который проектировался модуль — страницы, собранные из смысловых блоков:
- «Кому подойдет»
- «Этапы работы»
- «Стоимость»
- «Примеры работ»
- «Частые вопросы»
- «Преимущества»
- «Характеристики»
Каждый такой блок можно оформить как отдельное комбинированное свойство.
Внутри блока — свой набор подполей: заголовок, описание, изображение, список, ссылка, дата, привязки и т.д.
Результат для проекта:
- нет необходимости плодить десятки типовых инфоблоков;
- структура страницы адаптируется под конкретный раздел/продукт;
- контент остаётся управляемым и предсказуемым для редакторов;
- фронтенд-команда получает чистые структурированные данные для любой вёрстки.
Удобно для карточек филиалов, офисов, точек продаж, шоурумов.
Рекомендуемая структура:
- Адрес — текст;
- Карта — Яндекс.Карта (только для элемента);
- Телефон — текст;
- Email — текст.
Что это даёт: единый формат контактных данных, быстрое редактирование менеджером и готовая основа для вывода контактных блоков в нужном дизайне.
Сценарий 2: СобытияПодходит для анонсов мероприятий, вебинаров, презентаций, обучающих программ.
Рекомендуемая структура:
- Дата начала — дата;
- Дата окончания — дата;
- Место проведения — текст;
- Организатор — привязка к элементу.
Что это даёт: аккуратная событийная карточка с чёткой структурой, удобная фильтрация и единый стандарт для всех событий на сайте.
Сценарий 3: Коммерческие предложенияИдеально для тарифных сеток, пакетов услуг, ценовых блоков и промо-предложений.
Рекомендуемая структура:
- Название тарифа — строка;
- Цена — число;
- Состав услуг — многострочный текст или список;
- Метка «Хит/Рекомендуем» — список.
Что это даёт: прозрачное управление тарифами без отдельного сложного каталога, быстрое обновление цен/состава и удобный вывод в карточках и лендингах.
Примеры кода для разработчиковГотовые сниппеты для быстрой интеграции в шаблоны Битрикс
VALUE приходит как массив подполей.
<?php
$contacts = $arResult['PROPERTIES']['CONTACTS_BLOCK']['VALUE'] ?? [];
if (!is_array($contacts) || empty($contacts)) {
return;
}
$address = (string)($contacts['ADDRESS'] ?? '');
$phone = (string)($contacts['PHONE'] ?? '');
$email = (string)($contacts['EMAIL'] ?? '');
?>
<div class="contacts-block">
<?php if ($address !== ''): ?>
<div>Адрес: <?= htmlspecialcharsbx($address) ?></div>
<?php endif; ?>
<?php if ($phone !== ''): ?>
<div>Телефон: <a href="tel:<?= htmlspecialcharsbx($phone) ?>"><?= htmlspecialcharsbx($phone) ?></a></div>
<?php endif; ?>
<?php if ($email !== ''): ?>
<div>Email: <a href="mailto:<?= htmlspecialcharsbx($email) ?>"><?= htmlspecialcharsbx($email) ?></a></div>
<?php endif; ?>
</div>
Пример 2. Элемент инфоблока, свойство множественное (MULTIPLE = Y)
VALUE приходит как массив строк, где каждая строка — отдельный блок-строка (массив подполей).
<?php
$rows = $arResult['PROPERTIES']['TARIFFS']['VALUE'] ?? [];
if (!is_array($rows) || empty($rows)) {
return;
}
?>
<div class="tariffs">
<?php foreach ($rows as $row): ?>
<?php if (!is_array($row)) { continue; } ?>
<?php
$name = (string)($row['TARIFF_NAME'] ?? '');
$price = $row['PRICE'] ?? '';
$services = (string)($row['SERVICES'] ?? '');
$badge = (string)($row['BADGE'] ?? '');
?>
<div class="tariff-card">
<?php if ($name !== ''): ?><h3><?= htmlspecialcharsbx($name) ?></h3><?php endif; ?>
<?php if ($price !== '' && $price !== null): ?><div><?= htmlspecialcharsbx((string)$price) ?> ₽</div><?php endif; ?>
<?php if ($services !== ''): ?><div><?= nl2br(htmlspecialcharsbx($services)) ?></div><?php endif; ?>
<?php if ($badge !== ''): ?><span><?= htmlspecialcharsbx($badge) ?></span><?php endif; ?>
</div>
<?php endforeach; ?>
</div>
Пример 3. Файловое подполеВ подполе хранится file_id (число).
<?php
$fileId = (int)($row['FILE'] ?? 0);
if ($fileId > 0) {
$file = CFile::GetFileArray($fileId);
if (is_array($file) && !empty($file['SRC'])) {
$name = $file['ORIGINAL_NAME'] ?: $file['FILE_NAME'];
echo '<a href="' . htmlspecialcharsbx($file['SRC']) . '" target="_blank" rel="noopener">'
. htmlspecialcharsbx($name)
. '</a>';
}
}
Пример 4. UF раздела (section_cprop)<?php
$event = $arResult['UF_EVENT_META'] ?? [];
if (!is_array($event) || empty($event)) {
return;
}
?>
<div class="event-meta">
<div>Начало: <?= htmlspecialcharsbx((string)($event['DATE_FROM'] ?? '')) ?></div>
<div>Окончание: <?= htmlspecialcharsbx((string)($event['DATE_TO'] ?? '')) ?></div>
<div>Место: <?= htmlspecialcharsbx((string)($event['PLACE'] ?? '')) ?></div>
<div>Организатор ID: <?= (int)($event['ORGANIZER'] ?? 0) ?></div>
</div>
Рекомендации по использованию- используйте стабильные коды подполей (TITLE, PRICE, DATE_FROM) и не меняйте их без необходимости;
- для публичного шаблона всегда экранируйте вывод через htmlspecialcharsbx;
- для сложных блоков выносите разбор JSON в result_modifier.php, а в template.php оставляйте только вывод;
- для повторяющихся секций используйте множественные свойства и единый шаблон рендера.
Почему это выгодно бизнесу
- быстрее запуск новых страниц и направлений;
- меньше затрат на разработку и сопровождение;
- единый подход к контенту в разных разделах сайта;
- меньше ошибок редакторов;
- проще масштабировать проект при росте ассортимента и услуг.
- структурированные данные в одном свойстве;
- простая интеграция в шаблоны компонентов;
- меньше «зоопарка» инфоблоков и технического долга;
- гибкая эволюция проекта без тяжёлых миграций.