Каталог решений

Покупка продления купона

Продолжительность:
Общая сумма:
0 руб.
Ваш запрос успешно отправлен!

Я согласен с условиями активации продлений
Продлить
Продолжить покупки

Универсальное комбинированное свойство инфоблока

Модуль создан для проектов, где контент не укладывается в «одно поле = одно значение».Модуль добавляет гибкое комбинированное свойство: вы настраиваете набор подполей под бизнес-задачу и управляете ими в одной удобной форме — без лишних инфоблоков, сложных костылей и потери контроля над структурой.Подходит для сайтов услуг, каталогов, корпоративных порталов, лендингов и проектов с насыщенным контентом, где важно быстро запускать новые форматы страниц и при этом сохранять чистую архитектуру данных.Что даёт модульобъединяет связанные данные в одно логическое поле (хранение в JSON);позволяет собирать собственные структуры из подполей разных типов;ускоряет работу контент-менеджера за счёт понятной формы в админке;снижает стоимость доработок: структура меняется в настройках свойства, а не через создание новых сущностей;сохраняет гибкость вёрстки: данные готовы для произвольного вывода в шаблонах.Поддерживаемые типы подполейстрока;число;файл;текст (в том числе многострочный / HTML-редактор);дата;привязка к элементу;привязка к разделу;список;цвет;Яндекс.Карта.Ключевой сценарий: блочная структура страницОдин из главных сценариев, под который проектировался модуль — страницы, собранные из смысловых блоков:«Кому подойдет»«Этапы работы»«Стоимость»«Примеры работ»«Частые вопросы»«Преимущества»«Характеристики»Каждый такой блок можно оформить как отдельное комбинированное свойство.Внутри блока — свой набор подполей: заголовок, описание, изображение, список, ссылка, дата, привязки и т.д.Результат для проекта:нет необходимости плодить десятки типовых инфоблоков;структура страницы адаптируется под конкретный раздел/продукт;контент остаётся управляемым и предсказуемым для редакторов;фронтенд-команда получает чистые структурированные данные для любой вёрстки.Сценарий 1: КонтактыУдобно для карточек филиалов, офисов, точек продаж, шоурумов.Рекомендуемая структура:Адрес — текст;Карта — Яндекс.Карта (только для элемента);Телефон — текст;Email — текст.Что это даёт: единый формат контактных данных, быстрое редактирование менеджером и готовая основа для вывода контактных блоков в нужном дизайне.Сценарий 2: СобытияПодходит для анонсов мероприятий, вебинаров, презентаций, обучающих программ.Рекомендуемая структура:Дата начала — дата;Дата окончания — дата;Место проведения — текст;Организатор — привязка к элементу.Что это даёт: аккуратная событийная карточка с чёткой структурой, удобная фильтрация и единый стандарт для всех событий на сайте.Сценарий 3: Коммерческие предложенияИдеально для тарифных сеток, пакетов услуг, ценовых блоков и промо-предложений.Рекомендуемая структура:Название тарифа — строка;Цена — число;Состав услуг — многострочный текст или список;Метка «Хит/Рекомендуем» — список.Что это даёт: прозрачное управление тарифами без отдельного сложного каталога, быстрое обновление цен/состава и удобный вывод в карточках и лендингах.Примеры кода для разработчиковГотовые сниппеты для быстрой интеграции в шаблоны БитриксПример 1. Элемент инфоблока, свойство одиночное (MULTIPLE = N)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 оставляйте только вывод;для повторяющихся секций используйте множественные свойства и единый шаблон рендера.Почему это выгодно бизнесубыстрее запуск новых страниц и направлений;меньше затрат на разработку и сопровождение;единый подход к контенту в разных разделах сайта;меньше ошибок редакторов;проще масштабировать проект при росте ассортимента и услуг.Почему это удобно разработчикуструктурированные данные в одном свойстве;простая интеграция в шаблоны компонентов;меньше «зоопарка» инфоблоков и технического долга;гибкая эволюция проекта без тяжёлых миграций.

Универсальное комбинированное свойство инфоблока

Универсальное комбинированное свойство инфоблока

Купить: 1 000 руб.
Попробовать (10 дней)
от Xlogic
Купить продление
Скриншоты
Описание

Технические данные

Опубликовано:
31.07.2025
Обновлено:
10.09.2026
Версия:
2.2.0
Установлено:
Менее 50 раз
Подходящие редакции:
«Первый сайт», «Старт», «Стандарт», «Малый бизнес», «Бизнес», «Корпоративный портал», «Энтерпрайз», «Интернет-магазин + CRM»
Адаптивность:
Нет
Поддержка Композита:
Нет
Совместимо с Сайты24
Нет

Пользовательское соглашение

Описание

Модуль создан для проектов, где контент не укладывается в «одно поле = одно значение».
Модуль добавляет гибкое комбинированное свойство: вы настраиваете набор подполей под бизнес-задачу и управляете ими в одной удобной форме — без лишних инфоблоков, сложных костылей и потери контроля над структурой.

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

Что даёт модуль
  • объединяет связанные данные в одно логическое поле (хранение в JSON);
  • позволяет собирать собственные структуры из подполей разных типов;
  • ускоряет работу контент-менеджера за счёт понятной формы в админке;
  • снижает стоимость доработок: структура меняется в настройках свойства, а не через создание новых сущностей;
  • сохраняет гибкость вёрстки: данные готовы для произвольного вывода в шаблонах.
Поддерживаемые типы подполей
  • строка;
  • число;
  • файл;
  • текст (в том числе многострочный / HTML-редактор);
  • дата;
  • привязка к элементу;
  • привязка к разделу;
  • список;
  • цвет;
  • Яндекс.Карта.
