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'), // фильтр в виде выпадающего списка
            ),
        )

Комментарии

  1. Может вы с таким сталкивались. Есть вьюшка, которая выводит данные из таблицы User. Если применить фильтр, а затем перейти на вторую страницу результата (т.е. когда пользователей соответствующих этому фильтру больше чем 10 например), тогда все фильтры перестают работать. Т.е. если я делаю фильтрацию по имени, что бы мне выводились все пользователи у которых имя начинается на А. Их в базе находится например 100, мне формируется ответ из 10 страничек, перехожу на вторую(тут отображены пользователи с 11 по 20 ), так вот на этой странице если я захочу использовать еще дополнительный фильтр, например по дате, то он уже не сработает

    ОтветитьУдалить
    Ответы
    1. покажите ваш вызов грида, в частности интересуют dataProvider и filter. А также код экшна.

      Удалить
    2. спасибо, я уже разобрался сам http://yiiframework.ru/forum/viewtopic.php?f=3&t=7442

      Удалить
  2. Отлично, то что искал. Спасибо.

    ОтветитьУдалить
  3. Я бы вдул как следует этой программистке

    ОтветитьУдалить
  4. Помимо того что я бы ей вдул, вынужден признать что статья краткая, но полезная. Пасиба=)

    ОтветитьУдалить
  5. Добрый день! Вот такой вопрос. Имеется форма, на ней расположены форма поиска и два грида. Во втором гриде имеется встроенная фильтрация. Проблема в следующем: все выполняется при помощи аякса, при отправке данных с формы все отрабатывает нормально, информация в гридах обновляется, если же фильтрацию провожу во втором гриде, то второй грид перестает отображаться. В чем может быть проблема? Модель используется одна и та же.

    ОтветитьУдалить
    Ответы
    1. Добрый день )
      Первое, что приходит на ум - вы задали одинаковые id обоим гридам и данные уходят на один экшен, после чего второй грид и пропадает.
      Посмотрите http://www.yiiframework.ru/forum/viewtopic.php?f=3&t=5474
      Возможно найдете решение проблемы. Если не найдете, пишите мне через обратную связь, постараюсь помочь ;)

      Удалить
  6. Здравствуйте.
    А не знаете, можно как-то применить предустановленный фильтр? Т.е. мне нужно взять гетом id и вывести данные из таблице только по этому id-шнику.

    ОтветитьУдалить
    Ответы
    1. черт, прошу прощения за ошибки

      Удалить
    2. Это снова я) Нашел решение. Оказывается из модели можно получить переменную гетом. В методе search():

      $criteria->compare('DB_ID', $_GET['id'],true);

      Профит.

      Удалить
    3. Плохой вариант получения входных данных непосредственно из модели. Необходимо получить значение $_GET['id'] в контроллере и передать его модели в параметре. Насколько помню, у метода search нет параметров, поэтому я бы написала новый метод, который бы использовался для нужного грида, где в параметре приходит id

      Удалить

Отправить комментарий

Популярные сообщения