1

Yii では、検索結果として使用されるリスト ビュー。コントローラ

 public function actionSearch()
        {
           $key=$_GET['Text'];
            $criteria = new CDbCriteria();
            $criteria->addSearchCondition('username',$key,true,"OR");
            $criteria->select = "`username`,`country`"; 
           $data=new CActiveDataProvider('User',
                   array('criteria'=>$criteria,'pagination'=>array('pageSize'=>5),
            ));
           $this->render('search', array(
           'ModelInstance' => User::model()->findAll($criteria),
           'dataProvider'=>$data,
            ));               

        }

検索.php

<?php
//THE WIDGET WITH ID AND DYNAMICALLY MADE SORTABLEATTRIBUTES PROPERTY

$this->widget('zii.widgets.CListView', array(
        'id'=>'user-list',
        'dataProvider'=>$dataProvider,
        'itemView'=>'results',
        'template' => '{sorter}{items}{pager}',
));
?>
<?php echo CHtml::radioButtonList('type','',array(
                    '1'=>'Personal',
                    '2'=>'Organization'),array('id'=>'type'),array( 'separator' => "<br/>",'style'=>'display:inline')
                );
                ?> 

結果.php

<?php echo $data->username."<br>"; ?>
<?php echo $data->country; ?>

ユーザー モデルのフィールドは id、name、country、type です。検索結果には名前と国が表示されます。ここで、ラジオ ボタン onchange (個人/組織) に基づいて結果をフィルター処理します。

4

1 に答える 1

0

$ .fn.yiiListView.updateメソッドを使用して、リストビューのID(user-listこの場合)とajax設定を引数として渡すことができます。ajax設定のプロパティは、リストビューを更新するためdataに渡されるGETパラメーターを指定するために使用できるものです。actionSearchしたがって、アクションでこれらのパラメーターを分析し、CDbCriteriaそれらに応じてインスタンスを変更する必要があります。

onchangeハンドラーをラジオボタンリストにバインドする次のスクリプトをビューに登録します。

Yii::app()->clientScript->registerScript("init-search-radio-button-list", "
    $('input[name=\"type\"]').change(function(event) {
        var data = {
            // your GET-parameters here
        }
        $.fn.yiiListView.update('user-list', {
            'data': data
            // another ajax settings if desired
        })
    });
", CClientScript::POS_READY);

また、 CGridViewの結果をフィルタリングする一般的な手法に基づく例として、次のコードを検討することもできます。

ちなみに、パフォーマンス上の理由から、ajaxアップデートの場合はビューを部分的にレンダリングできます。

$view = 'search';
$params = array(
    'ModelInstance' => User::model()->findAll($criteria),
    'dataProvider' => $data
);
if (Yii::app()->request->isAjaxRequest)
    $this->renderPartial($view, $params);
else
    $this->render($view, $params);
于 2013-03-20T19:44:54.920 に答える