Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 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
Модуль «Интернет-магазин» 12.8.1Настройка модуля 12.8.2Настройка интернет-магазина 12.8.3Валюты 12.8.4Цены для разных групп пользователей 12.8.5Минимальная цена 12.8.6Способы доставки 12.8.7Способы оплаты 12.8.8Настройка шаблонов писем 12.8.9Бланки 12.8.10Скидки 12.8.11Сиюминутные скидки 12.8.12Купоны 12.8.13Редактирование заказов 12.8.14Статистика 12.8.15Компоненты товаров 12.8.16Варианты товаров 12.8.17Коллекции объектов 12.8.18Фильтр товаров 12.8.19Списки товаров 12.8.20Корзина 12.8.21Заказ 12.8.22Выгрузка предложений в Яндекс.Маркет 12.8.23Заказ на Маркете 12.8.24Выгрузка предложений в Товары@Mail.Ru 12.8.25Выгрузка товаров в Google Merchant 12.8.26Обмен данными с 1С 12.8.27Обмен данными с 1С 8-ой версии 12.8.28Обмен данными с 1С 7-ой версии 12.8.29Обмен данными с сервисом МойСклад 12.8.30Виджеты интернет-магазина 12.8.31Классы расчёта доставки 12.8.32Интернет-магазин <5.3 12.8.33Переход с прежней версии модуля 12.8.34Справочник 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
Подскажите, а каким образом передать в виртуальное поле массив "множественный выбор"?
   
Описание проекта