1

我最近开始使用 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}',
        ),


    ),

));

我真的不知道该怎么办了,因为我非常迷茫,任何帮助都将不胜感激

4

2 回答 2

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');
}

这里的缺点是关键字状态将在会话期间保持。

于 2010-09-01T00:40:31.360 回答
0

这就是为什么我不喜欢这些框架。在原始 PHP 中,我会使用 just$link=http_build_query($_GET);然后使用此链接进行分页和排序。但是你必须找到一种方法来使用你的框架意识形态来做同样的事情。我敢打赌,对于这种司空见惯的任务,他们有一些例子。

于 2010-03-21T13:29:43.557 回答