Problème de suppression d'items avec linkButton et pager

Bonjour,

je dois faire face à un problème pas agréable dans mon administration: j’utilise un classique dataProvider pour lister mes items


<?php

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

	'dataProvider'=>$datas,

	'itemView'=>'_view',

)); ?>

Chaque item a un lien de suppression


<?php echo CHtml::linkButton(Yii::t('app',"Supprimer"),array(

	   'submit'=>array('projet/delete','id'=>$data->id),

	   'confirm'=>Yii::t('app',"Êtes-vous sur de vouloir supprimer ce projet?"),

	   'class'=>'del'

	)); ?>

Ce lien fonctionne quand on ne change pas de numéro de page. Si on passe en page 2, il supprime l’équivalent de la page 1.

Les boutons "linkButton" génère ce code javascript:

[CODE]jQuery(‘body’).delegate(’#yt0’,‘click’,function(){if(confirm(‘Êtes-vous sur de vouloir supprimer ce projet?’)) {jQuery.yii.submitForm(this,’/Yii/test/admin/projet/delete/id/1’,{});return false;} else return false;});

jQuery(‘body’).delegate(’#yt1’,‘click’,function(){if(confirm(‘Êtes-vous sur de vouloir supprimer ce projet?’)) {jQuery.yii.submitForm(this,’/Yii/test/admin/projet/delete/id/2’,{});return false;} else return false;});

etc[/CODE]

Simplement, les boutons générés en ajax sur la page 2 ont le même code source que les boutons de la page 1

&lt;a class=&quot;del&quot; href=&quot;#&quot; id=&quot;yt1&quot;&gt;Supprimer&lt;/a&gt;

Donc quand on clique sur le bouton de l’item 21, ça supprime le 1.

Emmerdant…

Avec ça:

[PHP]<?php echo CHtml::linkButton(Yii::t(‘app’,“Supprimer”),array(

   'submit'=&gt;array('projet/delete','id'=&gt;&#036;data-&gt;id),


   'confirm'=&gt;Yii::t('app',&quot;Êtes-vous sur de vouloir supprimer ce projet?&quot;),


   'class'=&gt;'del',


   'id' =&gt; 'item_'.&#036;data-&gt;id


)); ?&gt;[/PHP]

J’obtiens:

[CODE]jQuery(‘body’).delegate(’#item_1’,‘click’,function(){if(confirm(‘Êtes-vous sur de vouloir supprimer ce projet?’)) {jQuery.yii.submitForm(this,’/Yii/test/admin/projet/delete/id/1’,{});return false;} else return false;});

jQuery(‘body’).delegate(’#item_2’,‘click’,function(){if(confirm(‘Êtes-vous sur de vouloir supprimer ce projet?’)) {jQuery.yii.submitForm(this,’/Yii/test/admin/projet/delete/id/2’,{});return false;} else return false;});

});[/CODE]

&lt;a class=&quot;del&quot; href=&quot;#&quot; id=&quot;item_10&quot;&gt;Supprimer&lt;/a&gt;

Bingo? Non, le code javascript ci-dessus n’est généré que pour les items de la première page, les autres se chargeant en ajax.

Comment faites-vous pour utiliser un bouton delete dans vos admin? avec un système de pagination, sans utiliser CGridView (l’utilisation en tableau ne me convient pas).

Merci d’avance, parce que j’ai beau chercher, je ne trouve pas de solutions. Mon problème n’a pas l’air d’être évoqué sur le forum anglais…

Bon, j’ai finalement résolu mon problème en n’utilisant pas la fonction linkButton. Je mets plus bas la démarche.

Pour chaque ligne j’ai choisi le classique lien:


<?php echo CHtml::link(Yii::t('app',"Supprimer"),array('projet/delete','id'=>$data->id),array('class'=>'del')); ?>

Un le code jQuery pour faire la requête en ajax:


<script type="text/javascript">

/*<![CDATA[*/

jQuery(function($) {

jQuery('div.view a.del').live('click',function() {

	if(!confirm('Voulez-vous vraiment supprimer cet élément?')) return false;

	var div = $(this).parents('div.view');


	$.ajax({

		type:'POST',

		url:$(this).attr('href'),

		dataType: 'json',

		success:function(msg) {

			$(div).html('<p>'+msg.message+'</p>');

		}

	});

	return false;

});

});

/*]]>*/


</script>

Et la méthode actionDelete de ProjetController :




public function actionDelete()

	{

		$model = $this->loadModel();

		if(Yii::app()->request->isPostRequest)

		{

			if($model->delete()) {

				Yii::app()->user->setFlash('valide',Yii::t('admin',"Le modèle a été supprimé."));

			} else {

				Yii::app()->user->setFlash('erreur',Yii::t('admin',"Erreur: le modèele n'a pas pu être supprimé"));

			}




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

            {

                echo CJSON::encode(array(

                    'status'=>'success', 

                    'message'=> $model->titre." supprimé avec succès."

                    ));

                exit;               

            }

            else

            	$this->redirect(array('index'));


		}

		else {

			throw new CHttpException(400,

					Yii::t('app', 'Invalid request. Please do not repeat this request again.'));

		}		

					

	}



Merci! Cela m’a été utile.