[TOC] 列表功能是有系统内置的表格构建器完成,建议在阅读下面的功能介绍之前,先[了解表格构建器](https://www.kancloud.cn/laowu199/e_dev/2055428)。 ## 快速实现列表带Tab回收站 ~~~ public function index() { $this->mdl->tableTab = [ 'basic' => [ 'title' => '全部数据' ], 'delete_index' => [ 'title' => '回收站' ] ]; return call_user_func(['parent', __FUNCTION__]); } ~~~ ![](https://img.kancloud.cn/12/64/1264feedc349f1757e8d65c15863df33_481x229.png) 这样就可以轻松的实现一个列表页带有回收列表的tab功能。 ## 实例多Tab列表 ~~~ public function index() { $this->mdl->tableTab = [ 'basic' => [ 'title' => '全部订单' ], 'aa' => [ 'title' => '未付款' ], 'bb' => [ 'title' => '未发货' ], 'cc' => [ 'title' => '已取消' ] ]; if ($this->request->isAjax()) { if ($this->args['tabname'] == 'aa') { // 你自己的条件自己写了 我只是做示范 $this->local['existsWhere'][] = 'status'; $this->local['where'][] = ['status', '=', '未付款']; } elseif ($this->args['tabname'] == 'bb') { // 你自己的条件自己写了 我只是做示范 $this->local['existsWhere'][] = 'status'; $this->local['where'][] = ['status', '=', '未发货']; } // 更多状态 } return call_user_func(['parent', __FUNCTION__]); } ~~~ ![](https://img.kancloud.cn/39/76/3976514c791abc94d04326ea9aca903d_504x200.png) ## 自定义列表顶部按钮 ~~~ public function index() { $this->addAction('mybtn2', '按钮', '', 'btn-5'); return call_user_func(['parent', __FUNCTION__]); } ~~~ ![](https://img.kancloud.cn/af/1c/af1c116e969dc9a8f327072e12b272ff_518x240.png) 更多文档[https://www.kancloud.cn/laowu199/e_dev/2052120](https://www.kancloud.cn/laowu199/e_dev/2052120) > 后面的添加、修改方法都可以定义顶部按钮,自行查看文档,后面就不再介绍了。 ## 列表默认的CURD按钮 列表默认会有新增、删除、修改、详细、复制等工具按钮,如果你希望控制这些按钮的显示可以: 方式一: 系统模型管理中,编辑对应模型 ![](https://img.kancloud.cn/46/a3/46a38a3774a5db76884ebae2e62ac9b5_620x70.png) 你可以快速选择当前模型列表自动出现的按钮。 方式二: ~~~ public function index() { // 手动控制不显示头部“新增”按钮 $this->local['tool_bar']['create'] = false; // 手动控制不显示头部“删除”(批量删除)按钮 $this->local['tool_bar']['batch_delete'] = false; // 手动控制不显示列表项“修改”按钮 $this->local['item_tool_bar']['modify'] = false; // 手动控制不显示列表项“删除”按钮 $this->local['item_tool_bar']['delete'] = false; // 手动控制不显示列表项“详情”按钮 $this->local['item_tool_bar']['detail'] = false; // 手动控制不显示列表项“复制”按钮 V2.0.4以后支持复制按钮 $this->local['item_tool_bar']['copy'] = false; return call_user_func(['parent', __FUNCTION__]); } ~~~ V2.0.4以后新增“复制”列表项工具按钮。 ## 自定义列表头部工具按钮 ~~~ public function index() { $this->mdl->tableTab['basic']['tool_bar'] = [ [ 'name' => 'test1', 'title' => '测试一', 'url' => (string) url('xx'), 'class' => 'my-class new_tab', 'icon' => 'layui-icon-heart-fill', 'sort' => 20 ], // ... 更多 ]; // 追加 $this->mdl->tableTab['basic']['tool_bar'][] = [ 'name' => 'test2', 'title' => '测试二', 'url' => (string) url('xx'), 'class' => 'my-class new_tab', 'icon' => 'layui-icon-heart-fill', 'sort' => 20 ]; return call_user_func(['parent', __FUNCTION__]); } ~~~ 更多文档请查看[https://www.kancloud.cn/laowu199/e_dev/2055430](https://www.kancloud.cn/laowu199/e_dev/2055430) ## 自定义列表项工具按钮 ~~~ $this->mdl->tableTab['basic']['item_tool_bar'] = [ [ 'name' => 'test1', 'title' => '测试一', 'url' => (string) url('xx'), 'class' => 'my-class new_tab', 'icon' => 'layui-icon-heart-fill', 'sort' => 20 ], ]; return call_user_func(['parent', __FUNCTION__]); ~~~ 更多文档请查看[https://www.kancloud.cn/laowu199/e_dev/2055431](https://www.kancloud.cn/laowu199/e_dev/2055431) ## 自定义列表项模板 [https://www.kancloud.cn/laowu199/e_dev/2055429#_148](https://www.kancloud.cn/laowu199/e_dev/2055429#_148) ## 自定义列表字段 ~~~ public function index() { $this->mdl->tableTab['basic']['list_fields'] = [ 'title', 'image', 'create_time' => [ 'title' => '添加日期', 'style' => 'color:red;' ] ]; return call_user_func(['parent', __FUNCTION__]); } ~~~ 列表默认会自动从模型的`form`属性中识别显示哪些字段,你可以想上面这些直接定时哪些字段和字段的属性。 更多文档请查看[https://www.kancloud.cn/laowu199/e_dev/2055429#_2]() ## 自定义列表模板文件 所有列表使用的是同一个模板文件`woo\admin\view\list.html`。 如果你希望当前列表自定义一个模板文件,可以在应用的下的view试图目录中以当前控制器的“小写+下划线”创建一个目录,在该目录下创建"list.html";然后把默认的列表模板内容复制过来就完成了自定义列表模板文件的需求。 然后当前列表自定义的一些列表项、搜索、按钮工具等模板可以写在该模板中。 如: ~~~ {extend name="$extend_list"/} {block name="script"} <script type="text/html" id="documentTitleTemplet"> </script> <script type="text/html" id="documentFlagTemplet"> </script> <script> </script> {/block} ~~~ 如果你不希望自定义的文件名叫"list.html",你可以: ~~~ public function index() { $this->local['fetch'] = 'index'; return call_user_func(['parent', __FUNCTION__]); } ~~~ ## 自定义搜索 ~~~ public function index() { $this->mdl->tableTab['basic']['list_filters'] = [ 'title', ]; return call_user_func(['parent', __FUNCTION__]); } ~~~ 列表搜索字段模型会自动从模型的`form`属性中识别哪些字段会进行搜索,你可以想上面这些直接定时哪些字段和搜索属性。 更多搜索文档请查看[https://www.kancloud.cn/laowu199/e_dev/2055432](https://www.kancloud.cn/laowu199/e_dev/2055432) ## 列表功能总结 列表更多需要实现的功能,你最终还是需要看[表格构建Table](https://www.kancloud.cn/laowu199/e_dev/2055428)章节。 上面的一些示范代码,就是都是通过对当前模型的`tableTab`属性进行数组操作实现的,你看在构建器文档的时候直接换成对模型的`tableTab`操作即可。 上面的所有对`tableTab`赋值的操作,你也可以在对应模型的trait文件中进行操作: ~~~ // 理解为模型的初始化方法 protected function afterStart() { call_user_func(array('parent', __FUNCTION__)); // 代码执行到这里的时候已经 直接执行过了start方法 所以start定义的属性都可以获取到 当然也可以在该文件定义更多的自定义属性和方法 // $this->form[字段名] = 动态修改字段的某个属性; $this->tableTab['basic'] = [ 'title' => '基本数据', 'list_fields' => [ 'title', 'image', 'create_time' => [ 'title' => '添加日期', 'style' => 'color:red;' ] ], 'list_filters' => [ 'id', 'title' => [ 'where' => function($value) { return ['title', 'LIKE', '%' . $value.'%']; } ] ], 'item_tool_bar' => [ [ 'name' => 'test1', 'title' => '测试一', 'url' => (string) url('xx'), 'class' => 'my-class new_tab', 'icon' => 'layui-icon-heart-fill', 'sort' => 80 ] ] ]; // 动态追加属性或修改属性 //$this->tableTab['basic']['siderbar'] = []; // 设置多tab,把文档对$tableTab属性的操作 改为对模型属性tableTab的操作 $this->tableTab['aa'] = [ 'title' => '测试tab' ]; // ...... } ~~~ ## 列表接口传递查询参数 ~~~ public function index() { // 列表中传递自定义的条件 // $this->local['where'][] = ['字段', '符号', '值'];//按TP数组的方式进行传递 // 举例:非超级管理员只能查看自己发布的数据 if ($this->login['admin_group_id'] != 1) { $this->local['where'][] = ['admin_id', '=', $this->login['id']]; // 如果列表有定义admin_id字段的搜索,Table底层可能也会自动加上对该字段的条件,容易造成重复和冲突 // 如果你希望底层在自动处理“搜索条件”的时候不要处理你指定的字段可以: $this->local['existsWhere'][] = 'admin_id';// V2.0.4以后支持 } // 列表中传递自定义的条件 // $this->local['whereOr'][] = ['字段', '符号', '值'];//参考TP手册whereOr // 列表中传递自定义的排序方式 // $this->local['order'] = ['id' => 'ASC']; // 强制缓存指定秒数 // $this->local['forceCache'] = 10; // 查询包含删除的数据 // $this->local['withTrashed'] = true; // 只查询删除的数据 // $this->local['onlyTrashed'] = true; // 强制规定每页数量 // $this->local['limit'] = 1; // 自定义顶部标题 // $this->local['header_title'] = '新标题'; return call_user_func(['parent', __FUNCTION__]); } ~~~