Битрикс – выбрать несколько разделов при загрузке

Какая разница между IBLOCK_SECTION_ID и IBLOCK_SECTION в методе CIBlockElement::Add?

Битрикс привязать сразу к нескольким разделам при загрузке элементов

В своих скриптах очень часто возникает потребность привязать товар сразу к нескольким разделам. Как это сделать, и почему в API до сих пор нет актуального примера? Давайте разбираться.

Смотрим код:

$SECTION_ID = [];
if ($arItem['SECTION'][0]) {
	foreach ($arItem['SECTION'] as $key => $section) {
		$res = CIBlockSection::GetList (
			Array("ID" => "ASC"),
			Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "NAME" => trim($section)),
			false,
			Array('ID', 'NAME')
		);
		if ($arItems = $res->GetNext()) {
			$SECTION_ID[] = $arItems['ID'];
		}
	}
}

$arLoadProductArray = Array(
	"IBLOCK_SECTION" 		=> $SECTION_ID,
	"IBLOCK_ID" 			=> $IBLOCK_ID,
	"PROPERTY_VALUES" 		=> $PROP,
	"NAME"           		=> $arItem['NAME'],
	"CODE"           		=> $CODE,
	"ACTIVE"         		=> "N",
	"DETAIL_TEXT"    		=> $arItem['DESC'],
	"DETAIL_PICTURE" 		=> CFile::MakeFileArray($arItem['PICTURE'])
);

if($PRODUCT_ID = $el->Add($arLoadProductArray))
	echo "New ID: ".$PRODUCT_ID;
else
	echo "Error: ".$el->LAST_ERROR;

Как видите, пример отличается от документации. В ней используется IBLOCK_SECTION_ID – и привязка идет только к одному разделу, либо указываем false – и элемент попадает в корень.

Теперь же у нас массив из ID, а пустой массив будет тем самым корнем раздела. IBLOCK_SECTION – массив из ID, который нам и был нужен.

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

Стоит также отметить важный момент по скрипту – разделы уже должны быть заведены в базе на сайте, иначе по имени не найдет. Хотя такой сценарий всегда можно улучшить и дописать создание нового раздела в таких случаях 🙂 .

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *