标签:请求方法 idt 简介 display roman prompt 代码 man 分页
GridView小部件用于展示多条数据的列表。GridView小部件的使用需要数据提供器即yii\data\ActiveDataProvider的实例作为参数,所以
第一步就是要在控制器方法中创建这个实例然后传给视图,下面以我做的一个demo为例子进行讲解。
控制器LifeController代码:
//生活记录列表 public function actionIndex() { $searchModel = new Life([‘scenario‘ => Life::SCENARIO_SEARCH]); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render(‘index‘, [ ‘searchModel‘ => $searchModel, ‘dataProvider‘ => $dataProvider ]); }
AR模型Life代码:
//根据搜索条件搜索生活记录 public function search($params) { $query = self::find(); $dataProvider = new ActiveDataProvider([ ‘query‘ => $query, ‘pagination‘ => [ ‘pagesize‘ => 5//设置每页显示记录数量 ] ]); $this->load($params); if(!$this->validate()) return $dataProvider; $query->andFilterWhere([‘uid‘ => $this->uid]); $query->andFilterWhere([‘mood‘ => $this->mood]); $query->andFilterWhere([‘like‘, ‘con_morning‘, $this->con_morning]); $query->andFilterWhere([‘like‘, ‘con_afternoon‘, $this->con_afternoon]); $query->andFilterWhere([‘like‘, ‘con_night‘, $this->con_night]); $query->andFilterWhere([‘like‘, ‘note‘, $this->note]); return $dataProvider; }
接下来就是在视图中使用GridView小部件进行数据的展示了。由于GridView小部件的配置属性比较多,使用起来也比较复杂,所以这里
先给出一个简单配置的GridView小部件展示,后面再给出一个比较详细的配置,还会分别附上效果图,大家可以对比学习,最后再整理总结
一下GridView的配置属性的使用。
首先看简单版本的GridView:
代码:
<?= GridView::widget([ ‘dataProvider‘ => $dataProvider,//数据提供器 ‘filterModel‘ => $searchModel,//搜索功能 ‘columns‘ => [//列数据 [‘class‘ => ‘yii\grid\SerialColumn‘],//显示行号 /* 对应AR类属性名称 */ ‘day‘, ‘con_morning‘, ‘con_afternoon‘, ‘con_night‘, ‘note‘, [‘class‘ => ‘yii\grid\ActionColumn‘],//显示查看、编辑、删除等按钮(默认) ] ]); ?>
效果图:
说明:
简单版本的GridView只是配置很极少属性,很多属性使用了默认配置,容易理解。
然后看详细版本的GridView:
代码:
<?= GridView::widget([ ‘dataProvider‘ => $dataProvider,//数据提供器 ‘filterModel‘ => $searchModel,//搜索模型 ‘columns‘ => [//数据列 [ ‘class‘ => ‘yii\grid\CheckboxColumn‘,//显示复选框(每个复选框的值为当前记录的数据库主键值,名称为selection[]) ‘footerOptions‘ => [‘colspan‘ => 8],//该列底部占8格 ‘footer‘ => ‘<a class="btn btn-danger" onclick=delall("‘.Yii::$app->urlManager->createUrl([‘life/delall‘]).‘")>删除所有选中数据</a>‘//设置该列底部内容 ], [ ‘attribute‘ => ‘day‘, ‘filter‘ => true,//是否显示搜索框 ‘label‘ => ‘日期‘,//设置属性标签 //‘format‘ => [‘date‘, ‘php:Y.m.d‘],//设置日期格式 //‘options‘ => [‘width‘ => ‘150‘],//设置宽度 //数据列有链接: ‘format‘ => ‘raw‘, ‘value‘ => function($model, $key, $index, $column) {//设置该列显示内容 return Html::a(date(‘Y.m.d‘, $model->day), [‘life/view‘, ‘id‘ => $key], [‘title‘ => ‘查看详情‘]); }, ‘footerOptions‘ => [‘class‘ => ‘hide‘],//隐藏最后一列 /* * * 隐藏最后一列也可以这样写 ‘footerOptions‘ => [‘style‘ => ‘display:none‘], */ ], [ ‘attribute‘ => ‘mood‘, ‘value‘ => function($model) { $moods = [‘没什么好说的‘, ‘很糟糕‘, ‘略沉重‘, ‘有点郁闷‘, ‘还好吧‘, ‘小窃喜‘, ‘欢愉‘, ‘嗨森‘]; return $moods[$model->mood]; }, ‘filter‘ => [‘没什么好说的‘, ‘很糟糕‘, ‘略沉重‘, ‘有点郁闷‘, ‘还好吧‘, ‘小窃喜‘, ‘欢愉‘, ‘嗨森‘],//设置下拉框搜索 /* * * 下拉框搜索也可以这样写 ‘filter‘ => Html::activeDropDownList($searchModel, ‘mood‘, [‘没什么好说的‘, ‘很糟糕‘, ‘略沉重‘, ‘有点郁闷‘, ‘还好吧‘, ‘小窃喜‘, ‘欢愉‘, ‘嗨森‘], [‘prompt‘ => ‘全部‘]) */ ‘footerOptions‘ => [‘class‘ => ‘hide‘] ], [ ‘attribute‘ => ‘con_morning‘, ‘footerOptions‘ => [‘class‘ => ‘hide‘] ], [ ‘attribute‘ => ‘con_afternoon‘, ‘footerOptions‘ => [‘class‘ => ‘hide‘] ], [ ‘attribute‘ => ‘con_night‘, ‘footerOptions‘ => [‘class‘ => ‘hide‘] ], [ ‘attribute‘ => ‘note‘, ‘enableSorting‘ => false,//设置是否开启排序功能 ‘visible‘ => true,//设置该列内容是否可见 ‘footerOptions‘ => [‘class‘ => ‘hide‘] ], //[‘class‘ => ‘yii\grid\ActionColumn‘],//显示查看、编辑、删除等按钮(默认) [//自定义设置操作按钮 ‘class‘ => ‘yii\grid\ActionColumn‘, ‘header‘ => ‘操作‘,//设置当前列标题 ‘template‘ => ‘{view} {update} {delete}‘,//展示按钮 ‘headerOptions‘ => [‘width‘ => 100],//该列宽度设置 ‘buttons‘ => [ ‘delete‘ => function($url, $model, $key) {//自定义删除按钮 return Html::a(‘<i class="fa fa-ban"></i> 删除‘, [‘delete‘, ‘id‘ => $key],//设置删除按钮请求方法和参数,这里设置请求方法为del,默认为delete,$key是当前记录的数据表主键值 [ ‘class‘ => ‘btn btn-danger btn-xs‘, ‘title‘ => ‘删除‘, ‘data-method‘ => ‘post‘, ‘data‘ => [‘confirm‘ => ‘您确定要删除‘.date(‘Y.m.d‘, $model->day).‘的生活记录吗?‘]//设置删除确认信息 ]); } ], ‘footerOptions‘ => [‘class‘ => ‘hide‘] ] ], ‘layout‘ => "{items}\n{summary}\n{pager}",//整体布局与样式设置 ‘tableOptions‘ => [‘class‘ => ‘table table-striped table-bordered‘],//设置表格样式 ‘showHeader‘ => true,//是否显示表格头部 ‘showFooter‘ => true,//是否显示表格尾部 ‘rowOptions‘ => function($model) {//给每一行设置id return [‘id‘ => ‘tr_‘.$model->id]; }, ‘emptyText‘ => ‘暂时没有任何生活记录!‘,//没有数据时显示的信息 ‘emptyTextOptions‘ => [‘style‘ => ‘color:red;font-weight:bold‘],//没有数据时显示信息的样式设置 ‘showOnEmpty‘ => true,//没有数据时是否显示表格 ‘pager‘ => [ //‘options‘ => [‘class‘ => ‘hidden‘]//关闭分页(默认开启) /* 默认不显示的按钮设置 */ ‘firstPageLabel‘ => ‘首页‘, ‘prevPageLabel‘ => ‘上一页‘, ‘nextPageLabel‘ => ‘下一页‘, ‘lastPageLabel‘ => ‘尾页‘ ] ]); ?> <style> .tr_selected{background-color:pink} </style> <script> //点击复选框改变当前行背景色 $(‘input[name="selection[]"]‘).click(function() { var tr = $(‘#tr_‘+this.value); this.checked ? tr.addClass(‘tr_selected‘) : tr.removeClass(‘tr_selected‘); }); //删除选中的所有记录 function delall(url) { var ckbox = $(‘input[name="selection[]"]:checked‘), ids = []; $.each(ckbox, function(i, o) { ids.push(o.value); }); if(ids.length <= 0) return alert(‘请至少选择一条数据!‘); var okay = confirm(‘此操作将删除所有选中的数据,是否确认操作?‘); if(!okay) return; ids = ids.join(‘,‘); $.post(url, {‘ids‘: ids}, function(ret) { if(ret.ok) { alert(‘恭喜你,操作成功!‘); window.location.reload(); } else { alert(ret.msg ? ret.msg : ‘对不起,操作失败!‘); } }, ‘json‘); } </script>
控制器LifeController中代码:
//删除多条生活记录 public function actionDelall() { try { $ids = Yii::$app->request->post(‘ids‘); $ret = Life::deleteAll(‘id in (‘.$ids.‘)‘); echo Json::encode([‘ok‘ => $ret ? 1 : 0]); } catch (Exception $ex) { echo Json::encode([‘ok‘ => 0, ‘msg‘ => $ex->getMessage()]); } }
效果图如下:
说明:
详细版本GridView对很多属性进行了自定义设置,主要有:改变小部件布局、格式化显示数据、使用下拉框搜索、数据列设置链接、
展示复选框并实现点击时改变当前列背景颜色,以及批量删除记录功能等等。
GridView配置参数说明:
‘dataProvider‘ => $dataProvider,//数据提供器,即yii\data\ActiveDataProvider类实例 ‘filterModel‘ => $searchModel,//搜索模型,即AR类实例(不配置则搜索行消失) ‘columns‘ => [//数据列 [ ‘class‘ => ‘yii\grid\DataColumn’, /* * * DataColumn:显示数据,默认值。 * ActionColumn:显示操作按钮等 * CheckboxColumn:显示操复选框(复选框值为数据表主键值) * RadioButtonColumn:显示单选按钮(单选框值为数据表主键值) * SerialColumn:显示行号 * */ ‘attribute‘ => ‘day‘,//AR模型属性名称,即要显示的数据表字段名称 ‘label’=> ‘日期’,//设置属性标签 ‘header‘ => ‘日期‘,//设置该列标题(和label类似,区别是使用header设置之后该列无法使用排序功能) ‘format‘ => [‘date‘, ‘php:Y.m.d‘],//设置日期格式 ‘enableSorting‘ => false,//是否开启排序功能,默认为true ‘visible‘ => true,//设置该列内容是否可见,默认为true ‘filter‘ => true,//是否显示搜索框,默认为true /* 设置下拉框搜索 */ ‘filter‘ => [],//键值对数组 //也可以这样写: ‘filter‘ => Html::activeDropDownList($searchModel, ‘mood‘, [],//键值对数组 [‘prompt‘ => ‘全部‘]), /* 在数据列设置链接 */ ‘format‘ => ‘raw‘, ‘value‘ => function($model, $key, $index, $column) {//设置当前列显示内容 return Html::a(date(‘Y.m.d‘, $model->day), [‘life/view‘, ‘id‘ => $key], [‘title‘ => ‘查看详情‘]); }, ‘headerOptions’ => [],//设置当前列头部样式 ‘footerOptions‘ => [],//设置当前列底部样式 ‘footer‘ => ‘‘//设置当前列底部内容 ‘options‘ => [‘width‘ => ‘150‘],//设置当前列样式,如宽度等 /* 自定义设置操作按钮 */ ‘class‘ => ‘yii\grid\ActionColumn‘, ‘template‘ => ‘{view} {update} {delete}‘,//展示按钮(默认{view} {update} {delete}) ‘buttons‘ => [//没有在这里自定义设置的按钮使用默认设置 ‘delete‘ => function($url, $model, $key) {//自定义删除按钮 return Html::a(‘<i class="fa fa-ban"></i> 删除‘, [‘delete‘, ‘id‘ => $key],//设置删除按钮请求方法和参数,这里设置请求方法为del,默认为delete,$key是当前记录的数据表主键值 [ ‘class‘ => ‘btn btn-danger btn-xs‘, ‘title‘ => ‘删除‘, ‘data-method‘ => ‘post‘, ‘data‘ => [‘confirm‘ => ‘您确定要删除‘.date(‘Y.m.d‘, $model->day).‘的生活记录吗?‘]//设置删除确认信息 ]); } ] ], ‘layout‘ => "{items}\n{summary}\n{pager}",//整体布局与样式设置,由上而下分别为:表格、简介、分页(默认为:{summary}\n{items}\n{pager}) ‘tableOptions‘ => [‘class‘ => ‘table table-striped table-bordered‘],//设置表格样式(默认设置) ‘showHeader‘ => true,//是否显示表格头部(默认为true,为false则表格标题行和搜索行都消失) ‘showFooter‘ => true,//是否显示表格底部部(默认为false,为true时底部多一空行) ‘rowOptions‘ => function($model) {//每一行自定义样式(这里设置每一行id) return [‘id‘ => ‘tr_‘.$model->id]; }, ‘emptyText‘ => ‘暂时没有任何生活记录!‘,//设置没有数据时显示的信息 ‘emptyTextOptions‘ => [‘style‘ => ‘color:red;font-weight:bold‘],//没有数据时显示信息的样式设置 ‘showOnEmpty‘ => true,//没有数据时是否显示表格(默认为true) ‘pager‘ => [ //‘options‘ => [‘class‘ => ‘hidden‘]//关闭分页(默认开启) /* 默认不显示的按钮设置 */ ‘firstPageLabel‘ => ‘首页‘, ‘prevPageLabel‘ => ‘上一页‘, ‘nextPageLabel‘ => ‘下一页‘, ‘lastPageLabel‘ => ‘尾页‘ ]
标签:请求方法 idt 简介 display roman prompt 代码 man 分页
原文地址:http://www.cnblogs.com/wujuntian/p/7308287.html