Yii Framework Forum: Problème de suppression d'items avec linkButton et pager - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problème de suppression d'items avec linkButton et pager Rate Topic: -----

#1 User is offline   Clem 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 30
  • Joined: 15-November 10

Posted 21 March 2011 - 03:27 AM

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:

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


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
<a class="del" href="#" id="yt1">Supprimer</a>


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

Avec ça:
<?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',
	   'id' => 'item_'.$data->id
	)); ?>


J'obtiens:

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;});
});

<a class="del" href="#" id="item_10">Supprimer</a>


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...
0

#2 User is offline   Clem 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 30
  • Joined: 15-November 10

Posted 04 April 2011 - 12:36 PM

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.'));
		}		
					
	}

1

#3 User is offline   Mohamed Y. 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 01-January 11

Posted 13 July 2011 - 05:43 AM

Merci! Cela m'a été utile.

View PostClem, on 04 April 2011 - 12:36 PM, said:

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.'));
		}		
					
	}


0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users