#php #drupal-6 #drupal-fapi
#php #drupal-6 #drupal-fapi
Вопрос:
Как обычно, я думал, что что-то в Drupal forms API будет простым… о чем я думал?
Проблема
У меня есть блок, который выводит форму через drupal_get_form (). Каким-то образом в функции отображения блока я хочу проверить, не прошла ли форма проверку (т. Е. имеет ли какие-либо ошибки, которые были установлены form_set_error () в функции проверки моей формы).
Пробовал до сих пор…
- проверка
$_SESSION['messages']['error']
в функции отображения блоков — но к тому времени они исчезли - проверка
$_POST
в функции отображения блоков — здесь ничего полезного - проверка
form_get_errors()
вmymodule_preprocess_page()
— пусто - проверка
form_get_errors()
вmytheme_preprocess_page()
— пусто
Меня смущает, что мои вызовы form_get_errors () пусты. Он вызывает form_set_error() без аргументов — который завершается $reset = FALSE
, таким образом, статический var, содержащий ошибки формы, не очищается. Итак, я не знаю, где этот var сбрасывается — где-то с помощью другой функции forms api? — так что к тому времени, когда я вызываю ее в своем модуле или теме, она пуста.
помогите?
Итак, кто-нибудь знает, в какой момент (функции предварительной обработки?) Я могу вызвать form_get_errors()
перед очисткой статического параметра var? Или есть другая идея, как проверить наличие ошибок формы в блоке, который отображает форму? (Кстати — я вполне уверен, что мог бы легко проверить это, как только я окажусь внутри своей функции, которая drupal_get_form()
вызывает… но мне нужно знать об ошибках в функции отображения окружающего блока.)
Ответ №1:
Это некрасиво, поскольку все выводится, но это должно сработать.
$form['#validate'][] = '_error_preservation_helper';
...
function _error_preservation_helper($form, amp;$form_state) {
$GLOBALS['_error_preservation_helper'] = form_get_error();
return true;
}