Иногда нужно что-то массово сделать с элементами инфоблока, если их много можно упереться в лимиты.
Пошаговый скрипт для обработки элементов.
С помощью этого скрипта можно обработать элементы пошагово.
Размещаете скрипт на странице и открываете ее в браузере.
Код |
---|
<?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 } ?> |
Скрипт написан по быстрому.
Смысл в том что, пошагово отправляем на страницу ID последнего обработанного элемента элемента
и на каждом шаге обновляем этот ID получая по nTopCount элементов за шаг.
Стартуем c 1-го ID, даже если такого ID нет, счетчик сместится до ближайшего существующего.
В примере, пошагово удаляются элементы инфоблока. Но вы можете использовать это для любой обработки элементов.
Что-то перезаписать в них, изменить, обновить цены, остатки и так далее. В общем, что угодно.