Отличия (точнее 1 из отличий) между функциями API Drupal 7 под названиями drupal_set_message()
и form_set_error()
я продемонстрирую читателям на простом наглядном примере программного кода примитивной абстрактной формы.
В первом случае будем использовать form_set_error()
:
<?php function RedBookCms_simpleFrm($form, &$form_state) { $form['field_example'] = array( '#type' => 'textfield', '#title' => 'Напишите слово: Drupal', ); // А это поле так, для "массовки": $form['field_addition'] = array( '#type' => 'textfield', '#title' => 'Напишите ещё что-нибудь:', ); $form['actions'] = array('#type' => 'actions'); $form['actions']['process_the_data'] = array( '#type' => 'submit', '#value' => 'Обработать данные!', ); $form['#validate'][] = 'RedBookCms_simpleFrm_validate'; return $form; } function RedBookCms_simpleFrm_validate($form, &$form_state) { if (strcmp($form_state['values']['field_example'], "Drupal") != 0) form_set_error('field_example', 'Вы не написали слово "Drupal"!'); } function RedBookCms_simpleFrm_submit($form, &$form_state) { drupal_set_message('Получено: ' . $form_state['values']['field_example']); } ?>
Результат будет вот таким:
Во втором случае будем использовать drupal_set_message()
в функции валидации:
function RedBookCms_simpleFrm_validate($form, &$form_state) { if (strcmp($form_state['values']['field_example'], "Drupal") != 0) drupal_set_message('Вы не написали слово "Drupal"!', 'error'); }
Результат будет вот таким:
В
form_set_error()
в качестве первого входного параметра указываем наименование элемента формы, заданного в функции-описании последней.
Следовательно в первом случае дальнейшая обработка прервалась после обнаружения «неправильно» введенных пользователем данных, ну и неверно заполненное значение подсветилось, а во втором случае несмотря на вывод предупреждающего сообщения об ошибке, она продолжилась, плюс данные введенные ранее не запомнились. Выводы сделаете самостоятельно?
Свежие комментарии