2 votes

Transmettre la valeur du bouton radio Onchange

Dans Yii, la vue de liste est utilisée comme un résultat de recherche. Contrôleur

 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

widget('zii.widgets.CListView', array(
        'id'=>'user-list',
        'dataProvider'=>$dataProvider,
        'itemView'=>'results',
        'template' => '{sorter}{items}{pager}',
));
?>
'Personnel',
                    '2'=>'Organisation'),array('id'=>'type'),array( 'separator' => "",'style'=>'display:inline')
                );
                ?> 

result.php

username.""; ?>
country; ?>

Les champs du modèle utilisateur sont id, nom, pays, type. Le résultat de la recherche affiche le nom et le pays. Maintenant, je veux filtrer les résultats en fonction de l'événement de changement du bouton radio (personnel/organisation).

0voto

Ezze Points 1468

Vous pourriez essayer d'utiliser la méthode $.fn.yiiListView.update en passant l'identifiant de la vue de liste (user-list dans votre cas) et les paramètres ajax en tant qu'arguments. La propriété data des paramètres ajax peut être utilisée pour spécifier les paramètres GET qui seront transmis à votre actionSearch pour mettre à jour la vue de liste. Vous devez donc analyser ces paramètres dans l'action et modifier l'instance de CDbCriteria en fonction d'eux.

Le script suivant pour lier un gestionnaire onchange à votre liste de boutons radio doit être enregistré dans la vue :

Yii::app()->clientScript->registerScript("init-search-radio-button-list", "
    $('input[name=\"type\"]').change(function(event) {
        var data = {
            // vos paramètres GET ici
        }
        $.fn.yiiListView.update('user-list', {
            'data': data
            // autres paramètres ajax si désiré
        })
    });
", CClientScript::POS_READY);

Vous pouvez également envisager le code suivant comme exemple basé sur la technique courante de filtrage des résultats de CGridView.

Au fait, pour des raisons de performances, vous pouvez rendre votre vue partiellement dans le cas de la mise à jour 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X