Фильтр CGridview при загрузке страницы с предварительно заданным значением в поле поиска

Я работаю с фреймворком Yii.

Я установил значение в одном из моих полей фильтра cgridview, используя:

Вот мой jQuery для присвоения значения полю поиска:

$('#gridviewid').find('input[type=text],textarea,select').filter(':visible:first').val('".$_GET['value']."');

И вот мой PHP для вызова cgridview:

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bills-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'cssFile'=>Yii::app()->baseUrl . '/css/gridview.css',
'pager'=>array(
    'class'=>'AjaxList',
    'maxButtonCount'=>25,
    'header'=>''
),
'columns' => $dialog->columns(),
'template'=>"<div class=\"tools\">".$dialog->link()."&nbsp;&nbsp;&nbsp;".CHtml::link($xcel.'  Export to excel', array('ExcelAll'))."</div><br />{items}{summary}<div class=\"pager-fix\">{pager}</div>",));

Значение появляется в поле поиска, и мое cgridview работает правильно, без каких-либо проблем, но я не могу запустить cgridview для обновления или фильтрации. Кто-нибудь знает, кто должен запускать cgridview для фильтрации после загрузки страницы с предопределенным значением?

Буду признателен за любую помощь, и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

3 ответа

Вы можете решить проблему без какой-либо модификации клиентского кода. В вашем действии контроллера просто установите значение по умолчанию для атрибута, как показано ниже

public function actionAdmin()
{
    $model = new Bills();
    $model->unsetAttributes();
    $model->attribute_name="default filter value";//where attribute_name is the attribute for which you want the default value in the filter search field
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    $this->render('admin',array('model'=>$model));
}

Посмотрите на действие индекса по умолчанию, которое генерирует gii:

public function actionIndex()
{
    $model = new Bills();
    $model->unsetAttributes();
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    $this->render('index',array('model'=>$model));
}

Так что, если вы добавите одну строку, как: $model->attribute = 'test';Готово. 'attribute' - это, конечно, атрибут, который должен иметь значение фильтра по умолчанию (в этом случае значением является 'test'):). Итак, ваш код выглядит так:

public function actionIndex()
{
    $model = new Bills();
    $model->unsetAttributes();
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    if(!isset($_GET['Bills']['attribute']) {
        $model->attribute = 'test';
    }

    $this->render('index',array('model'=>$model));
}

Конечно, у вашего атрибута будет настроено тестовое значение (в фильтре), если вы ничего не введете в его поле фильтра. Я надеюсь, что это то, что вы ищете. Ваш фильтр должен работать как всегда.

Извините за мой плохой английский:)

С уважением

Вы можете использовать обновление Yii:

$.fn.yiiGridView.update('bills-grid', {
 type: 'GET',
 url: <?php echo Yii::app()->createUrl('controller/action') ?>"?Class[attribute]=<?php echo $_GET['value'] ?>
 success: function() {
  $.fn.yiiGridView.update('bills-grid');
 }
});

Вот как я это делаю, просто измените URL, это должно быть то же действие контроллера, что и в gridview, и измените параметры URL на структуру, представленную там, должно быть похоже на Bills [attribute] = value.

Другие вопросы по тегам