Выбрать курс
0  /  15

Товарные коллекции в разделах

Инструкция

Модуль устанавливается стандартно. На этом не будем долго заострять внимание, об этом подробно написано на странице  О Маркетплейсе.

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

Редактирование раздела инфоблока

Вкладка "Товарные коллекции"

На данной вкладке формируются все необходимые условия/правила подбора товаров (элементов инфоблока). Согласно настроенным условиям элементы инфоблока привязываются к данному настроенному разделу инфоблока (далее раздел-коллекция).

Модуль имеет 2 конструктора условий:

  1. Интерфейс скидок
    Примечание: Доступен в редакциях 1С-Битрикс, где есть модуль Торговый каталог и Интернет-магазин.

  2. Интерфейс фильтра
    Примечание: Доступен во всех редакциях 1С-Битрикс.

Интерфейс скидок

Само название данного интерфейса говорит о том, что он аналогичен интерфейсу Условий в скидках 1С-Битрикс. Данный интерфейс рассчитан для работы с товарами и торговыми предложениями.

интерфейс скидок

В данном конструкторе доступны все те же поля и свойства, что и в условиях скидок. Следовательно механизм подбора товаров работает по той же логике, т.е. по всем правилам логический операций: сложения (Или), умножения (И), отрицания (Не)

Внимание! Очень часто нам поступают вопросы о необходимости демо-периода модуля для апробации данного конструктора условий. Но как уже было написано выше - конструктор аналогичен конструктору условий в скидках 1С-Битрикс, следовательно посмотреть аналог и понять принцип работы можно открыв или создав любую скидку на вашем сайте.

Более подробно настройки рассмотрены на примерах:

Для данного интерфейса есть ряд дополнительных условий.

  1. Учитывать родительские разделы.
  2. Товары каких инфоблоков перебирать.
  3. Учитывать доступность товаров / Только доступные.
  4. Не менять активность коллекции.
  5. Действия над товарами со скидкой.

I. Учитывать родительские разделы

Это доп. условие полезно, если в основных условиях выбрано поле "Раздел". При отмеченной опции учитывается принадлежность к разделу родителю. Например: иерархия разделов устроена так:

  • Обувь
    • Пантолеты
    • Тапочки
    • Туфли
    • ...
При этом товары явно привязаны только к подразделам:
  • Пантолеты
  • Тапочки
  • Туфли

Стоит задача, перебрать все товары подразделов раздела "Обувь". Указывать в условиях все подразделы не очень удобно, особенно если таких подразделов действительно много или часто появляются новые. При отмеченной опции "Учитывать родительские разделы" достаточно указывать родительский раздел (для нашего примера - это раздел "Обувь") и товары будут удовлетворять условию и попадать в коллекцию. В противном случае, т.к. реальной привязки к разделу "Обувь" нет, то в коллекцию вообще бы не попал ни один товар.

 Учитывать родительские разделы

II. Товары каких инфоблоков перебирать

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

III. Учитывать доступность товаров / Только доступные

При данной отмеченной опции будет учитываться «Доступность» товаров, недоступные товары не будут попадать в коллекции.

Доступность товаров

IV. Не менять активность коллекции

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


V. Действия над товарами со скидкой.

Доступны следующие значения:

  • Дополнять товарами со скидкой. К коллекции добавятся акционные товары и товары, попадающие под основные условия.
  • Учитывать только товары со скидкой. Будут браться только акционные товары, но кроме того, эти же товары будут проверяться на попадание под основные условия.
  • Исключать товары со скидкой из товаров. Из товаров, удовлетворяющих основным условиям, будут исключаться акционные товары.

Интерфейс фильтра

Сравнительно новый интерфейс. Главным преимуществом является, то что он доступен во всех редакциях 1С-Битрикс. Для ее использованию необходимо включить соответствующую опцию во вкладке "Товарные коллекции" на странице редактирования раздела инфоблока.

Интерфейс фильтра

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

Доступные поля и свойства

Следовательно как работает конструктор можно опробовать в списке элементов любого инфоблока.

Как и у интерфейса скидок у данного конструктора имеются дополнительные условия, но только одно - Не менять активность коллекции.

Настройки модуля

В административном разделе на странице: Настройки - Настройки продукта - Настройки модулей - Товарные коллекции в разделах доступны опции модуля. 

