Ошибка В Аяксе Пагинации

всем привет

столкнулся с траблом: когда пагинация формируется на основе 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 варианта, собственно их и проверьте.

  1. Url manager. Уберите все лишнее, посмотрите работает ли.

  2. 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] :D

Можете отблагодарить их плюсиками :)

точно! про плюсики-то я все время забываю!

хе хе :D

плюсики дают рейтинг

а чего дает рейтинг?