Вы здесь

Как фильтровать данные по значениям формы?

0

Здравствуйте. Есть listBox, кнопка и таблица. Необходимо выбрать в listBox нужный uid и перестроить таблицу после нажатия на кнопку. Как добиться такого результата без применения ajax? ajax мне не нужен, так как с ним отказывается работать пагинатор.

<?php
function my_journal_module_menu() {
    $items['test_page'] = array(
        'title' => 'Test_page',
        'page callback' => 'main_function',
        'access callback' => true,
    );
    return $items;}

function main_function(){
    $form = drupal_get_form('create_forms'); //получаем поля формы
    $output = drupal_render($form); //рендерим форму
    $output .= create_table('1'); //выводим таблицу с результатами для uid = 1 (по умолчанию).
    return $output;
}

function create_forms_submit($form, &$form_state){
    $number = $form_state['values']['list_box'];
    $listBox_value = '';
    if ($number == 0) $listBox_value = 1;
    if ($number == 1) $listBox_value = 10;
    if ($number == 2) $listBox_value = 16;
    drupal_set_message('Вы выбрали: '.$listBox_value);
    create_table($listBox_value); //Пытаюсь перейти в функцию создания таблицы и там ее вернуть, но ничего не происходит.
}

function create_forms($form, &$form_state){
    $form=array();

    $form['list_box'] = array(
    '#type' => 'select',
    '#options' => array('1','10','16'));

    $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Ок');

    return $form;
}

function create_table($listBox_value)
{
    $caption = 'Выборка нод с uid: '.$listBox_value;
    $header = array( 
    array('data' => t('nid')),   
    array('data' => t('Заголовок')),    
    ); 

  $nodes = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort'); //Объявляем пагинатор.
  $nodes->fields('n', array('nid', 'title'));
  $nodes->condition('n.type', 'article');
  $nodes->condition('n.uid', $listBox_value); //Подставляю в запрос значение из listBox
  $nodes->limit(2);
  $nodes->orderByHeader($header);
  $result = $nodes->execute()->fetchAll();

  foreach ($result as $node) //Заполняем строки
  {
  $rows[] = array(check_plain($node->nid),check_plain($node->title));
  } 

 $table = theme('table',array( 
              'header' => $header,   
              'rows'     => $rows,
              'caption' => $caption           
            ) ); 
  $table .= theme('pager');//Выводим пагинатор. 
  return $table; 
}

Версия Drupal: 
7.x
Категория: 
Form API
Вопрос задан 21.02.2017 - 21:15

Ответы

1

Вам надо где-то хранить выбранное значение формы. Есть два варианта:

  1. Хранить значение в адресе. Т.е. в сабмите формы делать редирект на "test_page/listboxid" или "test_page?listboxid=listboxid". Соответственно в create_table() передавать либо arg(1) либо $_GET['listboxid'].

  2. Хранить значение в сессии. Т.е. в сабмите формы делать $_SESSION['list_box'] = $form_state['values']['list_box']. Соответственно в create_table() передавать $_SESSION['list_box'].

Ответ дан 21.02.2017 - 23:05
Аватар пользователя xandeadx
xandeadx
1542

Теперь все работает, большое спасибо!

Комментарий оставлен 22.02.2017 - 04:45