CGridView. Примеры фильтров
Фильтр в CGridView задается параметром filter. Чаще всего можно увидеть такой вызов грида:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'filter' => $model,
...
Свойство filter задает экземпляр модели (CModel), содержащей введенные пользователем фильтрующие данные. Установка данного свойства включает фильтрацию по столбцам таблицы, имеющим в своем описании name. Чтобы принудительно отключить фильтрацию для конкретного столбца, необходимо установить свойство столбца filter в false.
Строка с фильтрами имеет класс 'filters' по умолчанию. Это свойство можно изменить, установив свойство filterCssClass.
Также можно изменить позицию вывода фильтра, установив свойство filterPosition. Возможные значения:
- 'header' - фильтр отображается в начале тега thead;
- 'body' - фильтр отображается в конце тега thead (по умолчанию);
- 'footer' - фильтр отображается в конце тега tfoot.
...
'columns' => array(
array('name' => 'id', 'filter' => false),
// фильтрация для столбца ID будет выключена
'title',
'address',
'city_id' => array(
'name' => 'city_id',
'value' => '$data->city->title',
'filter' => CHtml::listData(City::model()->findAll(), 'id', 'title'), // фильтр в виде выпадающего списка
),
)
Может вы с таким сталкивались. Есть вьюшка, которая выводит данные из таблицы User. Если применить фильтр, а затем перейти на вторую страницу результата (т.е. когда пользователей соответствующих этому фильтру больше чем 10 например), тогда все фильтры перестают работать. Т.е. если я делаю фильтрацию по имени, что бы мне выводились все пользователи у которых имя начинается на А. Их в базе находится например 100, мне формируется ответ из 10 страничек, перехожу на вторую(тут отображены пользователи с 11 по 20 ), так вот на этой странице если я захочу использовать еще дополнительный фильтр, например по дате, то он уже не сработает
ОтветитьУдалитьпокажите ваш вызов грида, в частности интересуют dataProvider и filter. А также код экшна.
Удалитьспасибо, я уже разобрался сам http://yiiframework.ru/forum/viewtopic.php?f=3&t=7442
УдалитьОтлично, то что искал. Спасибо.
ОтветитьУдалитьЯ бы вдул как следует этой программистке
ОтветитьУдалитьПомимо того что я бы ей вдул, вынужден признать что статья краткая, но полезная. Пасиба=)
ОтветитьУдалитьнеожиданно... ))
УдалитьДобрый день! Вот такой вопрос. Имеется форма, на ней расположены форма поиска и два грида. Во втором гриде имеется встроенная фильтрация. Проблема в следующем: все выполняется при помощи аякса, при отправке данных с формы все отрабатывает нормально, информация в гридах обновляется, если же фильтрацию провожу во втором гриде, то второй грид перестает отображаться. В чем может быть проблема? Модель используется одна и та же.
ОтветитьУдалитьДобрый день )
УдалитьПервое, что приходит на ум - вы задали одинаковые id обоим гридам и данные уходят на один экшен, после чего второй грид и пропадает.
Посмотрите http://www.yiiframework.ru/forum/viewtopic.php?f=3&t=5474
Возможно найдете решение проблемы. Если не найдете, пишите мне через обратную связь, постараюсь помочь ;)
Здравствуйте.
ОтветитьУдалитьА не знаете, можно как-то применить предустановленный фильтр? Т.е. мне нужно взять гетом id и вывести данные из таблице только по этому id-шнику.
черт, прошу прощения за ошибки
УдалитьЭто снова я) Нашел решение. Оказывается из модели можно получить переменную гетом. В методе search():
Удалить$criteria->compare('DB_ID', $_GET['id'],true);
Профит.
Плохой вариант получения входных данных непосредственно из модели. Необходимо получить значение $_GET['id'] в контроллере и передать его модели в параметре. Насколько помню, у метода search нет параметров, поэтому я бы написала новый метод, который бы использовался для нужного грида, где в параметре приходит id
Удалить