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 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
PHP编程函数安全篇
Jan 08 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
php微信高级接口群发 多客服
Jun 23 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
自动更新作用
2006/10/08 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
pandas参数设置的实用小技巧
2020/08/23 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
后勤服务中心总经理工作职责
2014/03/03 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
公司岗位说明书
2015/10/08 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
学术会议开幕词
2016/03/03 职场文书
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python