2011-12-14 13 views
0

私はフォームを構築するモジュールを持っています。私はそのモジュールで作成されたメニュー項目を介してフォームにヒットすることができます。私がajax経由でフォームを読み込もうとすると、フォームの代わりにページ全体(ヘッダー、フォーム、およびフッター)が得られます。ここでは、メニュー項目があります:jQueryダイアログにajax経由でDrupalフォームを読み込むにはどうしたらいいですか?

$items['sendmessage'] = array(
    'title' => 'Send Message', 
    'description' => 'Send a message', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('rmessages_message_form', 1), 
    'access callback' => TRUE, 
    'type' => MENU_NORMAL_ITEM, 
); 

ここではjavascriptのだ:

$('.send_message').click(function(){ 
    $('.send-message-dialog').dialog('open'); 
     $('.send-message-dialog .dialog-content').load('/sendmessage/7'); 
    } 
); 

私はブラウザを介してURLを読み込む場合は、フォームの負荷が。 drupalにフォームをレンダリングさせ、ページ全体をロードしようとするのではなく、HTMLを返すようにする方法がいくつかあります。 drupal_render(によってレンダリングされるアイテムの配列を取得するためにdrupal_build_formを使用した)

$items['sendmessage'] = array(
    'page callback' => 'rmessage_send_message_form', 
    'page arguments' => array('rmessages_message_form', 1), 
    'access callback' => TRUE 
); 

function rmessage_send_message_form($form_id, $nid) { 
    $form_state = array(); 
    echo drupal_render(drupal_build_form('rmessages_message_form', $form_state, $nid)); 
} 
;


これは...お奨めdrupal_render機能を覚えて動作しているようです

答えて

4

JavaScriptを使用しない通常のURLからフォームにアクセスできるようにするのが最も良い方法だと思います。 JAX。

$('.send_message').click(function(){ 
    $('.send-message-dialog').dialog('open'); 
     $('.send-message-dialog .dialog-content').load('/sendmessage/7?ajax'); 
    } 
); 

希望

を支援します。
function rmessage_menu() { 
    $items['sendmessage/%node'] = array(// Using the '%node' load argument ensures that the nid attempting to be accessed belongs to an existing node. 
    'title' => 'Send Message', 
    'description' => 'Send a message', 
    'page callback' => 'rmessages_message_form', 
    'page arguments' => array(1), 
    'access callback' => TRUE 
); 

    return $items; 
} 

function rmessages_message_form($node) { 
    $form = drupal_get_form('rmessage_send_message_form', $node->nid); 

    // Just print the form directly if this is an AJAX request 
    if (isset($_GET['ajax'])) { 
    echo render($form); 

    // Halt page processing 
    drupal_exit(); 
    } 

    // Otherwise return the form as normal 
    return $form; 
} 

は、その後、あなたのJSであなただけのクエリ文字列を追加する必要があります:あなたはこのようなことを行うことができます
関連する問題