如何使用来自自定义表的数据的分页器制作可排序的表?


19

对于Drupal 6,您可以执行以下操作:

$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);
...

我接过来一看,并为Drupal 7和两个pager_querytablesort_sql现在已经没有了。似乎PagerDefault可以使用该类使用DBTNG创建寻呼机查询。我无法在简单的API上找到任何线索来像在Drupal 6中一样将可排序表附加到查询。

那么,如何使用分页器从自定义表中提取数据来创建可排序表呢?

Answers:


8

您使用所谓的扩展器。在您的情况下,代码将类似于以下代码。

$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();

请参见HowTo:将模块转换为DBTNG动态查询:表排序扩展程序


不要忘记在输出中添加实际的寻呼机://构建表。$ output = theme('table',array('header'=> $ header,'rows'=> $ rows,'empty'=> t('无可用字符串')))); //添加寻呼机。$ output。= theme('pager');
kbrinner

6

使用TableSortPagerDefault扩展符。

$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();

2

使用数据表模块。

DataTables模块将jQuery插件DataTables集成到Drupal中,作为视图样式和可调用的主题函数。DataTables使您可以向表添加动态功能,包括:

  • 可变长度分页
  • 即时过滤
  • 排序与数据类型检测
  • 智能处理列宽
  • CSS可主题化
  • 还有更多...

我建议不要添加模块来执行DB API的一部分,并且可以使用大约50行或更少的自定义代码来完成。
Agi Hammerthief 2014年

0

您只需在代码中包含相同的Drupal 6 tablesort_sql,它就可以正常工作。

对于寻呼机:

$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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.