添加表头排序

addOrder('字段名')

如果有些字段需要排序功能,可以使用addOrder方法,将需要排序的字段名填写进去,多个字段用逗号隔开。

  1. // 读取用户数据
  2. $data_list = Db::name('admin_user')->select();
  3. // 使用ZBuilder构建数据表格
  4. return ZBuilder::make('table')
  5. ->addOrder('id,username') // 添加排序
  6. ->addColumn('id', 'ID')
  7. ->addColumn('username', '用户名')
  8. ->addColumn('nickname', '昵称')
  9. ->addColumn('email', '邮箱')
  10. ->addColumn('mobile', '手机号')
  11. ->addColumn('create_time', '创建时间')
  12. ->setRowList($data_list) // 设置表格数据
  13. ->fetch();

添加好排序字段后,还需要在查询数据之前获取排序的数据,使用$this->getOrder()即可。

  1. // 获取排序
  2. $order = $this->getOrder();
  3. // 读取用户数据
  4. $data_list = Db::name('admin_user')->order($order)->select();
  5. // 使用ZBuilder构建数据表格
  6. return ZBuilder::make('table')
  7. ->addOrder('id,username') // 添加排序
  8. ->addColumn('id', 'ID')
  9. ->addColumn('username', '用户名')
  10. ->addColumn('nickname', '昵称')
  11. ->addColumn('email', '邮箱')
  12. ->addColumn('mobile', '手机号')
  13. ->addColumn('create_time', '创建时间')
  14. ->setRowList($data_list) // 设置表格数据
  15. ->fetch();

添加表头排序 - 图1

注意:默认情况下,添加排序的字段是当前数据表真实存在的字段名,如果使用视图查询的数据,需要指定数据表。

getOrder()方法除了可以获取排序数据外,还可以添加额外的排序字段,比如:

  1. // 获取排序,并添加额外排序字段
  2. $order = $this->getOrder('id desc,sort');

默认情况下,新增的额外排序字段会放在其他排序字段的后面,如果希望额外排序字段的优先级更高,可以把额外的排序字段前置。

  1. // 获取排序,并将额外排序字段前置
  2. $order = $this->getOrder('id desc,sort', true);

使用数组形式

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addOrder(['id','username']) // 添加排序
  4. ->fetch();

指定其他表的字段

如果数据是从视图查询得到的,即包含了多张表的情况,那么需指定数据表名,格式为:表名.字段名,没有指定表名的字段默认在当前表查询。

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addOrder('admin_action.username,nickname') // 添加排序
  4. ->fetch();

也可以用数组的方式写,格式为'字段名' => '表名'

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addOrder(['title' => 'admin_action', 'username']) // 添加排序
  4. ->fetch();

如果设置的字段别名,也可以指定其他表,并且指定其他字段名,格式为:字段别名 => '表名.字段名'

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addOrder(['module_title' => 'admin_module.title']) // 添加排序
  4. ->fetch();

其中module_title是字段别名。

具体使用请参考系统的“日志管理”源码。