一.Yii批量删除的实现
1.首先,写button按钮:
视图中,columns下面声明checkbox代码:
array(
'class' => 'CCheckBoxColumn',
'selectableRows' => 2,
'footer' => '<button type="button" οnclick="GetCheckbox();" style="width:76px">批量删除</button>',
'checkBoxHtmlOptions' => array('name' => 'id[]'), //name在js中会用到
),
js代码:
<script type="text/javascript">
<!--
function GetCheckbox(){
var data=new Array();
$('input:checkbox[name="id[]"]').each(function (){
//根据上边定义checkbox名字获取选中项,然后放到数组
if($(this).attr("checked")=="checked"){
data.push($(this).val());
}
});
if(data.length > 0){
if (confirm("确认要删除?")) {
$.post('index.php?r=PjTxnUp/DelAll',{'id[]':data}, function (data) {
var ret = $.parseJSON(data);
//方法一:
if(ret.success==true)
{
location.reload();
}
else
{
alert("删除失败,请重新操作.");
}
//方法二
//if (ret != null && ret.success != null && ret.success) {
// $.fn.yiiGridView.update('news-grid'); //这里是CGridView中定义的id
// }
});
}
}else{
alert("请选择要删除的关键字!");
}
}
-->
</script>
2.js中post请求的控制器中写逻辑代码:
public function actionDelall() {
if (Yii::app()->request->isPostRequest) {
$criteria = new CDbCriteria;
$criteria->addInCondition('id', $_POST['id']);
News::model()->deleteAll($criteria); //News换成你的模型
if (isset(Yii::app()->request->isAjaxRequest)) {
echo CJSON::encode(array('success' => true));
} else
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
}
else
throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}
注意:要给这个action授权权限,在accessRules中赋予
二.CDBCriteria的常用方法
$criteria = new CDbCriteria;
$criteria->addCondition("id=1"); //查询条件,即where id = 1
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%'
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4
$criteria->compare('id', 1); //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
//即如果第二个参数是数组就会调用addInCondition
/**
* 传递变量
*/
$criteria->addCondition("id = :id");
$criteria->params[':id']=1;
/**
* 一些public vars
*/
$criteria->select = 'id,parentid,name'; //代表了要查询的字段,默认select='*';
$criteria->join = 'xxx'; //连接表
$criteria->with = 'xxx'; //调用relations
$criteria->limit = 10; //取1条数据,如果小于0,则不作处理
$criteria->offset = 1; //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件
$criteria->group = 'group 条件';
$criteria->having = 'having 条件 ';
$criteria->distinct = FALSE; //是否唯一查询
//多表查询
$criteria=new CDbCriteria;
$criteria->alias = 'Invoice';
$criteria->join='LEFT JOIN Client ON Client.id=Invoice.clientId';
$criteria->condition='Client.businessId='. Yii::app()->userInfo->business;
另:附上一些View层常用的数据展示方法:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'chapter-grid',
'dataProvider'=>$model->search(), //数据结果集
'filter'=>$model,
'columns'=>array(
'id',
//锚点<a href="http://www.gulianqiang.com/"></a>
array(
'name'=>'name',
'type'=>'raw',
'value'=>'CHtml::link($data->name,"/book/$data->id")',
),
//图片
array(
'name'=>'image',
'type'=>'image',
'value'=>'LImages::getPath("book").$data->image',//图片相对路径
),
//下拉列表
array(
'name'=>'type',
'value'=>'Lookup::item("chapterType",$data->type)',
'filter'=>Lookup::items('chapterType'),
),
//内容截取
array(
'name'=>'content',
'type'=>'html',
'value'=>'mb_substr(htmlspecialchars_decode($data->content),0,100,"utf-8")',
),
//时间
array(
'name'=>'create_time',
'type'=>'datetime',
),
// 根据相关信息读数据库
array(
'name'=>'user_id',
'value'=>'User::model()->findbyPk($data->user_id)->username',
'filter'=>false,
),
array(
'class'=>'CButtonColumn',
),
),
)); ?>