2013-03-18 57 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);