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では、ちょうど$link=http_build_query($_GET);で作成し、このリンクをページネーションとソートの両方に使用します。ただし、フレームワークのイデオロギーを使用して同じことを行う方法を見つける必要があります。そのようなありふれたタスクの例がいくつかあるに違いありません。

于 2010-03-21T13:29:43.557 に答える