Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 13.2.1Начало работы с модулем 13.2.2Язык запросов 13.2.3Способы хранения индекса 13.2.4Интерфейс модуля в панели управления сайтом 13.2.5Области индексирования 13.2.6Области HTML-страниц 13.2.7Области поиска на сайте 13.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 13.2.9Правила индексирования 13.2.10Постановка задачи переиндексирования в очередь 13.2.11Интеграция модуля в макеты дизайна сайта 13.2.12Простая форма поиска 13.2.13Расширенная форма поиска 13.2.14Вывод результатов поиска 13.2.15Стилизация списка подсказок 13.2.16Расширенные настройки 13.2.17Разработка расширений модуля 13.2.18Обзор архитектуры модуля 13.2.19Обработчики документов различных типов 13.2.20Текстовые фильтры 13.2.21Анализаторы текста 13.2.22Корректировщики запросов 13.2.23Подключение других поисковых систем 13.2.24Решение проблем с поиском 13.2.25Решение проблем с индексированием 13.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
Подскажите, а каким образом передать в виртуальное поле массив "множественный выбор"?
   
Описание проекта