linkButton w ClistView nie działa prawidłowo

Witam,

Używam CListView do wyświetlania komentarzy do zatwierdzenia. Za pomocą linkButton’ów chciałem zatwierdzać lub odrzucać komentarze. Wszystko działa dobrze na pierwszej stronie CListView. Po przejściu na 2 stronę, aktualizuje się treść ClistView, ale nie aktualizują się linki linkButton’ów (są takie same jak były na pierwszej stronie). Może ktoś wie jak rozwiązać ten problem?

Z góry dziękuję za pomoc

Witaj,

Gdybys podal fragment kodu z ktorym masz problem to byloby latwiej cos poradzic :)

Przepraszam ;), już podaję kod




<p>Komentarze do zatwierdzenia:

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

	'dataProvider'=>$dataProvider,

	'itemView'=>'application.modules.admin.views.komentarze._view'

));



_view.php


<b>Artykuł:</b>

	<?php echo CHtml::encode($data->artykuly->tytulnr); ?>

	<br />


	<b><?php echo CHtml::encode($data->getAttributeLabel('status')); ?>:</b>

	

        <?php [b]echo CHtml::linkButton('Zatwierdź', array(

				'submit'=>array('komentarze/approve','id'=>$data->id),

			));[/b] ?>

Problem leży chyba w komponencie CListView a dokładnie w paginacji CListView, bo przejście na 2 stronę komentarzy powoduje dynamiczne i poprawne załadowanie treści dla poszczególnych komentarzy, ale ulr’e do linkButtonów się nie zmieniają bo są zapisane na stałe w JavaScripcie.

Nie wiem czy można to jakoś prosto obejść.

Byc moze w tym komponencie takich linkow nie da sie w taki sposob umiescic. Podobny problem wystepuje w CGridView ale da sie to zrobic. Sprawdze wieczorem w czym problem bo teraz nie pamietam jak to rozwiazalem w CGridView a dostepu do tego kodu teraz nie mam.

Rozwiazalem to w ten sposob ze w widoku mam zmienna i tworze url np:

$link_url = $this->createUrl(…);

a potem odwoluje sie do tej zmiennej w twoim przypadku byloby:

CHtml::linkButton(‘Zatwierdź’, array(‘submit’=>$link_url));

U siebie nie tworze linkButton tylko zwykly link ale mysle ze to rozwiazanie moze pomoc.

Niestety, też nie działa. LinkButton wstawia fragment Javascriptu:


$('body').on('click','#yt0',function(){jQuery.yii.submitForm(this,'/komentarze/approve/id/46',{});return false;});

Paginacja CListView nie potrafi tego zmienić, zmienia tylko treśc poszczególnych wpisów.

Sprawę załatwiłem tak:




echo CHtml::link('Zatwierdź',

        Yii::app()->createUrl('#'), array(

                'onclick' => 'jQuery.yii.submitForm(this,"'.Yii::app()->createUrl('komentarze/approve',array('id'=>$data->id)).'",{});return false;' ,

        )

) ?>

Nie jest to zbyt eleganckie, ale działa ;)

Zrobilem dzisiaj test i niestety musze sie z Toba zgodzic - nie dziala i wyglada na to ze jest to niedorobka komponentu CListView :(

Zdaje sie, ze planowali to poprawic w wersji 1.1.10 (https://github.com/yiisoft/yii/issues/148) ale nie poprawili.