В Drupal 6, как функция, которая создает многостраничную форму, может видеть результаты функции validate? - PullRequest
0 голосов
/ 02 июня 2011

В Drupal 6.20 я создаю функцию, которая создает многостраничную форму (my_form_process). На одной странице пользователь может выбрать из списка ранее созданных адресов или создать новый. Если пользователь хочет создать новый, я использую javascript и CSS, чтобы скрыть выборки и показать форму адреса (адрес, почтовый индекс города и т. Д.). Чтобы убедиться, что пользователь предоставляет необходимые данные, у меня есть функция проверки (my_form_process_validate), которая устанавливает ошибку, если поля не заполнены. Проблема заключается в том, что когда страницы не проходят проверку, my_form_process перерисовывает форму с ошибками проверки, но по умолчанию возвращается к «выбрать из списка ранее созданных адресов», а «создавать новые» элементы формы с ошибками по-прежнему скрытый.

Как я могу сказать my_form_process, который строит форму, когда проверка не удалась, показать «создать новый» div и скрыть «выбрать старый» div? Я попытался установить переменную $ form ['storage'], но my_form_process, похоже, ее не видит.


Вот еще немного информации:

Я попытался добавить $ form_state ['validation_status'] = 'error' в процедуру проверки, но все же обнаружил, что это значение отсутствует в массиве $ form_state, используемом в функции формы при обнаружении ошибки.

Однако, когда не было ошибки, значение было доступно. (подсказка)

Итак, просто ради пинка я удалил строку "form_set_error" из процедуры проверки, и теперь значение доступно.

Итак, теперь я должен установить

$form_state['validation_error'] = '<ol>'; 
$form_state['validation_status'] = 'error'; 
$form_state['validation_error'] .= '<li>' . t('address cannot be blank') . '</li>';
$form_state['validation_error'] .= '</ol>'; 

Затем в функции формы я могу проверить $ form_state ['validation_error'] и, если 'error', тогда использовать

drupal_set_message($form_state['validation_error'],$form_state['validation_status']);

Чтобы отобразить сообщение, а затем соответствующим образом установить свойство отображения div.

Конечно, похоже на ошибку в процессе "form_set_error", но я новичок в Drupal / PHP, поэтому я не совсем уверен, что я делаю.

1 Ответ

0 голосов
/ 02 июня 2011

Вы должны иметь возможность передавать значения через переменную $ form_state туда и обратно между функцией формы, функцией проверки и отправкой функций обработчика.Это может помочь (если вы еще не смотрели на это) http://drupal.org/node/144132#multistep

...