CMS Drupal

Часто возникает необходимость в создании небольшой формы. Ставить из-за этого какие-то дополнительные модули бывает не целесообразно, проще написать свой небольшой модуль.

Формы в 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;
}

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Спасибо тебе добрый человек :), ты просто не представляешь как ты мне помог :)

И от меня огромное спасибо!!!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".