Сохранение основного раздела товара в свойство
Готовый код. Свойство можно использовать, например, в умном фильтре или для добавления в индекс поиска.
Код свойства 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']); } }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.