Восстановление привязки товаров к разделам

690
Алексей,
Восстановление привязки товаров к разделам

Необычная ситуация попалась, привязка к основному разделу у товара заполнена, а множественная к разделам - нет.

Необычная ситуация попалась, привязка к основному разделу у товара заполнена, а множественная к разделам - нет.

Т.е. если сделать запрос в БД, то 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);
	}
}

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 3 марта 2023
примеры d7, баг, разделы, инфоблоки
Поделиться
Похожие статьи
Наследование пользовательских свойств в подразделах
Чтобы не заполнять все поля у каждого раздела, часть можно "наследовать", сделав пару доп....
Читать дальше » 0
Алексей,
Получить родительские разделы раздела
С помощью старого ядра, методом CIBlockSection::GetNavChain. По сути, там в цикле делаются запросы к...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Необычная ситуация попалась, привязка к основному разделу у товара заполнена, а множественная к разделам - нет.