ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## [**表格构建器** ](https://www.kancloud.cn/ruoshuiyx/siyucms/1250577) `TableBuilder::fetch()`默认模板是table_builder/layout即`View::fetch("table_builder/layout")`,模板文件存放在D:\programming\phpstudy_pro\WWW\www.siyucmsdemo.com\view\admin\table_builder >[danger]视图定位流程: 1、确定模板根目录的位置 >* 如果在控制器渲染默认模板输出时用的时跨模块调用即view:fetch(admin@index/index);则先找到app/模块/view(view_dir_name配置指定)文件夹下的模板文件,不存在则找到项目根目录(www.siyucmsdemo.com)下的view(view_dir_name配置指定)文件夹下的模板文件,**跨模板调用时在此确定模板根目录** >* **没有跨模板调用时在此确定模板根目录**没有跨模块调用时则直接查找view_path指定的文件夹下的模板文件,下面就是确定view_path >view::fetch()中如果view.php配置文件中配置view_path不存在则检查app/模块下是否有view文件夹(<span style="color:blue">/app/admin/view</span>),如果有则设置view_path为此文件夹,否则设置view_path为项目根目录/模块名(<span style="color:blue">view/admin/</span>)为view_path的值(由此可知只要一处地方存在模板文件夹则view_path的值都能被设置) <span style="color:blue"></span> > > 2、确定模板根目录后就是确定模板文件的位置 > 默认是<span style="color:blue">/view/admin/驼峰转下划线的控制器名/方法名</span>或者<span style="color:blue">/app/admin/view/驼峰转下划线的控制器名/方法名</span> 但此cms渲染时有个默认的table\_builder/layout即TableBuilder::fetch()就是View::fetch("table_builder/layout") 如果想要定位到<span style="color:blue">/view/admin/驼峰转下划线的控制器名/方法名</span>则TableBuilder::fetch()方法的参数不能为空 得出:此cms模块下无模板文件且没有跨模块调用,则模板目录在项目根目录下的模块文件夹下 注意当确定模板文件夹的位置后 salesmen\_accounts\_expenditure" string(20) "table\_builder\\layout ``` \app\common\builder\TableBuilder::getInstance() ->setUniqueId('id') ->setPageTitle("this is title") ... ``` ## **fetch** TableBuilder::fetch() 分配变量和渲染模板 ``` View::assign($this->_vars); return View::fetch($this->_template); ``` ## addColumn($name = '字段名称', $title = '字段别名', $type = '单元格类型', $default = '默认值', $param = '额外参数', $class = 'css类名', $sortable = 'false是否排序') 新增一列 单元格类型:hidden,button,textarea,tag,password,image,images,file,files,color,,,text,radio,checkbox,date,time,datetime,daterange,select,select2,editor,,number,linkage ``` ``` **方法:** ``` /** * 获取句柄(获取自身实例) * @return FormBuilder */ public static function getInstance() /** * 渲染模版 * @param string $template 模板文件名或者内容 * @param bool $renderContent 是否渲染内容 * @return string * @throws \Exception */ public function fetch(string $template = '') /** * 设置表格主键 * @param string $key 主键名称 * @return $this */ public function setUniqueId($key = '') /** * 设置页面标题 * @param string $title 页面标题 * @return $this */ public function setPageTitle($title = '') /** * 设置表单页提示信息 * @param string $tips 提示信息 * @param string $type 提示类型:danger,info,warning,success * @param string $pos 提示位置:top,search,bottom * @return $this */ public function setPageTips($tips = '', $type = 'info', $pos = 'top') /** * 设置额外JS代码 * @param string $extra_js 额外JS代码 * @return $this */ public function setExtraJs($extra_js = '') /** * 设置额外CSS代码 * @param string $extra_css 额外CSS代码 * @return $this */ public function setExtraCss($extra_css = '') /** * 设置额外HTML代码 * @param string $extra_html 额外HTML代码 * @param string $pos 位置 [top和bottom] * @return $this */ public function setExtraHtml($extra_html = '', $pos = '') /** * 添加一列 * @param string $name 字段名称 * @param string $title 字段别名 * @param string $type 单元格类型 * @param string $default 默认值 * @param string $param 额外参数 * @param string $class css类名 * @param string $sortable 是否排序 * @return $this */ public function addColumn($name = '', $title = '', $type = '', $default = '', $param = '', $class = '', $sortable = 'false') /** * 一次性添加多列 * @param array $columns 数据列 * @return $this */ public function addColumns($columns = []) /** * 设置是否显示分页 * @param string $value 是否显示分页 true|false * @return $this */ public function setPagination($value = '') /** * 设置列表树父ID * @param string $value 字段 * @return $this */ public function setParentIdField($value = '') /** * 设置每页显示的行数 * @param string $value 数量 * @return $this */ public function setPageSize($value = '') /** * 隐藏第一列多选框(默认显示,多选列多用于批量删除等操作) * @return $this */ public function hideCheckbox() /** * 添加一个右侧按钮 * @param string $type 按钮类型:edit/delete/default * @param array $attribute 按钮属性 * @param array $extra 扩展参数(待用) * @return $this */ public function addRightButton($type = '', $attribute = []) /** * 添加多个右侧按钮 * @param array|string $buttons 按钮类型 * 例如: * $builder->addRightButtons('edit'); * $builder->addRightButtons('edit,delete'); * $builder->addRightButtons(['edit', 'delete']); * $builder->addRightButtons(['edit' => ['title' => '查看'], 'delete']); * @return $this */ public function addRightButtons($buttons = []) /** * 设置表格URL * @param string $url url地址 * @return $this */ public function setDataUrl($url = '') /** * 设置表格默认的新增地址 * @param string $url url地址 * @return $this */ public function setAddUrl($url = '') /** * 设置表格默认的修改地址 * @param string $url url地址 * @return $this */ public function setEditUrl($url = '') /** * 设置表格默认的删除地址 * @param string $url url地址 * @return $this */ public function setDelUrl($url = '') /** * 设置表格默认的导出地址 * @param string $url url地址 * @return $this */ public function setExportUrl($url = '') /** * 设置表格默认的更改排序地址 * @param string $url url地址 * @return $this */ public function setSortUrl($url = '') /** * 设置搜索参数 * @param array $items * @return $this * 第一个参数:类型 * 第二个参数:字段名称 * 第三个参数:字段别名 * 第四个参数:匹配方式(默认为'=',也可以是'<>,>,>=,<,<=,LIKE'等等) * 第五个参数:默认值 * 第六个参数:额外参数(不同类型,用途不同) */ public function setSearch($items = []) /** * 添加一个顶部按钮[目前只能新窗口打开,暂时不考虑弹出层] * @param string $type 按钮类型:add/edit/del/export/build/default * @param array $attribute 按钮属性 * @return $this */ public function addTopButton($type = '', $attribute = []) /** * 一次性添加多个顶部按钮 * @param array|string $buttons 按钮组 * 例如: * addTopButtons('add') * addTopButtons('add, edit, del') * addTopButtons(['add', 'del']) * addTopButtons(['add' => ['title' => '增加'], 'del']) * @return $this */ public function addTopButtons($buttons = []) /** * 设置是否在添加/编辑等页启用layer弹层加载 * @param string $value 是否启用layer true|false * @return $this */ public function setLayerOpen($value = true) ``` 例子 ``` return TableBuilder::getInstance() ->setUniqueId($pk) // 设置主键 //添加一列 addColumn('字段名称', '字段别名(用于在表格每列的标题中显示)' [, '类型' , '默认值', '额外参数', 'css类名']) //类型 text(默认)、status、yesno、link、image、select //添加多列 addColumns(数组内容) ->addColumns($columns) // 添加列表字段数据 ->setSearch($search) // 添加头部搜索 ->addColumn('right_button', '操作', 'btn') // 启用右侧操作列(添加一列表格,一边存放操按钮 字段名必须是right_button) ->addRightButtons(['edit' => ['title' => '编辑'],'delete','default']) //添加多个右侧按钮 目前支持'edit','delete','default'三种类型 //->addRightButtons('edit','delete','default') //除了数组也可以这样,推荐数组 ->addRightButtons($module->right_button) // 设置右侧操作列 ->addTopButtons($module->top_button) // 设置顶部按钮组 ->addTopButtons([ 'add' => [//除了add还有edit、del、export、default 'title' => '增加', 'icon' => 'fa fa-lightbulb-o', 'class' => 'btn btn-danger', 'href' => 'http://www.siyucms.com',//通常自定义按钮需要自定义链接地址或`onclick`事件 href和onclick一般选其一 'target' => '_blank', 'onclick' => '' ], 'edit', 'del' ]) ->setAddUrl($addUlr) // 设置【新增】按钮的地址 默认为该控制器中的add方法 ->setEditUrl(url('update', ['id' => '__id__'])) //设置【修改】按钮的地址,默认为当前控制器的edit方法,传递参数为id,值为主键的值。 ->setDelUrl(url('delete', ['id' => '__id__'])) //设置【删除】按钮的地址,默认为当前控制器的del方法,传递参数为id,值为主键的值。 ->setPageTitle('<h1>自定义标题<small>小标题</small></h1><ol class="breadcrumb"><li><a href="/admin"><i class="fa fa-dashboard"></i> 首页</a></li></ol>') ->setPageTips('这是页面顶部提示信息', "info","top") //setPageTips('提示信息','提示类型【info、success、danger、warning】', '提示位置【top:默认顶部、search:搜索区域,bottom:底部区域】') 三个位置可同时存在 ->setPageTips('这是页面搜索区域提示信息', "info","search") ->setPageTips('这是页面底部提示信息', "info","bottom") ->setDataUrl(Request::baseUrl() . '?getList=1')//设置当前页面表格的地址,默认 当前地址+?getList=1 ->setExtraJs('<script type="text/javascript">alert("Hello");</script> <script src="add.js"></script> <script src="adds.js"></script>')//额外的js 多次调用会被覆盖,写入在.wrapper类div容器底部 ->setExtraCss('<style type="text/css">#top{color:red;}</style> <link rel="stylesheet" href="/static/plugins/AdminLTE/css/my.css">') //额外的css 多次调用会被覆盖 ->setExtraHtml('<p>这是页面头部的一段文字</p>', 'content_top') //头部和顶部可同时存在一次,同一位置多次调用会被覆盖 ->setExtraHtml('<p>这是页面底部的一段文字</p>', 'content_bottom') ->fetch(); ``` ## **setSearch设置搜索的字段** | 参数 | 对应字段 | 含义 | 类型 | 必填 | | --- | --- | --- | --- | --- | | 0 | type | 字段类型 | string | 是 | | 1 | name | 字段名称(英文) | string | 是 | | 2 | title | 字段别名(中文) | string | 是 | | 3 | option | 匹配方式 | string | 否 | | 4 | default | 默认值 | string | 否 | | 5 | param | 额外参数 | array | 否 | | 6 | data\_source | 数据源 | string | 否 | | 7 | relation\_model | 模型关联 | string | 否 | | 8 | relation\_field | 关联字段 | string | 否 | | 9 | field\_id | 字段编号 | string | 否 | ~~~ $searchArr = [ [ 0 => "text",//字段类型 1 => "name",//字段名称(英文) 2 => "广告名称",//字段别名(中文) 3 => "LIKE",//匹配方式 4 => "",//默认值 5 => [],//额外参数 6 => 0,//数据源 7 => "",//模型关联 8 => "",//关联字段 9 => 110//字段编号 ], [ "radio",//字段类型 "status",//字段名称(英文) "状态", "=", "", [ 1 => "显示", 0 => "隐藏", ], 1, "", "", 108 ], ]; return TableBuilder::getInstance() ->setSearch($searchArr) ->fetch(); ~~~ ## **按钮** | 属性 | 含义 | 示例 | | --- | --- | --- | | title | 标题 | 编辑 | | icon | 字体图标 | fa fa-edit | | class | css类 | btn btn-flat btn-info btn-xs | | href | 链接地址 | url('edit', \['id' => '**id**'\]) | ## 自定义按钮 除了 编辑和删除以外,还可以添加自定义按钮,通常自定义按钮需配合自定义按钮属性来使用,如下是添加一个查看按钮,自定义按钮需要`href`属性,会自动进行跳转 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'href' => url('info', ['id' => '__id__']) ]; ->addRightButton('info', $btn_info) // 添加额外按钮 ~~~ ![](https://img.kancloud.cn/92/e8/92e8e27e9c164b9dd81c63089d78ac39_80x45.png) 你可以传递**当前行的任意参数**,只要你想并且有 比如同时传递`email`,系统会正则匹配并替换`__id__`和`__email__` ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'href' => url('info', ['id' => '__id__','email' => '__email__']) ]; ~~~ ## 执行确认 如果希望给按钮加上确认框,可以添加`confirm`类名,默认删除按键已增加确认提示 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'class' => 'btn btn-flat btn-default btn-xs confirm', 'href' => url('info', ['id' => '__id__']), ]; ->addRightButton('info', $btn_info) // 添加额外按钮 ~~~ ![](https://img.kancloud.cn/8e/67/8e67333908f4c30c0cd91900afff8d03_631x416.png) 你可以修改弹出确认里的标题、提示信息及确定和取消字样 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'class' => 'btn btn-flat btn-default btn-xs confirm', 'href' => url('info', ['id' => '__id__']), 'data-title' => '真的要删除吗?', 'data-tips' => '删除了就无法恢复了', 'data-confirm' => '删除吧', 'data-cancel' => '再想想' ]; ~~~ ## 自定义按钮 除了 编辑和删除以外,还可以添加自定义按钮,通常自定义按钮需配合自定义按钮属性来使用,如下是添加一个查看按钮,自定义按钮需要`href`属性,会自动进行跳转 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'href' => url('info', ['id' => '__id__']) ]; ->addRightButton('info', $btn_info) // 添加额外按钮 ~~~ ![](https://img.kancloud.cn/73/40/734097928d4eb7c9385a402420b2e0ac_80x45.png) 你可以传递**当前行的任意参数**,只要你想并且有 比如同时传递`email`,系统会正则匹配并替换`__id__`和`__email__` ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'href' => url('info', ['id' => '__id__','email' => '__email__']) ]; ~~~ ## 执行确认模态框 如果希望给按钮加上确认框,可以添加`confirm`类名,默认删除按键已增加确认提示 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'class' => 'btn btn-flat btn-default btn-xs confirm', 'href' => url('info', ['id' => '__id__']), ]; ->addRightButton('info', $btn_info) // 添加额外按钮 ~~~ ![](https://img.kancloud.cn/16/51/1651fb0036db14effa50dd8ef1f74958_631x416.png) 你可以修改弹出确认里的标题、提示信息及确定和取消字样 ~~~ $btn_info = [ 'title' => '查看', 'icon' => 'fa fa-fw fa-info', 'class' => 'btn btn-flat btn-default btn-xs confirm', 'href' => url('info', ['id' => '__id__']), 'data-title' => '真的要删除吗?', 'data-tips' => '删除了就无法恢复了', 'data-confirm' => '删除吧', 'data-cancel' => '再想想' ]; ~~~ ![](https://img.kancloud.cn/bf/9a/bf9a7f44dd09f3efe5d004b3cfb4188b_526x419.png)