Пошаговая обработка большого количества элементов инфоблока, быстро скрипт, Иногда нужно что-то массово сделать с элементами инфоблока, если их много можно упереться в лимиты. Пошаговый скрипт для обработки элементов.
Это быстрый черновик для будущей, развернутой заметки в блог.
Иногда нужно что-то массово сделать с элементами инфоблока, если их много можно упереться в лимиты. Пошаговый скрипт для обработки элементов.
С помощью этого скрипта можно обработать элементы пошагово. Размещаете скрипт на странице и открываете ее в браузере.
Код
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
use Bitrix\Main\Loader;
Loader::includeModule("iblock");
$ibId = 5; // Ваш инфоблок
$elsCount = 10; // По сколько элементов обрабатывать за шаг
$lastId = $_POST['LAST_ID'];
$i = 0;
$ibElements = CIBlockElement::GetList(
array('ID' => 'ASC'),
array(
'IBLOCK_ID' => $ibId,
'>ID' => $lastId
),
false,
array(
'nTopCount' => $elsCount
),
array(
// Тут указываете поля элемента, которые нужны для обработки
// Для примера, нужен только ID
'ID'
)
);
while ($dbRes = $ibElements->Fetch()) {
// Тут пишите свой обработчик элементов
// Для примера удаление элементов
CIBlockElement::Delete($dbRes['ID']);
$lastId = $dbRes['ID'];
$i++;
}
?>
<form action="" method="POST">
<input type="text" name="LAST_ID" value="<?echo $lastId > 2 ? $lastId : '1';?>">
<button type="submit" id="go">Go</button>
</form>
<? if ($i > 1) {?>
<script>
$('#go').click();
</script>
<?
} else {
?>
Элементы обработаны
<?php
} ?>
Скрипт написан по быстрому. Когда оформлю в заметку опишу более подробно и сделаю это с использованием AJAX, полосой прогресса и прочими улучшениями аля указанием параметров в форме а не тупо в переменных.
Смысл в том что, пошагово отправляем на страницу ID последнего обработанного элемента элемента и на каждом шаге обновляем этот ID получая по nTopCount элементов за шаг. Стартуем c 1-го ID, даже если такого ID нет, счетчик сместится до ближайшего существующего.
В примере, пошагово удаляются элементы инфоблока. Но вы можете использовать это для любой обработки элементов. Что-то перезаписать в них, изменить, обновить цены, остатки и так далее. В общем, что угодно.