Онлайн-руководство разработчика NetCat
Netcat 7 — нейросеть в вашем сайте!
Подробнее
Модуль «Поиск по сайту» 14.2.1Начало работы с модулем 14.2.2Язык запросов 14.2.3Способы хранения индекса 14.2.4Интерфейс модуля в панели управления сайтом 14.2.5Области индексирования 14.2.6Области HTML-страниц 14.2.7Области поиска на сайте 14.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 14.2.9Правила индексирования 14.2.10Постановка задачи переиндексирования в очередь 14.2.11Интеграция модуля в макеты дизайна сайта 14.2.12Простая форма поиска 14.2.13Расширенная форма поиска 14.2.14Вывод результатов поиска 14.2.15Стилизация списка подсказок 14.2.16Расширенные настройки 14.2.17Разработка расширений модуля 14.2.18Обзор архитектуры модуля 14.2.19Обработчики документов различных типов 14.2.20Текстовые фильтры 14.2.21Анализаторы текста 14.2.22Корректировщики запросов 14.2.23Подключение других поисковых систем 14.2.24Решение проблем с поиском 14.2.25Решение проблем с индексированием 14.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
Подскажите, а каким образом передать в виртуальное поле массив "множественный выбор"?
   
Для добавления комментариев вам необходимо авторизоваться
Описание проекта