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
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
php获取图片信息的方法详解
Dec 10 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
python统计cpu利用率的方法
2015/06/02 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
详解python中的装饰器
2018/07/10 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
教师实习自我鉴定
2013/12/18 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
避暑山庄导游词
2015/02/04 职场文书
红歌会主持词
2015/07/02 职场文书
大学开学感言
2015/08/01 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书