yii2-GridView在开发中常用的功能及技巧总结


Posted in PHP onJanuary 07, 2017

数据网格或者说 GridView 小部件是Yii中最强大的部件之一。它有一个属性名叫 dataProvider ,这个属性能够提供一个数据提供者的示例并且可以显示所提供的数据,即使用 yii\grid\GridView::columns 属性的一组列配置,在一个表格中渲染每一行数据。

例如,

use yii\helpers\Html;
use yii\grid\GridView;													  
<?= GridView::widget([
	'dataProvider' => $dataProvider,
	'filterModel' => $searchModel,
	'columns' => [
		['class' => 'yii\grid\SerialColumn'],
		'id',
]);?>

一、表格列

表格的列是通过 GridView 配置项中的 yii\grid\GridView::columns 属性配置的.

<?php
use yii\grid\GridView;
echo GridView::widget([
  'dataProvider' => $dataProvider,
  
  //表格列值搜索功能,注意一定要配合attribute才会显示
  //$searchModel = new ArticleSearch();
  'filterModel' => $searchModel,
  
  //重新定义分页样式
  'layout'=> '{items}<div class="text-right tooltip-demo">{pager}</div>',
  'pager'=>[
    //'options'=>['class'=>'hidden']//关闭分页
    'firstPageLabel'=>"First",
    'prevPageLabel'=>'Prev',
    'nextPageLabel'=>'Next',
    'lastPageLabel'=>'Last',
   ]
    
  'columns' => [
    ['class' => 'yii\grid\SerialColumn'],//序列号从1自增长
    
    // 数据提供者中所含数据所定义的简单的列
    // 使用的是模型的列的数据
    'id',
    'username',
    
    // 更复杂的列数据
    [
      'class' => 'yii\grid\DataColumn', //由于是默认类型,可以省略 
      'value' => function ($data) {
        return $data->name; 
        // 如果是数组数据则为 $data['name'] ,
        例如,使用 SqlDataProvider 的情形。
      },
    ],
    
    ['label'=>'标题','value' => 'title'],
    
    ['label'=>'文章内容','format' => 'html','value' => 'content'],
            
    [
      'label'=>'文章类别', 
      /*'attribute' => 'cid',产生一个a标签,点击可排序*/ 
      'value' => 'cate.cname' //关联表
    ],
    
    [
      //动作列yii\grid\ActionColumn 
      //用于显示一些动作按钮,如每一行的更新、删除操作。
     'class' => 'yii\grid\ActionColumn',
     'header' => '操作', 
     'template' => '{delete} {update}',//只需要展示删除和更新
     'headerOptions' => ['width' => '240'],
     'buttons' => [
      'delete' => function($url, $model, $key){
        return Html::a('<i class="fa fa-ban"></i> 删除',
          ['del', 'id' => $key], 
          [
           'class' => 'btn btn-default btn-xs',
           'data' => ['confirm' => '你确定要删除文章吗?',]
          ]
        );
       },           
      ],
     ],
    
  ],
]);
?>

1. 处理时间

数据列的主要配置项是 yii\grid\DataColumn::format 属性。它的值默认是使用 \yii\i18n\Formatter 应用组件。

[
 'label'=>'更新日期',
 'format' => ['date', 'php:Y-m-d'],
 'value' => 'updated_at'
],

//or
[
 //'attribute' => 'created_at',
 'label'=>'更新时间',
 'value'=>function($model){
    return date('Y-m-d H:i:s',$model->created_at);  
 },
 'headerOptions' => ['width' => '170'],
],

2. 处理图片

[
  'label'=>'封面图',
  'format'=>'raw',
  'value'=>function($m){
    return Html::img($m->cover,
          ['class' => 'img-circle',
          'width' => 30]
    );
  }
],

3. 数据列有链接

[
  'attribute' => 'title',
  'value' => function ($model, $key, $index, $column) {
      return Html::a($model->title, 
        ['article/view', 'id' => $key]);
  },
  'format' => 'raw',
],

4. 数据列显示枚举值(男/女)

[
  'attribute' => 'sex', 
  'value'=>function ($model,$key,$index,$column){
     return $model->sex==1?'男':'女';  
  },
  
  //在搜索条件(过滤条件)中使用下拉框来搜索
  'filter' => ['1'=>'男','0'=>'女'],
  //or
  'filter' => Html::activeDropDownList($searchModel,
        'sex',['1'=>'男','0'=>'女'],
        ['prompt'=>'全部']
   )
],
[
  'label'=>'产品状态', 
  'attribute' => 'pro_name', 
  'value' => function ($model) {
    $state = [
      '0' => '未发货',
      '1' => '已发货',
      '9' => '退货,已处理',
    ];
   return $state[$model->pro_name];
  },
  'headerOptions' => ['width' => '120'] 
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发大型项目的一点经验
Oct 09 PHP
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
菜鸟学PHP之Smarty入门
Jan 04 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php图像处理类实例
Jul 28 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 #PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 #PHP
Yii框架表单提交验证功能分析
Jan 07 #PHP
Yii框架弹出框功能示例
Jan 07 #PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 #PHP
PHP验证码类ValidateCode解析
Jan 07 #PHP
PHP缩略图生成和图片水印制作
Jan 07 #PHP
You might like
php $_SERVER当前完整url的写法
2009/11/12 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
linux中cd命令使用详解
2015/01/08 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
react基本安装与测试示例
2020/04/27 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
开服装店计划书
2014/08/15 职场文书
防灾减灾活动总结
2014/08/30 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python