我最近开始使用Yii 1.1.x构建自定义关键字搜索
搜索工作100%。但是一旦我对列进行排序并在管理视图中使用分页,搜索就会丢失并显示所有结果。因此,对于其他词,它不会过滤,因此只有搜索结果显示。它以某种方式重置它。
在我的控制器中,我的代码如下所示
$builder=Messages::model()->getCommandBuilder();
//Table1 Columns
$columns1=array('0'=>'id','1'=>'to','2'=>'from','3'=>'message','4'=>'error_code','5'=>'date_send');
//Table 2 Columns
$columns2=array('0'=>'username');
//building the Keywords
$keywords = explode(' ',$_REQUEST['search']);
$count=0;
foreach($keywords as $key){
$kw[$count]=$key;
++$count;
}
$keywords=$kw;
$condition1=$builder->createSearchCondition(Messages::model()->tableName(),$columns1,$keywords,$prefix='t.');
$condition2=$builder->createSearchCondition(Users::model()->tableName(),$columns2,$keywords);
$condition = substr($condition1,0,-1) . " OR ".substr($condition2,1);
$condition = str_replace('AND','OR',$condition);
$dataProvider=new CActiveDataProvider('Messages', array(
'pagination'=>array(
'pageSize'=>self::PAGE_SIZE,
),
'criteria'=>array(
'with'=>'users',
'together'=>true,
'joinType'=>'LEFT JOIN',
'condition'=>$condition,
),
'sort'=>$sort,
));
$this->render('admin',array(
'dataProvider'=>$dataProvider,'keywords'=>implode(' ',$keywords),'sort'=>$sort
));
我的观点看起来像这样
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'id',
array(
'name'=>'user_id',
'value'=>'CHtml::encode(Users::model()->getReseller($data->user_id))',
'visible'=>Yii::app()->user->checkAccess('poweradministrator')
),
'to',
'from',
'message',
/*
'date_send',
*/
array(
'name'=>'error_code',
'value'=>'CHtml::encode($data->status($data->error_code))',
),
array(
'class'=>'CButtonColumn',
'template'=>'{view} {delete}',
),
),
));
我真的不知道该怎么办,因为我非常失落,任何帮助都会受到高度赞赏
答案 0 :(得分:1)
您可以为搜索条件设置用户状态,并在每次控制器加载视图时测试状态。
的内容
if(isset($_REQUEST['search'])){
$keywords = explode(' ',$_REQUEST['search']);
Yii::app()->user->setState('keywords',$keywords);
}
else if(Yii::app()->user->hasState('keywords')){
$keywords=Yii::app()->user->getState('keywords');
}
这里的缺点是关键字状态将在会话期间保持。
答案 1 :(得分:0)
这就是我不喜欢这些框架的原因。在原始PHP中,我只使用$link=http_build_query($_GET);
创建它,然后使用此链接进行分页和排序。但是你必须找到一种方法来使用你的框架意识形态来做同样的事情。我打赌他们有这样一个普通任务的例子。