2010-07-27 1 views
0

Я создал страницу подтверждения для удаления элемента. Это прекрасно работает.Диалог подтверждения fancybox Zend Framework с ajax и опубликованными значениями

Теперь я хочу показать страницу подтверждения в fancybox, передавая все переменные и удаляя данные или закрывая диалог.

Важно, чтобы процесс выполнялся так же, как сейчас (delete-> confirmpage-> redirect/deletion), чтобы пользователи с отключенным javascript могли выполнять эти действия без проблем.

Теперь я читал о структуре zend, ajax, json и многом другом, но чем больше я читал, тем меньше я понимаю.

Таким образом, в двух словах, мой вопрос:

Я хочу передать переменную в FancyBox, и если «да», выполнять операции удаления или «нет» закрыть диалоговое окно. Это в рамках zend и jquery.

Любые советы или советы приветствуются!

+0

Я решил проблему, открыв страницу подтверждения в iframe. К несчастью, у меня нет времени, чтобы в этот момент посмотреть больше, поэтому я вернусь! –

ответ

0

Наткнулся вопрос сегодня, и полагал, что я мог бы дать ей свежий вид. Для Zend Framework решение очень просто:

Это как действие выглядит:

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

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

И это, как ссылка на удаление файл выглядит (в пределах цикла foreach с результатами моей базы данных)

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

Это работает так, как вы ожидали; когда вы нажимаете кнопку «Удалить», пользователь переходит на страницу подтверждения удаления и перенаправляет пользователя обратно в индекс после отправки формы. Но мне нужно подтверждение в диалоговом окне (в моем случае я использую fancybox). Для этого добавьте следующий индекс jQuery к вашему индексу:

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

Вы должны использовать переключение контента в вашем AJAX, который будет оказывать свое действие надлежащим образом, например:

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 
} 

И в вашем FancyBox, есть мнение, что имеет форму и две кнопки, форма должна укажите на свое действие удаления с идентификатором того, что вы удаляете в качестве параметра get. Установите некоторый яваскрипт вверх, что говорит что-то вроде (и это MooTools код, но вы можете преобразовать его легко):

$('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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^