在我构建使用关系表构建的自定义关键字搜索后,排序和分页不起作用

时间:2010-03-21 11:24:16

标签: php yii

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


    ),

));

我真的不知道该怎么办,因为我非常失落,任何帮助都会受到高度赞赏

2 个答案:

答案 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);创建它,然后使用此链接进行分页和排序。但是你必须找到一种方法来使用你的框架意识形态来做同样的事情。我打赌他们有这样一个普通任务的例子。