Zend Framework диалоговое окно подтверждения fancybox с ajax и опубликованными значениями - PullRequest
0 голосов
/ 27 июля 2010

Я создал страницу подтверждения для удаления элемента. Это отлично работает.

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

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

Теперь я читал о Zend Framework, AJAX, JSON и многом другом, но чем больше я читаю, тем меньше я понимаю.

Итак, в двух словах, мой вопрос:

Я хочу передать переменную в fancybox и, если «да» выполнить действие удаления или «нет», закрыть диалоговое окно. Это в рамках Zend и JQuery.

Любой совет или советы с благодарностью!

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Вам необходимо использовать переключение контента в вашем 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. Установите некоторый javascript, который говорит что-то вроде (и это код 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
}
0 голосов
/ 13 декабря 2010

Сегодня натолкнулся на вопрос и решил, что смогу взглянуть на него по-новому.Для 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"
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...