drupal_prepare_form
includes/form.inc, строка 463
- Версии
- 5
drupal_prepare_form($form_id, &$form)
- 6
drupal_prepare_form($form_id, &$form, &$form_state)
Подготавливает полный массив формы, добавляя в него недостающие значения по-умолчанию, вызывая нужные хуки, а также, опционально, выставляя токены валидации для некоторых полей, чтобы обезопасить форму от несанкционированных вмешательств.
Параметры
$form_id
Уникальный идентификатор формы для валидации, вывода, темизации и функции hook_form_alter()
.
&$form
Ассоциативный массив, содержащий структуру формы.
&$form_state
Ассоциативный массив, содержащий текущее состояние формы. Он передается сюда для того, чтобы хук hook_form_alter()
мог воспользоваться этими данными.
Связанные темы
Код
<?php
function drupal_prepare_form($form_id, &$form, &$form_state) {
global $user;
$form['#type'] = 'form';
$form['#programmed'] = isset($form['#post']);
if (isset($form['#build_id'])) {
$form['form_build_id'] = array(
'#type' => 'hidden',
'#value' => $form['#build_id'],
'#id' => $form['#build_id'],
'#name' => 'form_build_id',
);
}
// Add a token, based on either #token or form_id, to any form displayed to
// authenticated users. This ensures that any submitted form was actually
// requested previously by the user and protects against cross site request
// forgeries.
if (isset($form['#token'])) {
if ($form['#token'] === FALSE || $user->uid == 0 || $form['#programmed']) {
unset($form['#token']);
}
else {
$form['form_token'] = array('#type' => 'token', '#default_value' => drupal_get_token($form['#token']));
}
}
else if (isset($user->uid) && $user->uid && !$form['#programmed']) {
$form['#token'] = $form_id;
$form['form_token'] = array(
'#id' => form_clean_id('edit-'. $form_id .'-form-token'),
'#type' => 'token',
'#default_value' => drupal_get_token($form['#token']),
);
}
if (isset($form_id)) {
$form['form_id'] = array(
'#type' => 'hidden',
'#value' => $form_id,
'#id' => form_clean_id("edit-$form_id"),
);
}
if (!isset($form['#id'])) {
$form['#id'] = form_clean_id($form_id);
}
$form += _element_info('form');
if (!isset($form['#validate'])) {
if (function_exists($form_id .'_validate')) {
$form['#validate'] = array($form_id .'_validate');
}
}
if (!isset($form['#submit'])) {
if (function_exists($form_id .'_submit')) {
// We set submit here so that it can be altered.
$form['#submit'] = array($form_id .'_submit');
}
}
// Normally, we would call drupal_alter($form_id, $form, $form_state).
// However, drupal_alter() normally supports just one byref parameter. Using
// the __drupal_alter_by_ref key, we can store any additional parameters
// that need to be altered, and they'll be split out into additional params
// for the hook_form_alter() implementations.
// @todo: Remove this in Drupal 7.
$data = &$form;
$data['__drupal_alter_by_ref'] = array(&$form_state);
drupal_alter('form_'. $form_id, $data);
// __drupal_alter_by_ref is unset in the drupal_alter() function, we need
// to repopulate it to ensure both calls get the data.
$data['__drupal_alter_by_ref'] = array(&$form_state);
drupal_alter('form', $data, $form_id);
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии