drupal_alter
includes/common.inc, строка 2767
- Версии
- 6
drupal_alter($type, &$data)
Эта функция отправки в автоматическом режиме преобразует структурированные массивы Drupal в типовые *_alter реализации. Она обеспечивает общий интерфейс для всеx операций изменения.
Параметры
$type
Тип структурированного массива, например 'form'
, 'links'
,
'node_content'
и другие.
$data
Структурированный массив, который следует изменить
...
Любые дополнительные параметры будут переданы в функции, называющиеся hook_$type_alter
.
Код
<?php
function drupal_alter($type, &$data) {
// PHP's func_get_args() always returns copies of params, not references, so
// drupal_alter() can only manipulate data that comes in via the required first
// param. For the edge case functions that must pass in an arbitrary number of
// alterable parameters (hook_form_alter() being the best example), an array of
// those params can be placed in the __drupal_alter_by_ref key of the $data
// array. This is somewhat ugly, but is an unavoidable consequence of a flexible
// drupal_alter() function, and the limitations of func_get_args().
// @todo: Remove this in Drupal 7.
if (is_array($data) && isset($data['__drupal_alter_by_ref'])) {
$by_ref_parameters = $data['__drupal_alter_by_ref'];
unset($data['__drupal_alter_by_ref']);
}
// Hang onto a reference to the data array so that it isn't blown away later.
// Also, merge in any parameters that need to be passed by reference.
$args = array(&$data);
if (isset($by_ref_parameters)) {
$args = array_merge($args, $by_ref_parameters);
}
// Now, use func_get_args() to pull in any additional parameters passed into
// the drupal_alter() call.
$additional_args = func_get_args();
array_shift($additional_args);
array_shift($additional_args);
$args = array_merge($args, $additional_args);
foreach (module_implements($type .'_alter') as $module) {
$function = $module .'_'. $type .'_alter';
call_user_func_array($function, $args);
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии