YII CGridView的分析
2013-10-20 13:55
141 查看
![](http://images.cnitblog.com/blog/568172/201310/20125306-d6468b0a7e8148ed86e57c468af43efc.png)
<?php $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$dataProvider, 'pager'=>Yii::app()->params['pager'], //定义在配置文件params.php里面 'ajaxUpdate'=>false, 'columns'=>array( array( 'class'=>'CCheckBoxColumn', 'value'=>'$data->id', //注意这里用的是$data 'htmlOptions'=>array( 'width'=>'5px', ), ), array( 'name'=>'序号', 'value'=>'$row+1', //序号$row+1; 'htmlOptions'=>array( 'width'=>'5px', ), ), 'title', //如无属性可直接写一个属性;可直接在数据库取得数据 array( 'name'=>'cid', 'value'=>'$data->category->title', 'htmlOptions'=>array( 'width'=>'80px', 'align'=>'center', ), ), array( 'class'=>'CButtonColumn', 'header'=>'缩略图', 'buttons'=>array( //自定义按钮 'preview'=>array( 'url'=>'', //可以加createUrl链接 不能www 'imageUrl'=>BASEURL.'/resources/icons/picture.png', //图标图片 'visible'=>'Yii::app()->controller->girdShowImg($data);', //积累控制器方式,如果有缩略图就可见 ), ), 'template'=>'{preview}', //自定义一定要加上这句话 ), array( 'name'=>'hits', 'value'=>'$data->hits', 'htmlOptions'=>array( 'width'=>'40px', 'align'=>'center', ), ), array( 'name'=>'create_time', 'value'=>'date("Y-m-d",$data->create_time)', 'htmlOptions'=>array( 'width'=>'70px', 'align'=>'center', ), 'visible'=>'false', ), array( 'name'=>'update_time', 'value'=>'date("Y-m-d",$data->update_time)', 'htmlOptions'=>array( 'width'=>'70px', 'align'=>'center', ), 'visible'=>'false', ), array( 'class'=>'CButtonColumn', 'header'=>'操作', 'viewButtonUrl'=>'Yii::app()->controller->showViewUrl("article",$data)', //查看原文 'viewButtonOptions'=>array('target'=>'_blank'), 'updateButtonUrl'=>'Yii::app()->createUrl("article/update",array( "id"=>"$data->id","menupanel"=>"$_GET[menupanel]","cid"=>"$_GET[cid]","title"=>"$_GET[title]"))',//编辑 ,然后ajax删除。 ), ), )); ?>
基类控制器Controller代码:
public function actionDelete($id) // { if(Yii::app()->request->isPostRequest) { // we only allow deletion via POST request if($this->loadModel($id)->delete()){ Yii::app()->user->setFlash('actionInfo',Yii::app()->params['actionInfo']['deleteSuccess']); }else { Yii::app()->user->setFlash('actionInfo',Yii::app()->params['actionInfo']['deleteFail']); } // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser if(!isset($_GET['ajax'])) $this->redirect($_POST['returnUrl']); } else throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); } protected function girdShowImg($data) { if(!empty($data->imgurl)) return true; else return false; } protected function showViewUrl($type,$data){ return str_replace('admin.php','index.php',Yii::app()->createUrl("$type/view",array('id'=>$data->id))); //因为这是在admin环境下 }
扩展:
批量删除的使用:
array( 'selectableRows' => 2, 'footer' => '<button type="button" onclick="GetCheckbox();" style="width:76px">批量删除</button>', 'class' => 'CCheckBoxColumn', 'headerHtmlOptions' => array('width'=>'1px'), 'checkBoxHtmlOptions' => array('name' => 'selectdel[]'), ),
<script type="text/javascript"> /*<![CDATA[*/ var GetCheckbox = function (){ if (confirm("确定要删除此系别吗 ?")){ var data=new Array(); $("input:checkbox[name='selectdel[]']").each(function (){ if($(this).attr("checked")==true){ data.push($(this).val()); } }); if(data.length > 0){ $.post('<?php echo CHtml::normalizeUrl(array('/article/delall/'));?>', {'selectdel[]':data}, function (data) { var ret = $.parseJSON(data); if (ret != null && ret.success != null && ret.success) { // $.fn.yiiGridView.update('yw1'); // alert('删除成功!'); setTimeout("window.location.href='<?php echo Yii::app()->createUrl('article/index',array('menupanel'=>'content|short|article_index'));?>';",1000); } // setTimeout("window.location.href='<?php echo Yii::app()->createUrl('article/index',array('menupanel'=>'content|short|article_index'));?>';",1000); }); }else{ alert("请选择要删除的关键字!"); } } } /*]]>*/ </script>
ublic function actionDelall() { if (Yii::app()->request->isPostRequest) { $criteria= new CDbCriteria; $criteria->addInCondition('id', $_POST['selectdel']); Article::model()->deleteAll($criteria);//Words换成你的模型 if(isset(Yii::app()->request->isAjaxRequest)) { echo CJSON::encode(array('success' => true)); // Yii::app()->user->setFlash('actionInfo',Yii::app()->params['actionInfo']['deleteSuccess']); } else $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index')); } else throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); }
其他一些扩展:
array( 'name'=>'content', 'type'=>'html', 'value'=>'mb_substr(htmlspecialchars_decode($data->content),0,150,"utf-8")', ), array( 'name'=>'title', 'type'=>'raw', 'value'=>'CHtml::link($data->title,Yii::app()->controller->showViewUrl("article",$data))', ), array( 'name'=>'imgurl', 'type'=>'image', 'value'=>'Yii::app()->request->baseUrl.$data->imgurl',//图片相对路径 ),
相关文章推荐
- Oracle SQL语句优化技术分析
- ruby 单态方法 分析
- hashlimit模块实现分析
- swtich_to宏分析 ------ 内联汇编翻译成标准汇编
- INDY(UDP)源码分析
- larbin源码分析--IPSite
- Jrtplib学习分析与记录5.1
- IPO热潮降温,分析下扎堆上市的几家互联网公司
- C语言中数组与指针的透彻分析
- Java源码分析:深入探讨Iterator模式——迭代器模式
- INIT.RC分析
- U-boot1.1.6之Makefile和mkconfig分析 .
- 「陶哲軒實分析」 習題 3.5.11 註記 由冪集公理的兩種等價表述而想到的函數的定義問題
- 调试技巧 —— 如何利用windbg + dump + map分析程序异常
- Android应用程序资源的查找过程分析
- mssql分页原理及效率分析
- 深入学习Django源码基础14 - Django中forms简要分析
- 抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
- Android应用程序消息处理机制(Looper、Handler)分析
- KMP原理、分析及C语言实现