2011-02-06 26 views
1

我正在編輯嘗試將我的主要問題放在此帖的開頭: 1)我坐在我的客戶/喜好頁面更新信息形式 2)我想添加一個小部件到我的可用小部件列表中,所以我需要打開小部件/ addWidget頁面/表單來添加一個新小部件(注意我仍在我當前的客戶/偏好頁面/表單中工作,所以我需要在widgets/addWidget頁面/表單中添加一個新的widget後繼續這個頁面。 3)我選擇一個鏈接去widgets/addWidget,並且我有jQuery對話框,在對話框中打開這個鏈接。 addWidget表單並提交按鈕 4)在對話框彈出窗體中添加newWidget後,我想提交newWidget(addWidget的代碼位於w idgets/addWidget控制器/操作,不在客戶/優先選擇操作中)Zend Framework - 在Zend控制器/動作中使用jquery對話框彈出窗體

問題:addWidget表單操作轉到widgets/addWidget,因此當我在對話框中提交addWidget表單時,它將我帶離當前客戶/首選項頁面

問題1)什麼是賦予這種情況下彈出一個形式,另一個控制器/動作提交該表格的正確/最佳途徑,但隨後恢復我的電流控制器/行動? 問題2)我是否應該將所有窗體和代碼從窗口小部件/ addWidget控制器操作移動到我的現有客戶/首選項操作中? (這似乎是錯誤的方法)

我已經研究了jQuery文檔,Zend文檔,並用trusty Google和stackoverflow搜索了其他線程,但我仍然在努力找出正確的方式來使它與Zend一起工作框架和彈出窗體,如jQuery對話框。

我有一個工作Zend動作/控制器,使用Zend窗體和視圖來顯示和處理我的表單。我也一直能夠使用jQuery的對話框彈出一個窗口,當我點擊鏈接到控制器/動作。

我的問題是以正確的方式讓對話框顯示錶單並仍然能夠提交和處理頁面。如果我只在對話框中加載#content標籤,表單和提交按鈕出現在對話框中,但提交按鈕不再起作用。如果我讓對話框打開完整的頁面(不只是#內容)現在的形式將正確處理,但表單提交設置到我的處理動作的頁面,這樣的形式提交,並帶我離開原來的頁面而是轉向真正的控制器/操作頁面。

在我customerController我有一個preferencesAction一個顧客可以選擇從窗口小部件列表的小部件。當客戶需要將新小部件添加到列表中時,我想以彈出窗體的形式從WidgetsController打開addWidgetAction。我想在彈出窗體中添加窗口小部件,將窗體提交給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的操作頁面,但不要求使用頁眉,頁腳,等整個佈局我還需要了解如何處理形式對話框彈出而不會離開我的原始頁面,在那裏彈出連接。

謝謝您的協助!

+0

你能否請澄清你的問題....確切地告訴你要什麼 – 2011-02-06 05:12:05

+0

以及看到更新 – 2011-02-06 07:43:29

回答

0

好了,我不知道如果我理解你的問題,但你可以試試這個

您可以加載形式UI對話框,以禁用佈局做到這一點上,你可以做到這一點

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

您preferences.phtml文件加載URL baseurl/contrller/addwidget的內容,jQuery模態窗口

UPDATE

  1. 的一種方法是使用一個jqueryplugin的fancybox(外部SRC)檢查忘記密碼link

  2. 另一種方法是使用AJAX

UPDATE

現在好了我仔細閱讀你的問題,儘管不太清楚,但我知道你正在嘗試做一些非常有抱負的事情。而且你無法通過正常的加載方法來實現。你需要使用ajax

我不得不承認,我不喜歡jquery ui模式對話框,所以我不太瞭解它,而且我通常使用jquery fancy box,它會給我一個加載外部的能力頁。也許你可以通過jquery ui模式對話框來做到這一點。

我想你現在面臨的問題是你打開一個對話框,你在對話框中獲得表單,然後你提交表單,它發送正常的發佈請求,所以對話框被重新加載,這就是發生了什麼我有上面的鏈接,只需點擊忘記密碼link

那麼也有解決方案,解決方案是ajax,我希望你對它很熟悉。你發送ajax請求並得到響應,根據你的響應,你可以退出對話框以及更新父母(首選項控制器頁面),但這是相當.....我幾個月前試圖這麼相同,但不與zf,我不知道我做了多少,但它確實給了我一個令人討厭的頭痛

相關問題