Настройки модуля Товарные коллекции

  • Количество элементов, обрабатываемых за один шаг. Если товаров большое количество, то как правило, скрипт переиндексации не успеет обработать все товары в один шаг. Поэтому необходимо задать количество элементов, которые будут перебираться за каждый шаг, по умолчанию 500.
  • Добавлять элементы в коллекции автоматом после добавления/редактирования. Товары в коллекции попадают в момент переиндексации. Но на сайте информация по товарам постоянно изменяется. Если, например, товар, удовлетворял условиям коллекции, а более не удовлетворяет, его необходим отвязать от коллекции. Каждый раз запускать «переиндексацию» было бы не очень удобно. Поэтому, если включить эту опцию, товары будут попадать или исключаться из коллекций автоматически при изменении их характеристик. !Переиндексация срабатывает на момент редактирования товара, если есть условия, которые проходят с течением времени, например по дате или скидка стала не актуальной, то нужна принудительная переиндексация
  • Индексировать коллекции с помощью Агента. При указании данной опции коллекции будут индексироваться специальной функцией агента (CScoderCollectionsAgents::Reindex()), по умолчанию запускается раз в сутки, но период можно редактировать. Также для этого необходимо указать Какие инфоблоки проверять при индексации Агентом.
    Внимание! Если в условиях коллекции используются торговые предложения, то необходимо выбирать и инфоблоки торговых предложений.
  • Полная переиндексация всех коллекций выбранных инфоблоков. Ручной запуск общей переиндексации. Перед переиндексацией необходимо выбрать инфоблоки, коллекции которых нужно переиндексовать 
    Внимание! Если инфоблоки не выбраны, будут переиндексироваться ВСЕ.
    Если в условиях коллекции используются торговые предложения, то необходимо выбирать и инфоблоки торговых предложений.

Отвязать товары от коллекции

Отдельного механизма, чтобы отвязать товары от раздела-коллекции нет. Т.к. не видим в этом особой необходимости. Этот момент можно решить множествами способов:

  1. Использование самого модуля Товарные коллекции в разделах. Мы рекомендуем настроить какое нибудь абсурдное условие коллекции и выполнить переиндексацию. Например "Название = бла бла бла )". И т.к. вряд ли товар с таким названием найдется в вашем каталоге, то все товары отвяжутся.
  2. Использование дополнительных модулей, такого как Инфоблоки, инструменты и т.п.
  3. Если вы являетесь счастливым обладателем другого нашего модуля Инструменты разработчика, то там тоже имеется групповое действие отвязать товары от раздела.

Обработчики событий товарных коллекций

OnBeforeScoderCollectionElementEdit 

Вызывается перед привязкой / отвязкой элемента инфоблока к разделам инфоблока, может быть использовано для модификации данных

Параметры:

$return
Переменная, в которой содержится признак, удовлетворяет ли товар условиям коллекции, true или false.
$id ИД элемента инфоблока.
$setId ИД раздела-коллекции.
$oldsections Массив ИД разделов, к которым привязан элемент до новой индексации модулем.
&$newsections Массив ИД разделов, к которым будет привязан элемент при индексации модулем.
&$sectionId
ИД раздела, который считать основным. (int или null). Модуль всегда передает null.


Примеры

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

Посадочные страницы

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

Например, необходимо в раздел "Красные платья" собрать все доступные товары из инфоблока, содержащие фразу "платье" и имеющие цвет (свойство) "красный". Выглядеть это будет следующим образом:

Условия набора

Внимание! После указания всех необходимых условий, правила коллекции необходимо сохранить, нажав стандартную кнопку «Сохранить» или «Применить». 

После этого возвращаемся на форму редактирования нашего раздела, переходим в нужную закладку «Товарные коллекции», становится доступна кнопка ПЕРЕИНДЕКСАЦИИ. Необходимо ее выполнить:

Переиндексация коллекции

Все, коллекция готова к работе.

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

Использование стандартных разделов инфоблока в качестве коллекций и привязка товаров к ним влечет ряд преимуществ:

  • сохраняются все возможности разделов инфоблока, такие как возможность задавать уникальную SEO-информацию, описание и уникальный URL (символьный код) и прочие моменты;
  • разделы-коллекции автоматически будут выведены на сайте: в меню, в каталоге или иных блоках, есть вывод информации из этого инфоблока уже настроен:
  • нет отдельных компонентов, поэтому нет необходимости что-либо подгонять под дизайн сайта, все заработает в рамках текущего вашего дизайна, если вывод каталога уже настроен;
  • поддежка умного фильтра (bitrix:catalog.smart.filter).

