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

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

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 {
    // Здесь логика при отмене действия (если нужна)
  }
}
Теги: 
Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.
Добавить комментарий