Zend Framework - использование диалогового окна jquery для всплывающей формы в контроллере Zend / action - PullRequest
1 голос
/ 06 февраля 2011

Я редактирую, чтобы попытаться поставить свой основной вопрос в начале этого поста: 1) Я сижу на странице обновления моих клиентов / предпочтений в форме 2) Я хочу добавить виджет в свой список доступных виджетов, поэтому мне нужно открыть страницу / форму виджетов / addWidget, чтобы добавить новый виджет (обратите внимание, что я все еще работаю на своей странице / форме текущих клиентов / предпочтений, поэтому я нужно продолжить с этой страницы после добавления нового виджета в страницу / форму widgets / addWidget. 3) Я выбираю ссылку, чтобы перейти на widgets / addWidget, и у меня есть диалоговое окно jQuery, открывающее эту ссылку в диалоге с формой addWidget и кнопкой отправки 4) после добавления newWidget во всплывающую форму диалога я хочу отправить newWidget (код для addWidget находится в контроллере / действии widgets / addWidget, а не в действии клиентов / предпочтений)

Проблема: действие формы addWidget переходит к widgets / addWidget, поэтому, когда я отправляю форму addWidget в диалоговом окне, она забирает меня со страницы моих текущих клиентов / предпочтений

Вопрос 1) Как правильно / лучше всего использовать данный сценарий для вызова формы в другом контроллере / действии, чтобы отправить эту форму, но затем возобновить мой текущий контроллер / действие? Вопрос 2) я должен переместить всю свою форму и код из действия контроллера widgets / addWidget в мои существующие действия клиентов / предпочтений? (это кажется неправильным подходом)

Я исследовал документацию jQuery, документацию Zend и искал другие потоки с помощью надежного Google и stackoverflow, но я все еще пытаюсь найти правильный способ заставить его работать с Zend Framework и всплывающими формами, такими как диалог jQuery.

У меня есть работающий Zend action / контроллер, который использует Zend Form и view для отображения и обработки моей формы. Я также смог использовать диалоговое окно jQuery для всплывающего окна, когда я щелкаю ссылку на этот контроллер / действие.

Моя проблема связана с правильным способом заставить диалоговое окно отображать форму и при этом иметь возможность отправлять и обрабатывать страницу. Если я загружаю только тег #content в диалоговом окне, в диалоговом окне появляются кнопка формы и отправки, но кнопка отправки больше не работает. Если я позволю диалоговому окну открыть полную страницу (не только #content), то теперь форма будет обрабатываться правильно, но отправка формы настроена для перехода на мою страницу действий для обработки, поэтому форма отправляется и забирает меня с исходной страницы. и вместо реального контроллера / страницы действий.

В моем customerController у меня есть действие action, где клиент может выбрать виджет из списка виджетов. Когда клиенту нужно добавить новый виджет в список, я хочу открыть addWidgetAction из WidgetsController во всплывающей форме. Я хочу добавить виджет во всплывающую форму, отправить форму в addWidgetAction и вернуться на страницу клиентов / предпочтений, на которой я уже работал (с новым добавленным виджетом, доступным в моем списке для выбора).

//CustomerController
public function preferencesAction(){
  //this is where I click a link to /widgets/addWidget and use jQuery dialog for form
}

//Customer preferences.phtml
<script>
$(document).ready(function() {
$('#add-link').each(function() {
    var $link = $(this);
    var $dialog = $('<div></div>')
            .load($link.attr('href'))
            .dialog({
                autoOpen: false,
                title: $link.attr('title'),
                width: 600,
                height: 500,
                buttons: {
                    "Add Widget": function(){
                        $("#AddWidget").submit();
                    },
                    "Cancel": function(){
                        $(this).dialog("close");
                    }
                }
            });

    $link.click(function() {
        $dialog.dialog('open');
        return false;
    });
});
});
</script>

<a id="add-link" href='<?php echo $this->url(array('controller' => 'widgets',
        'action' => 'addwidget')); ?>'>Add a Widget...</a>


//WidgetsController
public function addWidgetAction(){
  // display form to add widget
  // process form, validate, add to widgets table
  $baseUrl = $this->getRequest()->getBasePath();
  $action = $baseUrl . '/widgets/addWidget';

  $form = new Form_Widget();
  $form->setName('Add Widge')
                ->setAction($action);

}

Мне нужно понять, как получить диалоговое окно для загрузки моей страницы действий Zend для обработки формы, но не требуется весь макет с верхним, нижним и нижним колонтитулом и т. Д. Мне также нужно понять, как обрабатывать форму во всплывающем окне диалога без отходя от моей исходной страницы, с которой было связано всплывающее окно.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 06 февраля 2011

Ну, я не уверен, что понимаю ваш вопрос, но вы можете попробовать это

Вы можете загрузить свою форму в диалоговом окне UI, чтобы отключить макет, сделайте это, вы можете сделать это

public function addwidgetAction(){
       $this->_helper->layout()->disableLayout();
       //just diable layout and do eveything normal        
}

в вашем файле предпочтений.phtml загрузить содержимое URL baseurl/contrller/addwidget в модальное диалоговое окно jquery

ОБНОВЛЕНИЕ

  1. Один из способов:используйте jqueryplugin fancybox (external src), проверьте забытый пароль ссылка

  2. Другой способ - использовать ajax

ОБНОВЛЕНИЕ

Хорошо, теперь я хорошо прочитал ваш вопрос, хотя и не так ясно понимаю, я понимаю, что вы пытаетесь сделать что-то довольно амбициозное.И вы не можете добиться с помощью обычного метода загрузки.Вам нужно использовать ajax

Я должен признать, что мне не нравится модальное диалоговое окно jquery ui, поэтому я не очень разбираюсь в этом, и я обычно использую причудливую коробку jquery, где она дает мне возможностьзагрузить внешнюю страницу.Может быть, вы можете сделать это через модальное диалоговое окно jquery ui.

Я думаю, проблема, с которой вы сталкиваетесь сейчас, заключается в том, что вы открываете диалоговое окно, получаете форму в диалоговом окне и отправляете форму, она отправляетобычный пост-запрос, поэтому диалог перезагружается, вот что происходит в приведенной выше ссылке, просто нажмите на забытый пароль ссылка

Ну, для этого тоже есть решение, решение ajax,и я надеюсь, что вы хорошо знакомы с этим.вы отправляете ajax-запрос и получаете ответ обратно, и, в зависимости от вашего ответа, вы можете выйти из диалогового окна, а также обновить родительский (страница контроллера предпочтений), но это вполне ..... Я пытался сделать то же самое с несколькими месяцами назад,но не с zf, я не знаю, как много я сделал, но это наверняка вызвало у меня неприятную головную боль

...