2013-03-18 2 views
1

В Yii вид списка используется как результат поиска. контроллерPass Radio Button Value 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, передавая его в виде списка (user-list) и ajax settings в качестве аргументов. data Свойство ajax - это то, что можно использовать для указания 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); 

Вы можете также рассмотреть the following code в качестве примера на основе common technique of filtering CGridView results.

Кстати, по соображениям производительности вы можете сделать свой вид частично в случае обновления АЯКС:

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