<?php/*** Created by PhpStorm.* User: NullFeng* Date: 2017年12月25日* Time: 10:41*/namespace app\admin\traits;use think\Config;use think\Controller;use think\Request;use utils\ListModel;/*** Trait ListViewBuilder* @package app\admin\traits* 通用列表视图*/trait ListViewBuilder{/*** 列表数据模型*/protected $list_model;/*** 分页信息*/protected $page_info = ['no' => 0, //当前页码'count' => 0, //总页数'total' => 0, //总记录数'size' => 10, //单页显示记录数];/*** 当前查询条件数组*/protected $query_condition = [];/*** 搜索字段配置*/protected $search_config = [];/*** 创建列表模型* @return ListModel*/public function createListModel(){$this->list_model = new ListModel();return $this->list_model;}/*** 生成数据* @return array*/public function fetchRows(){if (!$this->list_model)return [];return $this->list_model->fetchRows();}/*** 获取头部* @return array*/public function fetchHeaders(){if (!$this->list_model)return [];return $this->list_model->getHeaders();}/*** 添加搜索字段(在获取数据之前调用)* @param $name 对应数据库里面的字段* @param $option array(* 'title'=>'显示标题',* 'type'=>'搜索类型:text|select|date',* 'method'=>'搜索方式:equals|contain',* 'placeholder'=>'类型为text时生效:string'* 'list'=>'类型为select时生效:array'* )* @return $this*/public function addSearchField($name, $option){$this->search_config[$name] = $option;return $this;}/*** 接收表单提交(必须放置于添加搜索字段之后)*/public function receivePost(){if ($this instanceof Controller && Request::instance()->isPost()) {$data = input('post.');$query_fields = isset($data['_query']) ? $data['_query'] : [];//取出要查询的字段if (!empty($query_fields)) {$config = $this->search_config;//读取所有字段的查询方式foreach ($query_fields as $key => $field) {//遍历要查询的字段if (isset($config[$key])) {//如果要查询的字段在配置里面if ($field === '_no_select_') {//如果值等于_no_select_则表示选择的是下拉框中的"全部"$query_fields[$key] = 98765675;continue;}if (strlen($field . '') == 0) {//要查询的值为空串continue;}$config_filed = $config[$key];switch ($config_filed['method']) {case 'contain':$this->query_condition[$key] = array('like', '%' . $field . '%');break;case 'equals':default:$this->query_condition[$key] = $field;break;}}}}$this->assign('_query_fields', $query_fields);}}/*** 获取当前查询条件*/public function getQueryCondition(){return $this->query_condition;}/*** 配置分页*/public function configPage($total, $size = 1){if (!empty($total)) {$this->page_info['count'] = ceil($total / ($size * 1.0));$this->page_info['no'] = 1;$data = input('post.');//从提交过来的参数获取当前页码if (isset($data['_page_no'])) {$this->page_info['no'] = $data['_page_no'];}$this->page_info['total'] = $total;$this->page_info['size'] = $size;}}/*** 获取当前页码* @return mixed*/public function getCurrentPageNo(){return $this->page_info['no'];}/*** 获取单页显示数量* @return mixed*/public function getPageSize(){return $this->page_info['size'];}/*** 渲染通用列表视图(页面需要手动选择list_view变量)* @param string $tpl* @return mixed|string*/public function fetchListView($tpl = ':common_list'){if ($this instanceof Controller) {$this->assign('_headers', $this->fetchHeaders());$this->assign('_rows', $this->fetchRows());$this->assign('_search', $this->search_config);$this->assign('_page', $this->page_info);$this->view->engine->layout(false);$list_view = $this->fetch($tpl);$this->view->engine->layout(true);$this->assign('list_view', $list_view);return $this->fetch();}return '只能在控制器中使用!!!';}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。