如果表格数据全部来自数据库,可以直接使用Drupal 7的tablesort功能。
$header = array(
array('data' => '学号', 'field' => 'school_id'),
array('data' => '姓名', 'field' => 'name'),
array('data' => '班别', 'field' => 'class'),
array('data' => '操作'), // 此列不支持排序
);$query = db_select('cj3_exam_scores', 's')
$query->extend('TableSort')
->orderByHeader($header);
$result = $query->execute();$rows = ...; // 把$result的值填到$rows里
$form['result'] = array(
'#markup' => theme('table', array('header' => $header, 'rows' => $rows)) ,
);
如果表格数据不是直接来自数据库,而是PHP计算出来的,那么就不能使用orderByHeader的功能。然而,我们还是可以利用Drupal对表格排序的大部分功能的。如果在theme table的时候,header里包含field字段,那么在前端的表头中就会有排序按钮(不管它后端是否实现了排序功能)。点击该排序按钮之后,会以GET方式发送排序的字段(sort)和排序顺序(order),根据这两个GET参数我们就可以在后端自己实现排序功能。
$sort = filter_input(INPUT_GET, 'sort');
$order = filter_input(INPUT_GET, 'order');
根据sort和order的值,我们可以对$rows进行重新排序,再输出给theme table即可。
评论