как обратиться к методу виджета ?Добрый

а как изменить в пагинаторе переменную по умолчанию? Т.е. сейчас ссылки в пагинаторе имеют вид ?page=2 … а как изменить например на ?pagenew=2 ?

а то я сейчас делаю через контроллер (и у меня при вызове аяксом CListView происходит что-то странное… пытаюсь листать в одном CListView, а странички отображаются и листаются в соседнем)

такс… поменял так:


$dataProvider = new CActiveDataProvider('Conv', array(

                         ......

                        'pagination' => array(

                                'pageSize' => '1',

								'pageVar'=>'pagerrrrr',

                        ) 

						

                ));

Но оказалось дело не в имени переменной… Кто-нить сталкивался с такой проблемой?

А как изменить дефолтный id и class в отображении пагиинатора?

по дефолту имеют вид: <div class="pager"><ul id="yw3" class="yiiPager">…

как изменить yw3 и yiiPager ?

В настройках CListView указать




  'pager' => array(

     'id' = 'myid',

     'class' = 'myclass'

   )



Решил ради интереса сделать в одном контроллере и отрисовку и обработку ajax (чтобы не было прблем с пагинацией):

контроллер:


public function loadconv2($searchstr) //

	{

		$searchstr="%".$searchstr."%";;

		$dataProvider = new CActiveDataProvider('Conv', array(

                        'criteria' => array(

							'with'=>array(

									'users'=>array(

											'condition'=>'user_id=:userId',

											'order'=>'lastchange DESC',

											'together'=>true,

											'params'=>array(':userId'=>Yii::App()->user->id),

									),

							),


//!!Фильтрую результаты:

							'condition'=>'conv_name like :srch',

							'params'=>array(':srch'=>$searchstr),

						),

                         'pagination' => array(

                                'pageSize' => '1',

                        ) 

                ));

		return $dataProvider;

	}


	public function actionConvList()

	{

		$sstr=$_POST['search_input_field'];

		$dataProviderConv=$this->loadconv2($sstr);

		if (Yii::app()->request->isAjaxRequest){

			$this->renderPartial('//conv/convlist', array(

                'dataProviderConv'=>$dataProviderConv,

				'sstr'=>$sstr,

			));

		}else {

			$this->render('//conv/convlist', array(

					'dataProviderConv'=>$dataProviderConv,

					'sstr'=>$sstr,

				));

		}		

	}

вью convlist:





<?php if (Yii::app()->request->isAjaxRequest): ?>

<div id="data" style='clear:both'>

<?php 

$this->renderPartial('//conv/_ajaxContent', array(

	'dataProviderConv1'=>$dataProviderConv,

	)); 

?>

</div>

<?php else: ?>

<?php 

		echo CHtml::textField(

			'search_input_field',

			'',

			array(

				'id'=>'search_input',

				'class'=>"e",

				 'onkeyup'=>CHtml::ajax(

				array(

						'type'=>'POST',

						'url'=> Yii::app()->createUrl('//conv/convlist'),

						'update'=>'#data',

						'data'=>'js:jQuery(this).serialize()'

					)

				), 

				

			)

		);

		?>


		

<div id="data" style='clear:both;'>

<?php 

 $this->renderPartial('//conv/_ajaxContent', array(

	'dataProviderConv1'=>$dataProviderConv,

	));  

?>

</div>


<?php endif; ?>




вью _ajaxContent




<?php 

 	$this->widget('zii.widgets.CListView', array(

	'dataProvider'=>$dataProviderConv1,

	'itemView'=>'//conv/_convview',

	'enableSorting'=>true,

	'ajaxUpdate' => true,

	'template'=>"{items}\n{pager}", //this remove: Displaying #... of ... result

	'cssFile'=> Yii::app()->theme->baseUrl.'/style.css',

	));  

?>



По идеи пробелмы быть не должно, но наблюдаю следующую картину:

  1. вызываю /conv/convlist

  2. вбиваю в input слово - появляется CListView (с пагинацией на аяксе) с отфильтрованными результатами

  3. пытаюсь перейти на новую страничку - слетает фильтрация

Вообще непонятно пояему внезапно слетает фильтрация (есть предположение, что это баг). Посмотрите, пожалуйста, у кого будет возможность/желание, может что не так делаю?

Скорее всего, чтобы не слетала фильтрация, условие фильтра должно попасть в ссылки для pagination.

Попробуйте данные фильтра отправлять не POST’ом а GET’ом:




echo CHtml::textField(

  'search_input_field',

  '',

  array(

    ...

    'onkeyup'=>CHtml::ajax(

        array(

           'type'=>'GET',

    ...



Кстати, если “<div id=“data” style=‘clear:both;’>” перенести во view _ajaxContent, то можно избавиться от повторной проверки isAjaxRequest и вместо этого делать в контроллере:




if (Yii::app()->request->isAjaxRequest){

    $this->renderPartial('//conv/_ajaxContent', array(

        'dataProviderConv'=>$dataProviderConv,

                'sstr'=>$sstr,

        ));

}else {

        $this->render('//conv/convlist', array(

                        'dataProviderConv'=>$dataProviderConv,

                        'sstr'=>$sstr,

                ));

}      



Спасибо! То что надо!

Странно что GET’ом передаются данные, а POST’ом нет :)

Данные передаются и POST’ом и GET’ом - в первый раз ведь фильтрация срабатывает.

Разница в том, что при передаче GET’ом данные из фильтра попадают в ссылки pagination и после этого pagination одновременно является и фильтром.