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

Выделение разделов-коллекций и экспорт в 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);
		}
	}
}