2010-07-27 8 views
0

J'ai créé une page de confirmation pour la suppression d'un élément. Cela fonctionne parfaitement.Boîte de dialogue de confirmation Zend Framework fancybox avec ajax et valeurs affichées

Maintenant, je veux apparaître la page de confirmation dans fancybox, en passant toujours toutes les variables et supprimer les données ou fermer la boîte de dialogue.

Il est important que le processus fonctionne toujours comme il le fait maintenant (delete-> confirmationpage-> redirection/suppression) afin que les utilisateurs avec javascript disabled puissent effectuer ces actions sans problème.

Maintenant j'ai lu sur zend framework, ajax, json et plus, mais plus je lis, moins je comprends.

Donc, en résumé, ma question:

Je veux passer une variable à la fancybox et si oui exécuter l'action de suppression ou « non » fermer la boîte de dialogue. Cela dans le cadre de zend et jquery.

Des conseils ou des astuces sont grandement appréciés!

+0

J'ai résolu le problème en ouvrant la page de confirmation dans une iframe. Malheureusement, je n'ai pas le temps d'en savoir plus pour le moment, alors je serai de retour! –

Répondre

0

suis tombé sur le question aujourd'hui et je pourrais figurés lui donner un nouveau regard. Zend Framework la solution est très simple:

Voici comment l'action ressemble:

public function deleteAction() 
    { 
     $this->_helper->layout()->disableLayout(); 

     $this->view->news = $this->newsService->GetNews($this->_getParam('id')); 

     if($this->getRequest()->isPost()) 
     { 
      if($this->getRequest()->getPost('delete') == 'Yes') 
      { 
       $this->newsService->DeleteNews($this->_getParam('id'), $this->view->user->username, $this->view->translate('deleted: ').'<strong>'.$this->view->pages[0]['title'].'</strong>'); 
       $this->_helper->flashMessenger(array('message' => $this->view->translate('The page is deleted'), 'status' => 'success')); 
       $this->_helper->redirectToIndex(); 
      } 
      elseif($this->getRequest()->getPost('delete') == 'No') 
      { 
       $this->_helper->flashMessenger(array('message' => $this->view->translate('The page is <u>not</u> deleted'), 'status' => 'notice')); 
       $this->_helper->redirectToIndex(); 
      } 
     } 
    } 

Le supprimer.phtml

<div> 
<h2><?php echo $this->translate('Delete news'); ?></h2> 
<?php 
foreach($this->news as $news) 
{ 
?> 
<p> 
    <?php echo $this->translate('You are now deleting <strong>\'').$news['title'].$this->translate('\'</strong>. Are you sure about this?'); ?> 
</p> 
<p> 
    <?php echo $this->translate('<strong>Note! </strong>This action is inreversable, even for us!'); ?> 
</p> 
<form action="<?php echo $this->baseUrl(false).'/news/index/delete/'.$news['id']; ?>" method="post"> 
<?php 
} 
?> 
    <input class="submit deleteYes" type="submit" name="delete" value="<?php echo $this->translate('Yes'); ?>" /> 
    <input class="submit deleteNo" type="submit" name="delete" value="<?php echo $this->translate('No'); ?>" /> 
</form> 

Et voici comment le lien pour supprimer un fichier ressemble (dans une boucle foreach avec mes résultats de base de données)

<a class="deleteConfirmation" href="<?php echo $this->baseUrl(false).'/news/index/delete/'.$news->id; ?>">delete</a> 

Cela fonctionne comme vous pouvez vous y attendre; Lorsque vous cliquez sur Supprimer, l'utilisateur accède à la page de confirmation de la suppression et redirige l'utilisateur vers l'index une fois le formulaire envoyé. Mais je voulais la confirmation dans un dialogue (dans mon cas j'utilise fancybox). Pour ce faire, ajoutez la jquery suivante à votre index:

$('.deleteConfirmation').fancybox({ 
      // Normal fancybox parameters 
      ajax : { 
       type : "POST" 
      } 
     }); 
1

Vous devez utiliser le changement de contenu dans votre ajax qui sera ensuite rendre votre action appropriée, par exemple:

function confirmDeleteAction() { 
    if($this->_request->isXmlHttpRequest()) { 
    //This is ajax so we want to disable the layout 
    $this->_helper->layout->disableLayout(); 
    //Think about whether you want to use a different view here using: viewRenderer('yourview') 
    } 
    //The normal code can go here 
} 

function deleteAction() { 
    //You probably don't want to show anything here, just do the delete logic and redirect therefore you don't need to worry where it's coming from 
} 

Et dans votre fancybox, une vue qui a une forme et deux boutons, le formulaire doit pointez sur votre action de suppression avec l'identifiant de votre suppression en tant que paramètre get. Définir javascript up qui dit quelque chose comme (et ce code est Mootools, mais vous pouvez le convertir facilement):

$('confirmButton').addEvent('click', function(e) { 
    e.preventDefault(); 
    this.getParent('form').submit(); 
} 
$('cancelButton').addEvent('click', function(e) { 
    e.preventDefault(); 
    $('fancyBox').destroy(); //I'm not sure it has an id of fancyBox, never used it 
}