想通过额外的按钮来控制yii的组件listview 不知道怎么操作,搜索了半天的百度,google后无果,但一篇文章给了个思路(这里给个连接link http://www.yiibase.com/yii/view/23.html);看到这篇文章结合了其他的文章后.突然想到是不是可以这样.因为本人对 CDbCriteria 和 CActiveDataProvider 没有足够多的认识,所以想了个折中的办法.
首先现在模型里添加一个字段
public $sortbtn;
然后在rule规则里把这个字段放到safe里的on=>search
array('sortbtn,', 'safe', 'on'=>'search'),
这样就可以应用自己的字段了,然后我在model中的search方法中添加了这样一句,即当sortben有值的时候按id正序,没值按逆序
if(empty($this->sortbtn)){
$criteria->order="contents_id desc";
}else{
$criteria->order="contents_id asc";
}
好啦,现在去到view页面在listview所在页面添加一个搜索框
<?php $form=$this->beginWidget("CActiveForm",array(
"id"=>"selectform",
"action"=>$this->createUrl("contents/admin"),
"method"=>"GET",
));
?>
<?php echo $form->textField($model,"sortbtn"); ?>
<?php echo CHtml::submitButton("sort"); ?>
<?php $this->endWidget(); ?>
在注册个javascript语句
$('#selectform').submit(function(){
$('#contents-grid').yiiListView('update', {
data: $(this).serialize()
});
return false;
});
这样在textfield中输入值的时候就可以看到listview中的数据排序更新了而且不会刷新整个页面,不影响分页
2013/10/19之前写的不够完整且还有写错误
控制器处需要注意,要接受传递过来的值,有时候老是会忘记..
public function actionCatalogsView(){
$model=new Contents('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Contents']))
$model->attributes=$_GET['Contents'];
// $model->contents_title="mp3";
$this->render('catalogsview',array(
'model'=>$model,
));
}
还有就是javascript那里有点错误:listview好像是不能使用上面的方式更新的,需要使用
$cs->registerScript('search',"
$('#selecttor').change(function(){
var category = $(this).serialize();
$.fn.yiiListView.update(
'contents_listview',
{data: $(this).serialize()}
);
});
由于没能记录清除所以总是搞错~~