Сохранение основного раздела товара в свойство

89
Алексей,
Сохранение основного раздела товара в свойство

Готовый код. Свойство можно использовать, например, в умном фильтре или для добавления в индекс поиска.

Код свойства MAIN_SECTION, название любое, например "Основной раздел", тип "строка".

Выполнять на кроне, либо адаптировать и использовать по событию изменения элемента инфоблока.

CModule::IncludeModule('iblock');

$arFilter = array(
	'IBLOCK_ID' => 1, // ID инфоблока каталога
	'ACTIVE' => 'Y'
);

// Получаем все разделы
$dbSections = CIBlockSection::GetList(
	array(),
	$arFilter,
	false,
	array('ID', 'NAME')
);
while ($arSection = $dbSections->Fetch()) {
	$arSections[$arSection['ID']] = $arSection['NAME'];
}

$dbItem = CIBlockElement::GetList(
	array(),
	$arFilter,
	false,
	false,
	array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID', 'PROPERTY_MAIN_SECTION')
);
while ($arItem = $dbItem->GetNext()) {
	$updateIndex = false;
	
	// Основной раздел, записываем в свойство только если раздел был изменён
	if ($arSections[$arItem['IBLOCK_SECTION_ID']] && $arSections[$arItem['IBLOCK_SECTION_ID']] != $arItem['PROPERTY_MAIN_SECTION_VALUE']) {
		CIBlockElement::SetPropertyValuesEx(
			$arItem['ID'], 
			$arItem['IBLOCK_ID'], 
			array('MAIN_SECTION' => $arSections[$arItem['IBLOCK_SECTION_ID']])
		);
		$updateIndex = true;
	}

	if ($updateIndex) { // Обновление индекса элемента
		\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($arItem['IBLOCK_ID'], $arItem['ID']);
	}
}
Опубликовано 14 августа 2020
Комментарии