Онлайн-руководство разработчика NetCat
Новогодние скидки до 25%!
Подробнее
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Компонент-агрегатор

Видеоурок

Агрегатор используется для вывода в одном инфоблоке данных из разных компонентов (инфоблоков). Например, если на главной странице интернет-магазина необходимо вывести блок "Хиты продаж", в который войдут товары разных типов (компонентов).

Компонент-агрегатор оперирует виртуальными полями, то есть создавать поля для компонента не нужно. Для сопоставления полей, которые будут использованы в агрегаторе, с полями исходных компонентов необходимо в системных настройках компонента прописать следующее:

// подключаем файл класса агрегатора и создаем объект агрегатора
require_once $nc_class_agregator_path;
$agregator_settings = new nc_class_aggregator_setting();

// создаем виртуальные поля, которые понадобятся в шаблонах вывода
$agregator_settings->register_fields('Name', 'BigImage', 'Price', 'Property1', 'Property2', 'Property3');

// для каждого компонента, откуда берутся данные, составляем соответствие: в данном случае поле агрегатора Property1 из компонента номер 352 "возьмет" поле Screen, а из компонента 353 - Genre
$agregator_settings->add_class(352)->register_fields('Name', 'Image', 'Price', 'Screen', 'ScreenType', 'Camera')->field_as_message_name('Name');
$agregator_settings->add_class(353)->register_fields('Name', 'Image', 'Price', 'Genre', 'NumberPages', 'Cover')->field_as_message_name('Name');

Следующий шаг - верстка отображения. Объекты в списке выводятся так же, как и обычные компоненты, как будто виртуальные поля являются обычными. При необходимости, шаблонов вывода может быть много.

Компонент-агрератор должен иметь минимум два поля: номер исходного компонента и номер объекта этого компонента, которые нужны вывести. Эти поля нужно добавить с названиями db_Class_ID и db_Message_ID соответственно, оба целые числа. Теперь пользователь может добавлять объекты из указанных компонентов. Но, чтобы он оперировал названиями, а не числами, необходимо настроить альтернативные формы добавления и изменения объектов агрегатора. Для этого сгенерируем формы по умолчанию и заменим фрагмент, выводящий поля ввода чисел, на следующую конструкцию:

$nc_class_aggregator->get_class_select()
$nc_class_aggregator->get_message_select_area('Товар:')

вместо

nc_int_field("db_Class_ID", "maxlength='12' size='12'", $classID, 1)
nc_int_field("db_Message_ID", "maxlength='12' size='12'", $classID, 1)

Комментарии 2

alexandr  Осипов Александр 21 мая 2014, 15:07:09
А каким образом может вестись выборка в таком компоненте?
   
proskurnin 14 мая 2017, 20:53:45
Подскажите, а каким образом передать в виртуальное поле массив "множественный выбор"?
   
Описание проекта