Категория:
Опубликовано:

Форма подтверждения действия

Drupal confirm action

Часто возникает необходимость запросить подтверждение пользователя на то или иное действие. Например - при удалении или изменении важных данных.

В закромах Drupal, как всегда, имеется заготовленное под это дело средство.

Рассмотрим как создать форму подтверждения действия в 7-ом Друпале.

Нам, всего-навсего, потребуется запилить формочку, с вызовом функции генерации формы подтверждения (confirm_form) и передать в нее несколько аргументов.

Сама функция имеет следующий вид:

confirm_form($form, $question, $path, $description = NULL, $yes = NULL, $no = NULL, $name = 'confirm');
$form:
Дополнительные элементы формы (если нужны, их значения будут доступны в сабмите).
$question:
Вопрос который будет показан пользователю, например "Подтвердите удаление элемента!".
$path:
Путь на который пользователь будет отправлен в случае отмены действия. Может быть строкой с указанием пути, или ассоциативным массивом с ключом 'path' (см. ф-цию l()).
$description:
Описание которое будет показано пользователю. Дефолтное значение: "t('This action cannot be undone.')" - Это действие нельзя отменить.
$yes:
Значения кнопки подтверждения. Дефолтное значение: "t('Confirm')" - Подтвердить.
$no:
Значения кнопки jnvtys. Дефолтное значение: "t('Cancel')" - Отмена.
$name:
Можно указать имя для обозначения пункта подтверждения (будет доступно в сабмите как "$form_state['values'][$name]"). Дефолтное значение: "confirm"

Сделаем форму подтверждения удаления чего-либо:

Реализация может быть, например, следующей:

/**
 * Объявляем форму подтверждения удаления
 */
function mymodule_delete_form($form, &$form_state) {
  return confirm_form($form,
    t('Are you sure, Do you want to delete?'),
    'admin/config/mymodule',
    t('The action cannot be undone.'),
    t('Delete'),
    t('Cancel')
  );
}

/**
 * Коллбек удаления - в нем реализуем необходимую для
 * удаления логику
 */
function mymodule_delete_form_submit($form, &$form_state) {
  if ($form_state['values']['confirm']) {
    // Здесь логика удаления элемента(ов)
  }
  else {
    // Здесь логика при отмене действия (если нужна)
  }
}
Теги: 
Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.

Комментарии

И к чему клеить эти 2 функции?
И как добавить их к моей форме?

Ни к чему. Это просто форма. Ее можно как форму, которая является коллбеком страницы указать. А на эту страницу, уже редиректить из сабмита своей формы.

Ещё раз:
У меня есть моя форма
mymodule_my_form(

return $form;
).
Куда мне прикручивать и как эти 2 функции?

$form['submit'] = array(
'#type' => 'submit',
'#submit' => array('mymodule_delete_form'),
);

или

$form['submit'] = array(
'#type' => 'submit',
'#submit' => array('mymodule_delete_form_submit'),
);

или ещё как?

как "запилить формочку, с вызовом функции генерации формы" "впилить" в существующую форму ?

как с ajax использовать?

Сорян, ща не пойду все это дерьмо копать. Д.орг и RTFM. Там все просто и логично, главное понимать задачу.

"коллбеком страницы указать"

зачем отельная функция и отдельный URL, если я могу на этом URL свою форму повесить (через Form API) и в ней проверить тоже самое, без лишних сущностей…?

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