batch_set
includes/form.inc, строка 2426
- Версии
- 6
batch_set($batch_definition)
Создать новый пакет (список) операций.
Операции будут добавлены в виде нового отдельного пакета операций (списка выполняемых функций). Это сделано для того, чтобы исключить проблемы взаимного пересечения нескольких функций, созданных различными частями кода (ядром, модулями). Каждый такой пакет настраивается на обработку своих сообщений, операций над ними и результатом, а также декларирует свои функции обратного вызова. Каждый пакет обрабатывается индивидуально, при этом отображается ход выполнения пакетной операции на странице с прогресс баром (для каждого пакета будет создана своя индивидуальная страница с прогресс баром).
Параметры
$batch
массив, определяющий пакет операций. Для этого используются элементы управления, среди которых обязательным является только 'operations'
. Для остальных задаются значения по умолчанию с помощью функции batch_init()
. Можно использовать следующие элементы управления списком операций:
'operations'
: Массив пользовательских функций, который будет выполнен. Пример:
'title'
: Заголовок страницы с прогресс баром. Только безопасная строка будет использована. По умолчанию t('Processing'
).'init_message'
: Сообщение, отображаемое при инициализации пакета операций. По умолчанию t('Initializing.'
).'progress_message'
: Сообщение, отображаемое при обработке пакета операций. Доступны заменители @current, @remaining, @total, @percentage, @estimate и @elapsed. По умолчанию t('Completed @current of @total.'
).'error_message'
: Сообщение, отображаемое, если ошибка произошла во время обработки пакета. По умолчанию t('An error has occurred.'
).'finished'
: Название функции, которая выполнится после завершения выполнения пакета операций. Эту функцию можно использовать для завершающих действий (возможно, сохранение данных в$_SESSION
) после того, как задание выполнилось и произошло последнее перенаправление.'file'
: Путь к файлу, содержащему функции из списка'operations'
и функции'finished'
, если они не расположены в самом модуле (в файле *.module). Путь должен быть относительно base_path(), и, следовательно, должен быть построен с использованием drupal_get_path().
Связанные темы
Код
<?php
function batch_set($batch_definition) {
if ($batch_definition) {
$batch =& batch_get();
// Initialize the batch
if (empty($batch)) {
$batch = array(
'sets' => array(),
);
}
$init = array(
'sandbox' => array(),
'results' => array(),
'success' => FALSE,
);
// Use get_t() to allow batches at install time.
$t = get_t();
$defaults = array(
'title' => $t('Processing'),
'init_message' => $t('Initializing.'),
'progress_message' => $t('Remaining @remaining of @total.'),
'error_message' => $t('An error has occurred.'),
);
$batch_set = $init + $batch_definition + $defaults;
// Tweak init_message to avoid the bottom of the page flickering down after init phase.
$batch_set['init_message'] .= '<br/> ';
$batch_set['total'] = count($batch_set['operations']);
// If the batch is being processed (meaning we are executing a stored submit handler),
// insert the new set after the current one.
if (isset($batch['current_set'])) {
// array_insert does not exist...
$slice1 = array_slice($batch['sets'], 0, $batch['current_set'] + 1);
$slice2 = array_slice($batch['sets'], $batch['current_set'] + 1);
$batch['sets'] = array_merge($slice1, array($batch_set), $slice2);
}
else {
$batch['sets'][] = $batch_set;
}
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии