2013-03-18 83 views
1

在Yii中,列表視圖用作搜索結果。 控制器通過單選按鈕值Onchange

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, 
      ));    

     } 

的search.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') 
       ); 
       ?> 

result.php

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

用戶模型字段ID,姓名,國家,類型,搜索結果會顯示姓名和國家。現在要過濾基於單選按鈕onchange(個人/組織)的結果。

回答

0

你可以嘗試使用$.fn.yiiListView.update方法傳遞列表視圖的id(user-list在你的情況)和ajax settings作爲參數。 data ajax設置的屬性是什麼可以用來指定將傳遞到您的actionSearch更新列表視圖的GET參數。所以你必須在動作中分析這些參數並根據它們改變實例。

下面的腳本來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); 

您也可以考慮the following code基於common technique of filtering CGridView results一個例子。

順便說,出於性能考慮,您可以在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);