Пошаговый перебор разделов для какой-либо обработки

Небольшой пример скрипта с пошаговой обработкой разделов

Мало ли, может кому пригодится ... 

<?$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 секунд, чтобы слишком сильно не нагружать сервер, но можно и меньше сделать). 

Вот такой вот простенький скрипт

Кількість показів: 2265
23.11.2014

Повернення до списку

Если вам была полезна статья можете отблагодарить автора: