1. 渲染表格
最简单的表格代码如下(如果不知道$form是什么,请先学习examples里的form_api_example)
$form['table'] = [
'#type' => 'table',
'#header' => $header,
'#rows' => $rows,
'#empty' => '暂无记录',
];
其中$header是表头数组,$rows是每一行数据。
2. 排序功能
如果我们希望表格能根据表头排序,那么$header可以从简单的一维数组变成复杂的二维数组:
$header = [
['data' => '小测标题', 'field' => 'title'],
['data' => '状态', 'field' => 'status'],
['data' => '创建者', 'filed' => 'creator'],
['data' => '小测日期', 'field' => 'xiaoce_time'],
['data' => '最后更新时间', 'field' => 'updated', 'sort' => 'desc'],
['data' => '操作'],
];
其中,field对应数据库查询的字段名,sort属性表示默认的排序列和排序方式,desc必须是小写。
排序功能除了改$form里的$header数组外,还需要改数据库查询语句。很显然只有告诉数据库查询逻辑相关信息,才能做真正的排序:
$query = $query->extend('Drupal\Core\Database\Query\TableSortExtender')->orderByHeader($header);
3. 分页功能
插入这一行就能自动渲染分页控件:
$form[] = ['#type' => 'pager'];
当然了,肯定还要在数据库查询逻辑里指示怎样分页:
$query = $query->extend('Drupal\Core\Database\Query\PagerSelectExtender')->limit(20);
limit(20)的意思是每页显示20行数据。
4. 排序功能
https://drupal.stackexchange.com/questions/288724/create-a-draggable-table-and-save-weights
表格渲染属性参考:https://api.drupal.org/api/drupal/core%21modules%21system%21templates%21table.html.twig/9.0.x
评论