Восстановление привязки товаров к разделам
Необычная ситуация попалась, привязка к основному разделу у товара заполнена, а множественная к разделам - нет.
Т.е. если сделать запрос в БД, то IBLOCK_SECTION_ID возвращается, но если попробовать запросить разделы товара методом CIBlockElement::GetElementGroups(), то возвращается false.
Накидал небольшой скрипт который переносит привязку к основному разделу в привязки к разделам:
$iblockId = 1; $ids = []; // Берем всё ID каталога $dbItem = \Bitrix\Iblock\ElementTable::getList([ 'filter' => ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', '!=IBLOCK_SECTION_ID' => false], 'select' => ['ID'] ]); while ($arItem = $dbItem->fetch()) { $ids[] = $arItem['ID']; } $ids2 = []; // B всё ID элементов из таблицы привязки $dbItem = \Bitrix\Iblock\SectionElementTable::getList([ 'group' => ['IBLOCK_SECTION_ID'], 'select' => ['IBLOCK_ELEMENT_ID'] ]); while ($arItem = $dbSectEl->fetch()) { $ids2[] = $arItem['IBLOCK_ELEMENT_ID']; } if ($ids3 = array_diff($ids, $ids2)) { // Сравниваем и недостающим добававляем привязку $dbItem = \Bitrix\Iblock\ElementTable::getList([ 'filter' => ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'ID' => $ids3], 'select' => ['ID', 'IBLOCK_SECTION_ID'] ]); while ($arItem = $dbItem->fetch()) { $arFields = ['IBLOCK_SECTION_ID' => $arItem['IBLOCK_SECTION_ID'], 'IBLOCK_ELEMENT_ID' => $arItem['ID']]; //var_dump($arFields); \Bitrix\Iblock\SectionElementTable::add($arFields); } }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.