Фильтр 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()." ".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.