Ключевой сценарий: блочная структура страниц

Один из главных сценариев, под который проектировался модуль — страницы, собранные из смысловых блоков:

  • «Кому подойдет»
  • «Этапы работы»
  • «Стоимость»
  • «Примеры работ»
  • «Частые вопросы»
  • «Преимущества»
  • «Характеристики»

Каждый такой блок можно оформить как отдельное комбинированное свойство.
Внутри блока — свой набор подполей: заголовок, описание, изображение, список, ссылка, дата, привязки и т.д.

Результат для проекта:

  • нет необходимости плодить десятки типовых инфоблоков;
  • структура страницы адаптируется под конкретный раздел/продукт;
  • контент остаётся управляемым и предсказуемым для редакторов;
  • фронтенд-команда получает чистые структурированные данные для любой вёрстки.
Сценарий 1: Контакты

Удобно для карточек филиалов, офисов, точек продаж, шоурумов.

Рекомендуемая структура:

  • Адрес — текст;
  • Карта — Яндекс.Карта (только для элемента);
  • Телефон — текст;
  • Email — текст.

Что это даёт: единый формат контактных данных, быстрое редактирование менеджером и готовая основа для вывода контактных блоков в нужном дизайне.

Сценарий 2: События

Подходит для анонсов мероприятий, вебинаров, презентаций, обучающих программ.

Рекомендуемая структура:

  • Дата начала — дата;
  • Дата окончания — дата;
  • Место проведения — текст;
  • Организатор — привязка к элементу.

Что это даёт: аккуратная событийная карточка с чёткой структурой, удобная фильтрация и единый стандарт для всех событий на сайте.

Сценарий 3: Коммерческие предложения

Идеально для тарифных сеток, пакетов услуг, ценовых блоков и промо-предложений.

Рекомендуемая структура:

  • Название тарифа — строка;
  • Цена — число;
  • Состав услуг — многострочный текст или список;
  • Метка «Хит/Рекомендуем» — список.

Что это даёт: прозрачное управление тарифами без отдельного сложного каталога, быстрое обновление цен/состава и удобный вывод в карточках и лендингах.

Примеры кода для разработчиков

Готовые сниппеты для быстрой интеграции в шаблоны Битрикс


Пример 1. Элемент инфоблока, свойство одиночное (MULTIPLE = N)

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 оставляйте только вывод;
  • для повторяющихся секций используйте множественные свойства и единый шаблон рендера.

Почему это выгодно бизнесу
  • быстрее запуск новых страниц и направлений;
  • меньше затрат на разработку и сопровождение;
  • единый подход к контенту в разных разделах сайта;
  • меньше ошибок редакторов;
  • проще масштабировать проект при росте ассортимента и услуг.
Почему это удобно разработчику
  • структурированные данные в одном свойстве;
  • простая интеграция в шаблоны компонентов;
  • меньше «зоопарка» инфоблоков и технического долга;
  • гибкая эволюция проекта без тяжёлых миграций.

Отзывы (0)
Обсуждения (0)
Здесь пока никто ничего не написал. Будьте первым.
Что нового
2.2.0 (10.09.2026)
  • Добавлено изменение порядка значений множественного свойства путём перетаскивания мышью
  • Панель управления блоком («Свернуть/Показать | Очистить») перенесена внутрь блока, в правый нижний угол; хэндл для перетаскивания — слева на всю высоту блока
  • Единое оформление панели управления для свойств элементов и UF-свойств разделов
  • Закрыт IDOR в файловых подполях — раньше можно было сослаться на чужой файл или удалить его
  • Из вставляемых в HTML-редактор изображений исключён приём SVG (риск встроенного <script>)
  • Добавлена защита от потери данных при переупорядочивании (проверка запроса, транзакция)
2.1.0 (18.08.2026)
  • переход на новую архитектуру с namespace-классами Xlogic\Iprop\* и сохранением обратной совместимости через class_alias (старые имена классов продолжают работать);
  • реестр типов полей и унификация обработки подполей комбинированного свойства;
  • расширенная поддержка типов (включая файл, HTML-текст, color, привязки, Yandex Map) для свойства и UF разделов;
2.0.4 (14.08.2026)
  • исправление ошибок
2.0.3 (04.07.2026)
2.0.0 (28.03.2026) Обновлена архитектура модуля Добавлена поддержка комбинированных свойств для разделов
1.1.2 (31.07.2025)
  • Косметические исправления
1.1.1 (31.07.2025)
  • Улучшен вывод свойства "Привязка к яндекс карте" в публичной части
  • Добавлена возможность удаления свойств
1.1.0 (31.07.2025) Добавлено свойство "Привязка к яндекс карте"
1.0.1 (30.07.2025) незначительные исправления
Установка
  1. Установите модуль через Маркетплейс Битрикс.

  2. При создании свойства инфоблока выберите тип «Универсальное комбинированное свойство»

    Для разделов — создайте UF с типом «Комбинированное свойство (для разделов)»

Для работы свойства привязка "привязка к яндекс карте" необходимо ввести API ключ яндекс карт в настройках модуля "Управление структурой".
Ключ можно получить здесь https://developer.tech.yandex.ru
Поддержка
Техническая поддержка: e-mail xlogic.studio@yandex.ru
Сайт: xlogic.ru
Время работы: пн–пт с 10:00 до 19:00 (МСК, UTC+3).
Время реакции на заявку: в течение 1 рабочего дня

Другие решения разработчика

Решение добавлено в корзину

Перейдите в корзину и оформите заказ или продолжите покупки
Перейти в корзину
Продолжить покупки