加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ListViewBuilder.php 5.59 KB
一键复制 编辑 原始数据 按行查看 历史
NullFeng 提交于 2017-12-25 18:09 . TP自动生成列表
<?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 '只能在控制器中使用!!!';
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化