Небольшой пример скрипта с пошаговой обработкой разделов
Мало ли, может кому пригодится ...
<?$arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y'); $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, false); $db_list->NavStart(10); // количество разделов выборке - зависит от сложности операций, которые нужно выполнить с разделами $maxPages = $db_list->NavPageCount; // общее количество страниц пагинации $ThisPage = (isset($_REQUEST['PAGEN_1'])) ? intval($_REQUEST['PAGEN_1']) : 1; // текущая страница while($ar_result = $db_list->GetNext()) { echo $ar_result['CODE'].' => '.$ar_result['NAME'].'<br />'; // тут какой-то обработчик раздела } $ThisPage++; // увеличиваем номер страницы на 1 if($ThisPage<=$maxPages){ // проверяем, а не последняя ли еще страница $redirectUrl = $APPLICATION->GetCurPageParam( 'action='.$action.'&processing=y&PAGEN_1='.$ThisPage.'&IBLOCK_ID='.$IBLOCK_ID, array('PAGEN_1','processing','action','IBLOCK_ID') ); // url на который нужно провести редирект?> <form method='POST' id='postform' action='<?= $redirectUrl; ?>'></form> <script>window.setTimeout("BX('postform').submit()", 5000);</script>
Идея в том, чтобы обработку вести через постраничную обработку разделов, но! в браузерах есть встроенный механизм
ограничения количества переадресаций на странице (которое конечно же можно увеличить в настройках браузера), то при
достижении этого значения получим ошибку, что браузер обнаружил бесконечное число редиректов. Так вот, чтобы этого
не произошло, редиректы нужно делать не средствами сервера, а средствами клиентского браузера. И в этом нам поможет
JS: в атрибут "action" записываем url, на который нужно произвести переадресацию и прописываем скрипт, который будет
осуществлять отправку содержимого веб-формы с небольшим таймаутом (поставил 5 секунд, чтобы слишком сильно не
нагружать сервер, но можно и меньше сделать).
Вот такой вот простенький скрипт