xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

С помощью функции 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
Похожие записи

Комментарии RSS

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

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

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании