Изначально, после обмена с 1С произошла деактивация разделов и элементов основного каталога, ХЗ почему произошел такой обмен с 1С, потом все хорошо синхронизировалось и далее.
Судя по гуглу, такое иногда бывает, так что я не первый, кто решает данную разовую проблему.
Прикладываю простой скрипт, который решает данную задачу.
Создаем, например, в корне сайта файл active_part.php и добавляем в него следующий код:
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
// ID инфоблока (заменить на нужный)
$iblockId = 31;
// ID раздела (если нужно активировать только подразделы определенного раздела, убираем null и ставим ID раздела)
$sectionId = null;
// Активация разделов
function activateSections($iblockId, $parentSectionId = null) {
$filter = ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'N'];
if ($parentSectionId) {
$filter['SECTION_ID'] = $parentSectionId;
}
$rsSections = CIBlockSection::GetList(
[],
$filter,
false,
['ID', 'IBLOCK_ID']
);
while ($section = $rsSections->Fetch()) {
$bs = new CIBlockSection;
$result = $bs->Update($section['ID'], ['ACTIVE' => 'Y']);
if ($result) {
echo "Активирован раздел ID: " . $section['ID'] . "<br>";
// Рекурсивно активируем подразделы
activateSections($iblockId, $section['ID']);
} else {
echo "Ошибка активации раздела ID: " . $section['ID'] . "<br>";
echo $bs->LAST_ERROR . "<br>";
}
}
}
// Активация элементов
function activateElements($iblockId, $sectionId = null) {
$filter = ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'N'];
if ($sectionId) {
$filter['SECTION_ID'] = $sectionId;
}
$rsElements = CIBlockElement::GetList(
[],
$filter,
false,
false,
['ID', 'IBLOCK_ID']
);
while ($element = $rsElements->Fetch()) {
$el = new CIBlockElement;
$result = $el->Update($element['ID'], ['ACTIVE' => 'Y']);
if ($result) {
echo "Активирован элемент ID: " . $element['ID'] . "<br>";
} else {
echo "Ошибка активации элемента ID: " . $element['ID'] . "<br>";
echo $el->LAST_ERROR . "<br>";
}
}
}
// Выполняем активацию
activateSections($iblockId, $sectionId);
activateElements($iblockId, $sectionId);
echo "Операция успешно завершена!";
?>
PS: дополнительно можно указать отдельный раздел и активировать только в нем его дочерние разделы и элементы. В коде указал.
Количество просмотров: 1