后台列表的字段我们知道是在控制器的lists方法中通过`$this->local['list_fields']`配置的,大多数情况下我们都是一个字段显示一列的: ![](https://box.kancloud.cn/1bca9c8a3e2cb27d03405d183eb9bd79_1572x245.png) 每一列都是一个字段,如果我希望一列中合并多个字段的值进行显示呢? 方式一,参考广告位列表: ``` public function lists() { if(!$this->local['list_fields']) $this->local['list_fields'] = array( 'title', 'vari', 'width'=>0, 'height'=>0, 'mobile_width'=>0, 'mobile_height'=>0, 'size'=>array( 'name'=>'PC端长×宽', 'list'=>'show', 'show'=>"{width}×{height}" ), 'mobile_size'=>array( 'name'=>'移动端长×宽', 'list'=>'show', 'show'=>"{mobile_width}×{mobile_height}" ), 'limit', 'is_thumb', 'ad_count' ); $this->addItemAction('添加广告', array('Ad/create',['parent_id'=>'id'],'parse'=>['parent_id']), '', 'layer-ajax-form layui-btn'); call_user_func(array('parent', __FUNCTION__)); } ``` ![](https://box.kancloud.cn/f2a3d22794ad469b4d54f702edbaf322_1567x207.png) 上面的`PC端长×宽`就是一个自定义的列,我希望显示的结果是width字段×height字段。所以我随便写了一个叫size的列表字段(随便写的,你可以写aa,数据表没有这个字段) `name`定义列名 `list`对应列表展示方法show `show`属性定义显示格式化,里面需要显示某字段的值用{}保住;**需要注意的是因为你需要查询width和height字段值,如果你$this->local['list_fields'] 没有定义它们,查询的时候是不会有这2个字段的,所以必须把这两个字段带上,但又不希望列表中单独显示这两个字段列,所以字段=>0表示列表不显示** ***** 方式二,采用自定义模板函数: 如果你的列组合太特殊了,可以考虑使用自定义模板函数的方式进行显示。自定义步骤: 1、`$this->local['list_fields'] `中的`aa`: ``` $this->local['list_fields'] = array( 'title', 'aa' => [ 'name' => '哈哈', 'list' => 'test' ], 'menu_id', 'user_id', 'image', 'date', 'created', 'is_verify', 'is_index', 'list_order' ); ``` 我文章表中并没有随便取的一个字段名aa,一样通过name定义列名,list对应一个随便取得模板函数名。 2、在app\run\view\lists.html中的block name=function块中,定义一个模板函数(你一打开lists.html就懂了,系统其他列表的显示方式都是通过定义模板函数处理的): ``` {function name=list_elem_test mdl=null field=null val=null col=null sub_elem=null} {$item.title}{$item.date} {/function} ``` 函数funtion头固定,你需要自定义你输出的函数体,里面: $item:获取行字段数据 $col:获取行信息如列名等 比如上面,就表示需要把标题和日期合并一起显示,最终结果: ![](https://box.kancloud.cn/308f290f7a26250b1bdf6bd54da58cb9_1536x233.png) 还是一样,如果你需要用的字段没有在$this->local['list_fields']定义是没有值的,你需要在$this->local['list_fields']中把字段加出来,如果不在列表中单独显示就 =>0 隐藏不显示。