Como você cria tabelas classificáveis ​​com um pager com dados de uma tabela personalizada?

19

Para o Drupal 6, você poderia fazer algo assim:

$header = array(
  array('data' => t('Order id'), 'field' => 'order_id'),
  ...
  array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);
$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25;
$result = pager_query($sql, $limit);
...

Dei uma olhada no drupal 7 e nos dois pager_querye tablesort_sqlagora se foi. Parece que, em vez disso, a PagerDefaultclasse pode ser usada para criar uma consulta de pager usando DBTNG. Não consegui encontrar nenhuma pista em uma API simples para anexar uma tabela classificável à consulta, como é feita no Drupal 6.

Então, como você cria uma tabela classificável com um pager que extrai dados de uma tabela personalizada?

googletorp
fonte

Respostas:

8

Você usa os chamados extensores. No seu caso, o código seria semelhante ao seguinte.

$header = array(
  array('data' => t('Order id'), 'field' => 'order_id'),
  // ...
  array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);

// Initialize $query with db_select().
$query = db_select('your table name');

// Add the fields you need to query.
// ... 

// Add the table sort extender.
$query = $query->extend('TableSort')->orderByHeader($header);

// Add the pager.
$query = $query->extend('PagerDefault')->limit(25);
$result = $query->execute();

Veja Como : Converter um módulo em DBTNG , Consultas dinâmicas: Classificação de tabela e Extensores .

kiamlaluno
fonte
Não se esqueça de adicionar o pager real em sua saída: // Build table. $ output = theme ('tabela', matriz ('cabeçalho' => $ cabeçalho, 'linhas' => $ linhas, 'vazio' => t ('Nenhuma string disponível.'))); // Adicione o pager. $ output. = theme ('pager');
Kbrinner 14/10/2015
6

Use os extensores TableSorte PagerDefault.

$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title', 'status'));

$table_sort = $query->extend('TableSort') // Add table sort extender.
  ->orderByHeader($header); // Add order by headers.

$pager = $table_sort->extend('PagerDefault')
  ->limit(5); // 5 rows per page.

$result = $pager->execute();
Serjas
fonte
2

Use o módulo DataTables .

O módulo DataTables integra o plugin jQuery DataTables ao Drupal como um estilo de exibição e uma função de tema que pode ser chamada. O DataTables permite adicionar recursos dinâmicos a tabelas, incluindo:

  • Paginação de comprimento variável
  • Filtragem dinâmica
  • Classificação com detecção de tipo de dados
  • Manipulação inteligente das larguras das colunas
  • Temas por CSS
  • E mais por vir ...
Satya
fonte
Aconselho não adicionar um módulo para fazer algo que faça parte da API do banco de dados e que possa ser feito com cerca de 50 ou menos linhas de código personalizado.
Agi Hammerthief 28/03
0

Você pode incluir apenas o mesmo Drupal 6 tablesort_sql no seu código e ele funciona bem.

Para pager:

$count = <Total No. of Table rows>

$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25; //Pager limit

$results = db_query( $sql );
$rows = array();
//Loop through the result.
while ( $row = $results->fetchAssoc() ) {
$rows = <Get your array values for Table row>
}
$current_page = pager_default_initialize($count, $limit);
$chunks = array_chunk($rows,$limit, TRUE);
$output = theme( 'table', array( 'header' => $headers, 'rows' => $chunks[$current_page] ) );
$output .= theme( 'pager', array('quantity',$count ) );
print $output;
Paulraj
fonte