[РЕШЕНО] Batch выполняется только 1 раз

Главные вкладки

Аватар пользователя ArmRus ArmRus 8 ноября 2012 в 14:53

Здравствуйте. Столкнулся с проблемой. Тупо не могу найти ошибку в своем коде.
Проблема такова. Модуль обрабатывает данные с помощью Batch API. Но цикл выполняется 1 раз.

Вот собственно код

<?php
$batch 
= array(
    
'title' => t('Groups batch processing'),
    
'operations' => array(
        array(
'ts_import_bg'),               
    ),
    
'file' => drupal_get_path('module''ts_import') . '/ts_import.batch.inc',
);
batch_set($batch);
batch_process();
?>

И код в файле ts_import.batch.inc
значения переменных указал коментами в коде. Цифры проверены при выполнении с помощью dsm

<?php
function ts_import_bg(&$context) {
    
$limit 10;
    if (empty(
$context['sandbox']['current'])) {
        
$context['sandbox']['current'] = 0;
        
$context['sandbox']['max'] = ts_import_is_groups(); # 722
    
}
    if (empty(
$context['sandbox']['progress'])) {
        
$context['sandbox']['progress'] = 0;
    }
    
$groups ts_import_get_group($limit);
    foreach (
$groups as $group) {
        if (
$group->parent == 'NO') {
            
$group->parent ts_import_select_ref($group->code);
        }
        if (
$group->parent === FALSE) {
            
$parent 0;
        } else {
            
$parent $group->parent;
        }
        
ts_import_tax($group->code$group->name$parent);
        
ts_import_del($group->id);
        
$context['sandbox']['current']++;
        
$context['sandbox']['progress']++;
    }
    
$context['message'] = t('Updating groups from queue: ') . t('Total: %total. Curent element is %current', array(
                
'%current' => $context['sandbox']['current'],
                
'%total' => $context['sandbox']['max'])
    );

    

$context['results']['processed'] = $context['sandbox']['progress']; # 10
    
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
        
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; #  0.013850415512465
    
}
}
?>

Сообщение которое выводил в $context['message'] - не выводится.
P.S. В этом же модуле есть и другие пакетные операции, которые выполняются без проблем.
Заранее благодарю.

Комментарии

Аватар пользователя ArmRus ArmRus 8 ноября 2012 в 16:24

"varvashenia" wrote:
в operations в качестве параметров к callback функции ts_import_bg нужно разложить все задания - сейчас она запрограммирована на 1 запуск

не обязательно все, но спасибо, подсказали куда смотреть, я пропустил второй параметр.
В итоге все заработало после изменения кода

<?php
$batch 
= array(
    
'title' => t('Groups batch processing'),
    
'operations' => array(
        array(
'ts_import_bg',array()),               
    ),
    
'file' => drupal_get_path('module''ts_import') . '/ts_import.batch.inc',
);
?>

Насчет разложить все задания - не лучшая идея передавать массив из 100к позиций. Уж слишком грузится оперативка.
Считывание происходит в обработчике, а контролировать количество запусков можно с помощью переменной $context['finished'];
Еще рас спасибо!