Товары со скидкой (новый принцип)

Ранее для сбора товаров со скидкой рекомендовался следующий подход - реализация с помощью коллекций.

Но продукт постоянно развиваем и появились новые возможности - «Действия над товарами со скидкой» со следующими значениями:

  • Учитывать только товары со скидкой.
  • Дополнять товарами со скидкой.
  • Исключать товары со скидкой.

  1. При выборе «Дополнять товарами со скидкой», имеющиеся акционные продукты добавятся к коллекции вместе с товарами, попадающими под основные условия.
  2. При выборе «Учитывать только товары со скидкой» будут браться только акционные товары, но кроме того, эти же товары будут проверяться на попадание под основные условия.
  3. При выборе «Исключать товары со скидкой» из товаров, удовлетворяющих основным условиям, будут исключаться дисконтные товары.
Данный подход работает только для скидок на товары, для правил работы с корзиной не подходит. Если у вас скидки не включены, то рекомендуем посмотреть документацию -  Два режима работы Интернет-магазина.

Товары со скидкой. Акции, распродажа

Внимание! Данный подход устарел и не очень удобен. Для сбора товаров со скидкой рекомендуем новый способ.

В 1С-Битрикс нет явного признака (поля или свойства инфоблока), означающего, что товар доступен по скидке. Поэтому вывод акционных товаров на той или иной странице может оказаться далеко не тривиальной задачей. Но с помощью модуля  Товарные коллекции в разделах этот вопрос можно легко решить. Т.к. один из конструкторов аналогичен конструктору условий в скидках, то достаточно настроить раздел-коллекцию с такими же условиями как и в скидках. 

Например, имеются 2 настроенные программы скидок:

Список скидок

Условия первой выглядят следующим образом:

Условия акции 1

Условия второй:

Условия акции 2

Необходимо создать раздел инфоблока с условиями, комбинирующими данные скидки:

Коллекция товаров со скидкой

В итоге получится посадочная страница товаров со скидкой.

При необходимости скидки можно не комбинировать, а, наоборот, создать разные, например, можно создать общую категорию (раздел инфоблока) Распродажа и настроить подразделы-коллекции в них: товары со скидкой 5%, 10%, 25% и т.п.

Или в имеющихся базовых категориях создать подразделы с акционными товарами, например:

  • Телевизоры - Акции
  • Компьютеры - Акции
  • Аксессуары - Акции
  • ...
Вариантов множество, все зависит от Ваших задач.

Разные структуры разделов на сайте и в 1С или иной учетной программе

У коллекций имеются дополнительное условие - Не менять активность коллекции, об этом указано на странице Интерфейс скидок. При указании которого игнорируется изменение поля Активность у раздела-коллекции, следовательно при таких операциях как обмен товарами с 1С или иными внешними программами деактивация разделов не происходит.

Это позволяет создавать структуру вашего каталога абсолютно отличающейся от структуры в вашей внешней учетной программе.

Как это сделать?

Рассмотрим на примере выгрузки номенклатуры из 1С:

Обычно при выгрузке товаров создаются все необходимые объекты, поля и связи, такие как: разделы, свойства товаров, значения свойств, товары и тому подобное.

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

Таким образом будет создана оригинальная иерархия вашего каталога.


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

Привязка раздела к нескольким родителям

Завсегдатая задача - привязка раздела инфоблока к нескольким разделам родителям. На многих форумах встречается этот вопрос. Суть проблемы в том, что в 1С-Битрикс нет возможности привязать какой либо раздел к нескольким родителям, как это, например, легко делается для элементов инфоблока. Для чего так сделано и хорошо ли это или плохо, нам остается только догадываться.

Модифицировать модули и компоненты 1С-Битрикс для решения данного вопроса является, на наш взгляд, не лучшим способом, т.к. правка ядра cms ни к чему хорошему не приведет.

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

Конструктор с полем раздел - интерфейс скидок

Или то же самое с использованием интерфейса фильтра:

Конструктор с разделом - Интерфейс фильтра

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

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

Примеры:

Таким образом можно создать необходимое количество подразделов-дублей в нужных родительских разделах.

Добавление категорий инфоблока (разделов, коллекций) в избранное или в корзину на ЦМС 1С-Битрикс

