С помощью функции 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 ?
Я бы еще написал, что хуки с drupal_execute (drupal_form_submit) выстреливают, чего не происходит с node_save().
Добавить комментарий