Layer表格列根据配置动态显示

    技术2023-10-26  76

    目录

    一、环境二、讲解1、需要修改的地方 三、代码1、配置的值(可变的)2、PHP动态处理每一列数据3、动态追加layui表格的列1、先处理下配置$config的格式2、已经处理好了值,把值传到页面,页面处理$result1)、把值传到页面2)、页面拼接cols字段 四、相关博文

    一、环境

    操作系统 Win10Layui版本 2.4.5 查看Layui版本:alert(layui.v);PHP版本 7.1.33

    二、讲解

    1、需要修改的地方

    1、需要PHP动态处理每一列的数据2、需要动态拼接表格的列,即 table.render 中 cols字段 把配置的值处理成Layui可以处理的格式,通过模板引擎传到页面,Js处理拼接table.render的cols字段

    三、代码

    1、配置的值(可变的)

    比如配置的值如下 $config = [ ['name' => '类型1', 'value' => 1], ['name' => '类型2', 'value' => 2], ['name' => '类型3', 'value' => 3], ];

    2、PHP动态处理每一列数据

    我们自定义每一列的类型值为type_1,type_2,...,type_n,则PHP代码如下: public function test(){ //比如配置的值如下 $config = [ ['name' => '类型1', 'value' => 1], ['name' => '类型2', 'value' => 2], ['name' => '类型3', 'value' => 3], ]; //假设列表数据是这样 $list = [ ['name' => '姓名1', 'age' => 1], ['name' => '姓名2', 'age' => 2], ['name' => '姓名3', 'age' => 3] ]; //处理列表数据:追加上动态配置的列 foreach ($list as &$value){ foreach ($config as $v){ $type = $v['value']; $value["type_{$type}"] = 0; } } var_export($list); } 打印的值如下 array ( 0 => array ( 'name' => '姓名1', 'age' => 1, 'type_1' => 0, 'type_2' => 0, 'type_3' => 0, ), 1 => array ( 'name' => '姓名2', 'age' => 2, 'type_1' => 0, 'type_2' => 0, 'type_3' => 0, ), 2 => array ( 'name' => '姓名3', 'age' => 3, 'type_1' => 0, 'type_2' => 0, 'type_3' => 0, ), )

    3、动态追加layui表格的列

    1、先处理下配置$config的格式

    代码如下 public function test(){ //比如配置的值如下 $config = [ ['name' => '类型1', 'value' => 1], ['name' => '类型2', 'value' => 2], ['name' => '类型3', 'value' => 3], ]; $result = []; //field为table.render中cols的field;title为table.render中cols的title $config = array_column($config, 'name', 'value'); foreach ($config as $k => $v){ $typeName = 'type_' . $k; $result[] = [ 'id' => $k, 'field' => $typeName, 'title'=> $v ]; } var_export($result); } 打印的值如下 array ( 0 => array ( 'id' => 1, 'field' => 'type_1', 'title' => '类型1', ), 1 => array ( 'id' => 2, 'field' => 'type_2', 'title' => '类型2', ), 2 => array ( 'id' => 3, 'field' => 'type_3', 'title' => '类型3', ), )

    2、已经处理好了值,把值传到页面,页面处理$result

    1)、把值传到页面

    $this->assign('result', $result);

    2)、页面拼接cols字段

    //动态组装列数据 let result = {:json_encode($result)}; //获取到PHP传过来的$result let cols = [ {field: 'name', title: '姓名'} ,{field: 'age', title: '年龄'} ]; //根据result渲染列 let length = result.length; for(let i=0; i<length; i++){ cols.push({field: result[i]['field'], title: result[i]['title']}); } //表格渲染 let tableObject = table.render({ elem: '#id' ,url: 'url' ,cols: [cols] ,text: { none: '暂无数据' } //... });

    四、相关博文

    如果需要知道怎么动态加载表格汇总数据,请参考这一篇:Layer表格汇总(所有)数据根据配置动态显示
    Processed: 0.009, SQL: 9