Yii CGridView и ajax pagination

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
mutogen
Сообщения: 52
Зарегистрирован: 2013.10.16, 15:39

Yii CGridView и ajax pagination

Сообщение mutogen »

Столкнулся со странной проблемой. Задача такая: нужно внедрить зависимость количества элементов на странице и текущей страницы.

Поясню на примере. Например, человек зашел на грид и смотрит по 20 элементов на странице. Перешел на 2-ую страницу, т.е. перед ним с 21 до 40 элемента.
Далее он решил смотреть по 10 элементов на странице и тут надо не только сменить количество элементов но и изменить текущую открытую страницу, чтобы он продолжал смотреть с того элемента на котором был открыт грид. В данном примере надо сменить страницу на 3-ю, чтобы отображалось с 21 до 30 элемента. И так далее.

Изначально был реализован ajax-грид на базе CGridView, но текущую страницу он не переопределял. Для этой цели в init я добавил код

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

$this->dataProvider->getData();

        $pag = $this->dataProvider->getPagination();
        $updatePageNum = self::$prev_perPage?self::$prev_perPage:0;
        if($updatePageNum){
            $pageNum = $pag->getCurrentPage();

            $seeItem = ($pageNum)*$updatePageNum;

            $page = intval($seeItem/$pag->pageSize);\
            $pag->setCurrentPage($page);
            $this->dataProvider->setPagination($pag);

            self::$prev_perPage = 0;
        }
updatePageNum помогает определить событие смены количества элементов на странице.
Проблема возникает именно со сменой текущей страницы. При этом симптомы такие:
- делаем смену количества элементов на странице в первый раз - все ок, смена происходит, страница меняется на правильную.
- делаем смену назад на предыдущее количество - тут начинаются глюки, новый номер страницы которой стал отображать в конце первого теста игнорируется/не сохраняется. в пагинаторе по прежнему та страница на которой были перед началом всей этой процедуры...

Как быть? Из-за чего так может глючить?
Ответить