Drupal → Как программно отправить любую форму

25.02.2011

С помощью функции drupal_execute() можно засабмитить любую форму, которая создана с помощью Form API. Преимущества использования drupal_execute над прямыми вызовами API функций вроде node_save(), user_save() или даже user_register_submit() это:

  • Данные переданные во втором параметре проходят валидацию, и в случае ошибки, на экран выводятся соответствующие сообщения.
  • Выполняются все дополнительные #submit и #validate функции, навешанные модулями с помощью hook_form_alter() или hook_form_FORM_ID_alter().

Т.е. используя drupal_execute() можно заставить Drupal думать, что форма была отправлена пользователем с помощью браузера.

Пример программной отправки формы user_register, которая регистрирует нового пользователя:

$form_state['values'] = array(
  'name' => 'new-user',
  'mail' => 'email@gmail.com',
  'pass' => 'password',
  'op'   => t('Create new account'),
);

drupal_execute('user_register', $form_state);

Пример создания комментария с помощью drupal_execute().

Подробнее на api.drupal.ru.

Для Drupal 7 есть аналогичная функция — drupal_form_submit().

Написанное актуально для
Drupal 6
Похожие записи

Комментарии

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

Например можно создать форму для добавления нод с блэкджэком и шлюхами, и при сабмите вызывать drupal_execute вместо node_save

Супер. В связке с аяксом может быть крайне незаменимой штукой)

Интересно, как программно прикрепить файл к форме, не используя file_save_upload ?

danylevskyi
06.03.2012, 08:55

Я бы еще написал, что хуки с drupal_execute (drupal_form_submit) выстреливают, чего не происходит с node_save().

Добавить комментарий