2011-02-06 23 views
1

私の最初の質問は、この投稿の冒頭に置いてください: 1)私は自分の顧客/環境設定ページで情報を更新していますフォーム 2)利用可能なウィジェットのリストにウィジェットを追加したいので、新しいウィジェットを追加するためにwidgets/addWidgetページ/フォームを開く必要があります(私は現在の顧客/設定ページ/フォームで作業中ですウィジェット/ addWidgetページ/フォームに新しいウィジェットを追加した後、このページを続行する必要があります。 3)ウィジェット/ addWidgetに行くリンクを選択し、jQueryダイアログでこのリンクをaddWidgetフォームとsubmitボタン 4)ダイアログポップアップフォームでnewWidgetを追加した後、newWidgetを送信したい(addWidgetのコードはw idgets/addWidgetコントローラ/アクション、customers/preferencesアクションではありません)Zend Framework - Zendコントローラ/アクションのポップアップフォームにjqueryダイアログを使用する

問題:addWidgetフォームアクションがwidgets/addWidgetに移動するので、ダイアログボックスでaddWidgetフォームを送信すると、現在の顧客から私が離れます/ preferencesページ

質問1)他のコントローラ/アクションでフォームをポップアップしてフォームを送信し、現在のコントローラ/アクションを再開するには、このシナリオで与えられた適切な/最良の方法は何ですか? 質問2)私のフォームとコードをすべてwidgets/addWidgetコントローラアクションから既存の顧客/設定アクションに移動する必要がありますか?

私はjQueryのドキュメント、Zendドキュメントを調べて、信頼できるGoogleとstackoverflowで他のスレッドを検索しましたが、私はまだこれをZendと連携させる正しい方法を見つけ出すのに苦労しています。フレームワークとjQueryダイアログなどのポップアップフォーム

Zendフォームとビューを使用してフォームを表示および処理するZendアクション/コントローラがあります。私はまた、そのコントローラ/アクションへのリンクをクリックするとjQueryダイアログを使用してウィンドウをポップアップすることもできました。

私の問題は、ダイアログをフォームを表示しても、ページを送信して処理できる適切な方法です。ダイアログで#contentタグだけを読み込むと、フォームと送信ボタンがダイアログボックスに表示されますが、送信ボタンは機能しなくなります。私がダイアログボックスに(#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

あなたが質問を明確にしてください....あなたが望むものを正確に教えてください –

+0

よく見る更新 –

+0

よく怒らないでくださいしかし、私は提案を持っています –

答えて

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. 一つの方法は、link

  2. 他の方法は

UPDATE

まあ今AJAXを使用することです忘れてしまったパスワードを確認jquerypluginのfancybox(外部SRC)を使用しているIあなたの質問をよく読んでください。あまり明確に理解できませんが、私はあなたが非常に野心的なことをしようとしていることを理解しています。通常のロード方法では達成できません。あなたはajaxを使用する必要があります

jquery uiモーダルダイアログが気に入らないので、私はそれについてよく知らないので、私は通常jqueryファンシーボックスを使用して外部に読み込むことができますページ。おそらく、jquery UIモーダルダイアログボックスでこれを行うことができます。

あなたが直面している問題は、ダイアログボックスを開いてフォームを取得してフォームを送信すると、通常の投稿要求が送信されるため、ダイアログがリロードされるということです私は上記のリンクを持っています。パスワードを忘れた場合はlink

解決方法はありますかあなたはajaxリクエストを送って返信を返し、あなたの応答に応じて、ダイアログボックスを終了して親(プリファレンスコントローラページ)を更新することもできますが、それはかなりです.....私は数ヶ月前と同じように、しかしzfではなく、私はどの程度達成したのか分かりませんが、それは確かに私に厄介な頭痛を与えました

+0

@experimentXこれまでのご意見をありがとうございます。あなたの提案を試して、レイアウトを無効にして、addwidgetページがjqueryダイアログに読み込まれています。残念ながら、フォームのアクション自体に問題があるようで、ダイアログ内のウィジェット/ページの代わりに「親」の顧客/環境設定ページに表示されるようです。 –

+0

@experimentX - フォームアクション(ダイアログ内のaddwidgetページ用)をaction = ""に設定すると、addwidgetページではなく、親ページにポストされているようです。それで、私がaddwidgetページにアクションを設定すると、それはaddwidgetページに投稿されます。問題は、実際にはダイアログの中に投稿してから顧客の設定ページに戻る代わりにaddwidgetページに移動するということです。 –

+0

あなたの 'addWidget'アクションで' $ form-> setAction($ this-> view-> baseUrl( 'controller/addWidget')) 'を毎日実行しています。 –

関連する問題