db_select szűrés lapozása

makgab képe

Üdv!

Eszerint kellene működnie egy szűréses lapozónak, de nem működik:

function data_form($form, &$form_state){
 
  $list = array();
  // SQL select for $list ....
  // filter form ***************************
  $form['filter'] = array(
    '#type' => 'fieldset',
    '#title' => t('Filter option')
  );
 
  $form['filter']['filter_id'] = array(
    '#type' => 'select',
    '#title' => t('Filter'),
    '#options' => $list,
    '#default_value' => isset( $form_state['values']['filter_id'] )? $form_state['values']['filter_id'] : '',
  );
  $form['filter']['filter_button'] = array(
    '#type' => 'submit',
    '#value' => t('Filter'),
  );
  // **************************************
 
 
 
 
 
  // headers
  $header = array(
    array('data' => ' ID', 'field' => 'id', 'sort' => 'asc', 'width' => '120'),
    array('data' => t('Value'), 'field' => 'value'),
    );
 
  // rows
  $rows = array();
 
  // SQL ***
  db_set_active('server');
  $query = db_select('data', 'd')->extend('PagerDefault')->extend('TableSort');
  $query->fields( 'd', array('id', 'value') );
  // filter if it exists
  if ( isset($form_state['values']['filter_id']) AND !empty($form_state['values']['filter_id']) ) $query->condition('d.id', $form_state['values']['filter_id'],'=');
  // filter end
 
  $result = $query
    ->limit(50)
    ->orderByHeader($header)
    ->execute();
 
  foreach ($result as $record) {
      $rows[] = array(
          'id' => $record->id,
          'value' => $record->value,
          );
    } // foreach
  db_set_active('default');
  // ******
 
 
  // build table
  $form['title'] = array(
    '#theme' => 'table',
    '#header' => array( t('Data') ),
  );
  $form['data_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    );
  $form['data_pager'] = array(
    '#theme' => 'pager',
    );
 
  return $form;
}
 
 
 
function data_form_submit($form, &$form_state) {
  $form['filter']['filter_id'] = $form_state['values']['filter_id'];
  $form_state['rebuild'] = TRUE;
}

A Filter buttonra először megy a szűrés, lapozni is lehet, majd amikor visszafele lapozok (v. első lap), a beállított szűrés nem működik (elveszik). Minden adat szűrés nélkül jelenik meg a táblázatban.
Mit rontok el?

Drupal verzió: 
makgab képe

Az a baj szerintem, hogy Filter-el beállított (postolt) érték a pagerrel nem megy tovább. Mivel a pager egy get-elt paraméter.
Szóval nem csoda, hogy a linkelt példában többeknek sem működött.

Van erre korrekt megoldás?

0
0
pp képe

get legyen a method, és vegyed fel a lapozó változóit is hidden elemekkel vagy views irányában indulnék el.

0
0
makgab képe

köszönöm.

  // filter form ***************************
  $form['#method'] = 'get';
  $form['filter'] = array(
    '#type' => 'fieldset',
    '#title' => t('Filter option')
    );
   // ...
0
0