Фильтрация и пагинация при выборке

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
Alex_76
Сообщения: 2
Зарегистрирован: 2013.06.16, 20:58

Фильтрация и пагинация при выборке

Сообщение Alex_76 »

Привет всем!
Подскажите, пожалуйста.
Есть форма фильтрации, где пользователь выберает нужные ему критерии и нажимает поиск.
Данные выбираются из многих таблиц связанных между собой.
С помощью CDbCriteria формируется запрос из множеством условий, к примеру:

Код: Выделить всё

$criteria = new CDbCriteria;
            // Загружаем связанные модели
            $criteria->with = array(
                'house_relation',
                'sanitare_relation',
                'street_relation',
                'region_relation',
                'district_relation',
                'underground_relation',
                'type_house_relation',
                'type_area_relation',
                'plan_relation',
            );



$cond = ' ';
$cond .= " AND t.price_of_m2 BETWEEN ".$min_price." AND ".$max_price."";
$cond .= " AND t.flour IN (".$list_rooms.")";
и т.д.
 
и все это затем передается:

Код: Выделить всё


$criteria->condition = $cond;
$model = new CActiveDataProvider('Apartament',array(
                'criteria'=>$criteria,
                'pagination' => array(
                    'pageSize'=>3,
                ),

 
После этого у представлении используем

Код: Выделить всё

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$model,
    'itemView'=>'_view',
    'emptyText'=>'Результат не найден. Измените критерий поиска.',
    'sortableAttributes'=>array('id','t.price_of_m2'),
));
 
Проблема состоит в том, что когда появляется пагинация (пейджер) при большом количестве записей (в нашем варианте > 3) и когда нажимаешь на кнопку чтобы перейти на другую страницу вывода, настройки фильтра сбрасуются и отображаются все записи без учета фильтрации (условий).
В чем проблема? Как сделать так что при пролистывании со страницы на страницу фильтры (условия выборки) не сбрасивались.
Что интиресно, что когда сразу открывается страница пейджер отображает правильное количество страниц, а вот при начале пролистывания - все сбрасывается!
Спасибо за любой совет!!!
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: Фильтрация и пагинация при выборке

Сообщение Neuromance »

Насколько я понимаю, форма с гридом никак не связаны. Поэтому при переходе по страницам пагинации данные из формы никуда не передаются.

Здесь можно придумать небольшую хитрость. В контроллере написать следующее

Код: Выделить всё

$attrs = $model->attributes;
$pagination = array('pageSize'=>$pageSize,'params'=>$attrs);
$dataProvider->setPagination($pagination);
Естественно этот код надо писать после получения данных из формы из post-запроса.
Это приведёт к тому, что при генерации ссылок в пагинации post-параметры из формы будут передаваться в виде get-параметров в ссылки пагинации.
Ответить