CListView + Ajax Pagination Problem

Hallo, ich habe ein Problem mit der Pagination von CListView in meinem Anwendungsfall.

Erstmal zur Struktur:

Ich habe ein kleines Formular in meinem main layout. Dieses Formular lädt per ajax die Suchergebnisse, bzw. das CListView Widget mit den Suchergebnissen.


    

<?php echo CHtml::beginForm(); ?>        

<?php echo CHtml::textField('searchKey'); ?>  

<?php echo CHtml::hiddenField('isAjaxRequest', 'true'); ?>        

<?php echo CHtml::ajaxSubmitButton('Suchen', CHtml::normalizeUrl(array('user/search')), array('update'=>'#searchResult')); ?>         

                      

<div id="searchResult"></div>                       

                                     

<?php echo CHtml::endForm(); ?>



Die dazugehörige action sieht wie folgt aus.




public function actionSearch() {

    $searchKey = $_POST['searchKey'];

    	             

    $criteria = new CDbCriteria;

    $criteria -> together = true;

    $criteria -> with = array('profile');

    $criteria -> condition = 'firstname = :searchKey';

    $criteria -> params = array(':searchKey' => $searchKey);

    $models = User::model()->findAll($criteria);

                                                                                         

    $this->renderPartial('ajaxSearchResult', array('models'=>$models, 'searchKey'=>$searchKey), false, true);

}



Das View ‘ajaxSearchResult’ mit CListView




<div id="ajaxSearchResult">

<?php

$dataProvider = new CArrayDataProvider($models, array('pagination'=>array('pageSize'=>2)));

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

	'dataProvider'=> $dataProvider,

        'itemView'=>'/user/ajaxSearchResultItem',

	)

);

?>

</div>



Die Suche funktioniert soweit und das CListView Widget wird geladen. Wenn ich jetzt auf Seite 2 der Suchergebnisse möchte, kommen keine Ergebnisse, obwohl es noch weitere Ergebnisse gibt. Damit die Suche funktioniert, muss das CListView den Wert aus dem Textfeld per POST mitschicken.

Gibt es eine Möglichkeit das mit CListView zu realisieren ?

Wenn nicht, gibt es einen anderen Weg ?

Danke schonmal für die Hilfe.

Ich vermute da kommt was mit den ids der html-Elemente durcheinander. Beim rendern verpasst Yii jedem aufgerufenen widget eine id in aufsteigender Reihenfolge. Also yw0, yw1, yw2 etc… (im Seitenquelltext sieht man das sehr schön). Wird nun ein widget per ajax nachgeladen, erhält es wieder yw0. Das Problem ist also, dass mehrere html-Elemente dieselbe id besitzen, was wiederum bedeutet, dass die jQuery-Funktionen nicht mehr richtig "gemappt" werden können.

Abhilfe schaff nur jedem widget von Hand eine eindeutige id zu setzen:




<div id="ajaxSearchResult">

<?php

$dataProvider = new CArrayDataProvider($models, array('pagination'=>array('pageSize'=>2)));

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

  'id' =>'irgendwas-eindeutiges',

  'dataProvider'=> $dataProvider,

  'itemView'=>'/user/ajaxSearchResultItem',

));

?>

</div>



Hoffe das hilft :slight_smile:

Hab die ID gesetzt, hilft aber auch nicht.

Wie gesagt, ich vermute, dass es an folgendem liegt:

Wenn ich auf Seite ‘2’ oder auf ‘Nächste Seite’ klicke wird ein neues Request an “user/search” geschickt, allerdings ohne das Suchwort aus meinem Formular. Das müsste irgendwie mitge-post-et werden.

Vielleicht indem man die Pagination-Buttons mit AjaxSubmitButtons ersetzt ? Habt ihr andere Ideen ? Oder vielleicht liegts doch an was ganz anderem ?

Danke für den Versuch dito.