всем привет
столкнулся с траблом: когда пагинация формируется на основе CActiveDataProvider то кнопки навигации работают через аякс…
если иначе - без аякса
где рыть решение проблемы?
всем привет
столкнулся с траблом: когда пагинация формируется на основе CActiveDataProvider то кнопки навигации работают через аякс…
если иначе - без аякса
где рыть решение проблемы?
Выложите код cgridview с пагинацией и контроллер.
вот провайдер из контроллера =
$dataProvider=new CArrayDataProvider($this->data_provider, array(
'keyField'=>'id_page',
'totalItemCount'=>count($this->data_provider),
'pagination'=>array(
'pageSize'=>2,
),
));
вот код CListView =
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'summaryText'=>'',
'emptyText' => '',
'itemView'=>$viewer,
));
что-то еще?
p.s. пагинация работает нормально если генеришь контроллер с помощью gii на основе модели, если собираю вручную не пашет - что-то видимо забываю (или не знаю)
Я просто не совсем понимаю в чем загвоздка)
Попробуйте обьявить объект CPagination отдельно.
Что именно происходит при нажатии на ссылку пагинации (должен быть get запрос аяксом)?
Не грузите ли вы часом скрипты несколько раз? Например 1 раз срабатывает и ломается, проверьте это.
Какую версию фреймворка используете? Раньше был баг с пагинацией для CArrayDataProvider с указанным keyfield.
фреймворк 1.14
а не может быть проблем из-за правил для УРЛ?
Может если у вас переписываются get параметры. Но тогда скорее всего должна быть ошибка какая то.
попробуй так
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'summaryText'=>'',
'emptyText' => '',
'itemView'=>$viewer,
'ajaxUpdate'=>false,
));
попробовал - так открылась страница с УРЛ в котором был ключ page…
естественно была ошибка, так как такой ключ воспринялся как подраздел
вот на что обратил внимание =
в контроллере на основе модели, ссылки пагинации имеют такой вид =
…articles.html?Articles_page=3&ajax=yw0
то есть ключ page почему-то Articles_page и есть ключ ajax
а в самопальном контроллере - нету ключа ajax и page так и есть page
и при клике по ссылке в пагинации получаю всплывающее окно с таким текстом =
Error 404: Array
(
[ajax] => yw0
[page] => 3
[sect] => character
)
Я тогда чего то не пойму если вам надо избавиться от аякса то то что я написал вполне подходит но действительно придётся в контролере сделать правки но если не так то тогда как вам надо?
не-не-не… мне не надо избавиться от аякса… мне надо, чтобы заработала пагинация
просто я не пойму - почему у меня в самопальном контроллере не работает пагинация
и в качестве примера привел пагинацию контроллера сгенерированного в ГИИ - там одним из параметров запроса является ajax=yw0
для аякс запросов это нормально просто не понятно почему у вас сам запрос не выполняется
закинь сюда контроллер вьюху и чпу
Прикрепил
Проверил у себя, все замечательно работает. Значит вы где то в контроллере перемудрили.
Проблема не в cdetailview, пагинации или carraydataprovider.
Осталось 2 варианта, собственно их и проверьте.
Url manager. Уберите все лишнее, посмотрите работает ли.
Controller - уберите все оттуда, сделайте обычный action и посмотрите работает ли.
Для этих дел кстати есть gist. Удобнее намного чем качать zip)
нашёл ошибку
здесь вы перемудрили
$this->arr = $this->actionParams;
$this->keys = implode('', array_keys($this->arr));
при простом запросе всё будет ок но как только начинает работать пагинация начинаются траблы
при простом запросе у меня $this->keys был равен sect
а с пагинацией $this->keys был равен ajaxpagesect
для того чтоб всё заработало мне пришлось изменить условие на такого рода
if($keys == ‘sect’ || $keys == ‘ajaxpagesect’ || $keys == ‘ajaxsect’){
для того чтоб всё заработало изменитье условие на такие
if(isset($this->actionParams['sect'], $this->actionParams['subsect'], $this->actionParams['art'])){
$this->keys = "sectsubsectart";
...
}elseif(isset($this->actionParams['sect'], $this->actionParams['subsect'])){
$this->keys = "sectsubsect";
...
}elseif(isset($this->actionParams['sect'])){
$this->keys = "sect";
...
}else{
throw new CHttpException('404');
}
[color="#FF0000"]РЕСПЕКТИЩЕ![/color]
все заработало!
но я решил использовать такой подход =
if(
!empty($this->arr['sect']) AND
empty($this->arr['subsect']) AND
empty($this->arr['art'])
)
фигово, конечно, при каждом запросе вычислять по 3 функции, но с учетом возможного кеширования страницы целиком = это не критично
p.s. со временем что-нить придумаю по оптимальнее!
[color="#0000FF"]СПАСИБО ПАРНИ! вы просто монстры какие-то…[/color]
Можете отблагодарить их плюсиками
точно! про плюсики-то я все время забываю!
хе хе
плюсики дают рейтинг
а чего дает рейтинг?