Программно пропустить проверку формы CCK по умолчанию - PullRequest
3 голосов
/ 14 ноября 2011

Справочная информация: В Drupal 6 у меня есть очень длинная форма CCK со многими обязательными полями.У меня также есть модуль, который предоставляет некоторым пользователям специальные разрешения.Одно разрешение должно позволять пользователю пропускать обязательные поля и при этом иметь возможность отправлять форму.Я хотел бы предупредить пользователя, что он пропустил некоторые поля, которые (для непривилегированных пользователей) являются обязательными, прежде чем разрешить ему подтвердить отправку.

Вопрос: Как пропустить проверку по умолчаниюдля формы CCK?(в частности, обязательные поля)

Предыдущее исследование: Я уже тщательно искал ответ на этот вопрос.Я знаю, что я должен использовать hook_form_alter () и, возможно, after_build ().Я уже пытался сбросить валидацию с помощью

$form['#validate'] = array();

, однако не было никаких изменений в поведении валидации (например, остались ошибки для обязательных полей, не произошло ни одной отправки).

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Настройка $form['#validate'] = array(); должна работать в определенной степени (любые явные обработчики проверки больше не будут запускаться), но есть также ключ #element_validate, который можно добавить к большинству элементов, и флаг #required, который отключит проверка формы по умолчанию.

Самый простой способ снять эти ограничения - рекурсивно пройти через форму и сбросить мошеннические значения. Как то так:

function mymodule_unrequire_element(&$element) {
  if (isset($element['#required'])) {
    unset($element['#required']);
  }
  if (isset($element['#element_validate'])) {
    unset($element['#element_validate']);
  }

  foreach (element_children($element) as $child_element) {
    mymodule_unrequire_element($element[$child_element]);
  }
}

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'the_form_id') {
    mymodule_unrequire_element($form);
  }
}

Это абсолютно не проверено, но я думаю, что это поможет:)

0 голосов
/ 16 ноября 2011

Модуль http://drupal.org/project/skip_validation предлагает функцию проверки пропуска.Глядя на это может быть полезно.

...