Проверка Drupal 6 для функции обратного вызова формы - PullRequest
0 голосов
/ 25 января 2010

У меня есть простая форма с меню выбора на странице отображения узла. Есть ли простой способ проверить форму в моей функции обратного вызова? Под валидацией я не имею в виду ничего сложного, просто чтобы убедиться, что значения действительно существуют в массиве форм. Например, без ajax, если в моем меню выбора есть 3 пункта, и я добавляю 4-й пункт и пытаюсь отправить форму, drupal выдаст ошибку, говорящую о чем-то похожем на «сделан неправильный выбор, пожалуйста, свяжитесь с администратором». *

С ajax этот 4-й элемент, который вы создали, будет сохранен в базе данных. Так что я должен написать валидацию, как

if ($select_item > 0 && $select_item <= 3) {
  //insert into db
}

Или есть более простой способ проверить, действительно ли элемент существует в массиве форм? Я надеюсь, что так как без ajax, drupal не отправит форму, если ею манипулируют. Спасибо.

EDIT: Так что мне в основном нужно это в моей функции обратного вызова?

$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form_state['post'] = $form['#post'] = $_POST;
$form['#programmed'] = $form['#redirect'] = FALSE;
drupal_process_form($form_id, $form, $form_state);

Чтобы получить $ _POST ['form_build_id'], я отправил его как параметр данных, верно? Где я использую form_get_cache, похоже, нет данных. Вид потерянного сейчас.

Ответы [ 2 ]

0 голосов
/ 29 января 2010

Это не особенно «легко», но стандартный способ сделать это - использовать Drupals Forms API для отправки обратных вызовов - таким образом, вы получите ту же проверку, что и при отправке без js. .

Взгляните на Добавление элементов динамической формы с помощью AHAH . Хотя он не соответствует вашему сценарию (они перестраивают форму в обратном вызове для добавления новых элементов, а не для сохранения данных), объяснение рабочего процесса обработки довольно полезно.

Тогда есть несколько модулей, которые пытаются предложить отправку форм AJAX в общем виде - вы можете проверить их код на предмет того, как это сделать (или, возможно, просто использовать их;)

  • Ajax submit (только версия для разработчиков)
  • Ajax (имеет «официальный» релиз)

Наконец, предпринимаются усилия для того, чтобы лучше поддерживать эту функциональность в ядре в Drupal 7 - соответствующие обсуждения также могут помочь.

0 голосов
/ 26 января 2010

Поскольку вы уже используете AJAX, почему бы просто не написать немного jQuery, чтобы разрешить отправку формы, только если выбор находится в списке допустимых вариантов? Это можно сделать в пользовательском модуле, который уже выглядит так, как будто вы работаете (используя drupal_add_js ()).

...