Часто возникает необходимость в создании небольшой формы. Ставить из-за этого какие-то дополнительные модули бывает не целесообразно, проще написать свой небольшой модуль.
Формы в Drupal работают таким образом, что после отработки программа обычно переходит по какой-то ссылке (в частности может быть по той же самой, на которой висит наша форма). Сам же Друпал дает возможность управлять этими переходами. В частности можно отключить переход на этапе генерации формы:
function my_form($form_state) { // Определение полей формы ... // Отключаем переход $form['#redirect'] = FALSE; }
Или можно задать ссылку, по которой будет выполнен переход после отработки формы:
function my_form_submit($form, &$form_state) { // Задаем переход на главную страницу $form_state['redirect'] = ''; }
Это было не большое отступление. Нам же надо сейчас вывести результат работы формы. Т.е. не просто сообщение типа "Спасибо за ваше сообщение", а вывести на экран, допустим, результаты поиска по базе e-mail адресов.
Функция определения формы будет выглядеть примерно так:
function search_emails_form(&$form_state) { if (empty($form_state['storage']['results'])) { $form['email'] = array( '#type' => 'textfield', '#title' => t('E-mail'), '#size' => '30', '#maxlength' => '30', ); $form['submit'] = array( '#type'=>'submit', '#value'=>t('Filter'), ); $form['submit'] = array( '#type'=>'submit', '#value'=>t('Filter'), ); } else { $form['filter'] = array( '#type' => 'fieldset', '#title' => t('Filter'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#attributes' => array('class' => 'fieldset-advanced'), ); $form['filter']['email'] = array( '#type' => 'textfield', '#title' => t('E-mail'), '#size' => '30', '#maxlength' => '30', '#default_value' => $form_state['values']['email'], ); $form['filter']['submit'] = array( '#type'=>'submit', '#value'=>t('Filter'), ); $form['result'] = array( "#value" => $form_state['storage']['results'], ); } return $form; }
Привел немножко усложненный вариант. В приведенном выше коде пишется условие, при котором, если форма выводится уже после обработки данных ($form_state['storage']['results'] не пустая), то выводится снова эта же самая форма (в свернутом виде: collapsed fieldset) и ниже показываются результаты, которые как раз содержаться в переменной $form_state['storage']['results']. Значение же этой переменной заполняется в функции, которая обрабатывает данные нашей формы поиска.
function search_emails_form_submit($form, &$form_state) { // Пишем выборку, результат засовываем в $output $output = "Таблица с мылом"; $form_state['storage']['results'] = $output; return; }
Спасибо тебе добрый человек :), ты просто не представляешь как ты мне помог :)
И от меня огромное спасибо!!!
Отправить комментарий