Что делают в большинстве случаев после успешного submit данных формы? Вариантов два — либо показывают системное сообщение drupal_set_messge(), либо производят переадресацию на некую страницу с результатами.
Первый вариант почти всегда выглядит неказисто, а второй либо является статичным, либо требует привязки к сессии и реализации какого либо пути воспроизведения данных, которые только что были отправлены пользователем.
Почему бы не показать результат в блоке рендеринга формы, как часть самой формы? Далее — как это делается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function example_form($form, &$form_state) { //это наша форма, где всего два элемента //поле ввода и кнопка submit $form['text_field'] = array( '#title' => 'Введите что то', '#type' => 'textfield', '#required' => TRUE, ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Отправить данные', ); //теперь надо добавить какое то поле для вывода //результатов успешной отправки данных формы if (isset($form_state['values']['results'])) { $form['results'] = array( '#type' => 'item', '#title' => 'Результат отправки формы', '#markup' => $form_state['values']['results'], ); } |
Т.е. поле будет добавляться только, если есть данные для отображения. А данные мы будет подставлять в обработчике _submit.
1 2 3 4 5 6 7 8 9 10 11 |
function example_form_submit($form, &$form_state) { //тут мы делаем что то с данными //сохраняем в базу, что то считаем... //результат, который покажем прямо в форме $result = 'Данные отправлены, спасибо, номер вашей заявки такой-то...'; $form_state['values']['results'] = $result; //ну и подскажите drupal, что форму надо перестроить, а не брать из кеша $form_state['rebuild'] = TRUE; } |
При показе результатов, можно прятать часть полей, кнопку submit и т.п. Тогда после отправки форма будет выглядеть как краткая сводка данных + формируемое вами резюме.
Удобно то, что все данные в этот момент «под рукой», не надо их сохранять или передавать специально, а также не нужно программировать отдельную страницу под результат формы.