Модуль Товарные коллекции позволяет создавать категории из набора нужных товаров по гибким условиям. Но как быть, если возникает задача добавлять всю эту категорию (коллекцию) сразу в корзину, не товары по отдельности, а коллекцию целиком, как один объект, как одна позиция в корзине?

Компоненты ЦМС 1С-Битрикс: корзины, списка заказов с товарами, отложенные товары, - не позволяют работать с категориями инфоблока, а только с товарами. Можно разработать свои компоненты, но это не лучший вариант, особенно, если вести заказы в административной панели или сторонних учетных системах.

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

Мы также можем в этом помощь, но за отдельное вознаграждение. Обратиться за помощью можно в наш чат в правом нижнем углу нашего сайта (в рабочее время отвечаем достаточно оперативно). Но оставляем за собой право отказать в доработке без объяснения причин.

Мы предлагаем следующий подход:

  1. Создать отдельный служебный инфоблок (торговый каталог) от основного каталога, отключить от поисковой индексации.
  2. Создать свойство для связи служебных товаров с категориями основного каталога. Например, это может быть свойство типа "Привязка к разделам" или "Число", как вам удобнее.
  3. В данном инфоблоке необходимо будет создать товары-аналоги нашим категориям (товарным коллекциям). Для каждого товара, указать явную связь с товарной коллекцией через созданное нами свойство.
  4. Вместо категорий (коллекций) добавлять в корзину товары-аналоги из служебного инфоблока.

    Например, если для вывода разделов-коллекций вместо стандартного компонента bitrix:catalog.section.list использовать компонент для вывода товаров bitrix:catalog.section, но из служебного инфоблока (задав для него нужный предустановленный фильтр), то весь механизм давления в корзину уже будет доступен. Останется немного кастомизировать шаблон, чтобы товары вели на страницу категории, а неизвестно куда - на страницы служебного товара.

Дополнительные возможности

Выделение разделов-коллекций и экспорт в Excel

Иногда возникает задача как то выделить коллекции, отдельно их разобрать или даже выгрузить в файл. По умолчанию явного функционала для этого нет. Но можно опираться на штатный функционал от 1С-Битрикс - экспорт в Excel файл.


Импорт в Эксель


Чтобы выделить разделы-коллекции от остальных разделов, достаточно создать пользовательское свойство для разделов, например, с названием Раздел-коллекция? и с кодом UF_IS_COLLECTONS

Является ли раздел товарной коллекцией


Данное свойство будет доступен у разделов и при создании коллекций можно вручную отмечать разделы как коллекция и сортировать и экспортировать разделы в Excel файл:

Фильтр

Вернет разделы-коллекции:

коллекции


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

  • OnAfterScoderCollectionEdit - вызывается после редактирования коллекции. Параметр функции $arFields - массив полей коллекции
  • OnAfterScoderCollectionDelete - вызывается после удаления коллекции. Параметр функции $section_id - ИД раздела-коллекции.
Пример программного кода, который необходимо разместить в init.php. Код является примером, не рекомендуем к размещению без помощи разработчиков.

//обработчик события: после редактирования коллекции
AddEventHandler("scoder.collections", "OnAfterScoderCollectionEdit", "OnAfterScoderCollectionEditHandler");
function OnAfterScoderCollectionEditHandler($arFields)
{    
    //Помечаем раздел, что он является "Товарной коллекцией"
    $ar_load = array(
		"UF_IS_COLLECTONS" => 1
	);
	if ($arFields["IBLOCK_ID"]>0 && $arFields["SECTION_ID"]>0)
		$GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_".$arFields["IBLOCK_ID"]."_SECTION", $arFields["SECTION_ID"], $ar_load);    
}
//обработчик события: после удаления коллекции
AddEventHandler("scoder.collections", "OnAfterScoderCollectionDelete", "OnAfterScoderCollectionDeleteHandler");
function OnAfterScoderCollectionDeleteHandler($section_id)
{
    //Помечаем раздел, что он не является "Товарной коллекцией"
	if ($section_id>0)
	{
		$ar_load = Array(
			"UF_IS_COLLECTONS" => 0,
		);
		$arFilter = array('ID' => $section_id);
		$rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'),$arFilter,false,array("ID","IBLOCK_ID"),array("nTopCount" => 1));
		if ($arFields = $rsSect->GetNext())
		{
			$GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_". $arFields["IBLOCK_ID"] ."_SECTION", $section_id, $ar_load);
		}
	}
}