2013-03-18 5 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 매개 변수를 지정하는 데 사용할 수있는 것입니다. 따라서 작업에서 이러한 매개 변수를 분석하고 CDbCriteria 인스턴스를 변경해야합니다.

라디오 버튼 목록에 onchange를 핸들러를 바인딩하는 다음 스크립트는보기에 등록 할 수 있습니다 : 당신은 또한 common technique of filtering CGridView results에 따라 예를 들어 the following code을 고려할 수 있습니다

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

.

$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); 
: 당신이 아약스 업데이트의 경우 부분적으로보기를 렌더링 할 수있는 성능상의 이유로 그런데

,