Drupal 7でWebフォーム送信をajax化する方法は?


8

私が使用してレンダリングをWebフォームに変更しようとしているhook_form_alter()hook_node_view()私はどこかに「#ajax」を追加することができますので、カスタムモジュールでは。

D6またはD7でwebformとajaxを使用した経験がある人はいますか?ロジックはD6とD7で同じであり、実装が変更されるだけだと思います。


1
D6とD7には非常に異なるAjaxフレームワークがあります。
ジェレミーフランス語

はい、ありますが、問題ではありません。私が抱えている本当の問題は、Webformフォームを変更し、DrupalフォームAPIを介してajaxイベントを追加するためのフックが見つからないことです。
E. de Saint Chamas、2011

Ajaxについて具体的な質問がありますか?これは会話のように聞こえます。また、参考までに:api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy

「ハウツー」ブログの投稿へのリンクだけで回答を投稿するのは好きではありません。自分の説明がないので、これをコメントとして追加します:envisioninteractive.com/drupal/…-これが機能する場合、おそらく回答として追加することを検討できます。これはあなたが必要とするかもしれないもののようです。
ダニーイングランド人

回答:


8

Ajaxのモジュールは、 Drupalの6で私のために動作します。

Drupal 7の場合:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // see if webform_client_form_ is in the form_id
      if(strstr($form_id, 'webform_client_form_')) {
        // get the nid so we can use it in the wrapper value
        $nid = $form['#node']->nid;
        // add the ajax properties to the submit button
        $form['actions']['submit']['#ajax'] = array(
          'callback' => 'mymodule_webform_js_submit',
          'wrapper' => 'webform-client-form-' . $nid,
          'method' => 'replace',
          'effect' => 'fade',
        );
      }
    }

function mymodule_webform_js_submit($form, $form_state) {
      // define the $sid variable (submission id from webform)
      $sid = $form_state['values']['details']['sid'];
      // if we have a sid then we know the form was properly submitted, otherwise, we'll just return the existing $form array
      if ($sid) {
        // first we have to load up the webform node object
        $node = node_load($form_state['values']['details']['nid']);
        // create an array up with the confirmation message, retreived from the webform node
        $confirmation = array(
          '#type' => 'markup',
          '#markup' => check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE),
        );
        // return the confirmation message
        return $confirmation;
      }
      else {
        // return the form
        return $form;
      }
    }

このコードは正確に何をすることになっていますか?(フックの名前をテーマに合わせて変更した後)テーマに追加しましたが、影響はありません。
John Slegers 14

テーマ内のカスタムモジュールに入ります。
neelmeg

0

特定のフォームだけをajax化したい場合の最も簡単な方法の1つは、jqueryフォームプラグインを追加することです。そのかなり簡単です。

以下のコードをtemplate.phpファイルのページ前処理関数に追加します。

  1. まず、以下のコードでjqueryプラグインを追加します。

    drupal_add_js(drupal_get_path( 'theme'、 'your_theme')。 "/js/jquery.form.js");

  2. 次に、以下のコードを追加し、#your_form_ID自分のフォームIDに置き換えます

    drupal_add_js( '

                (function($){ 
    $(document).ready(function() { 
    
                $("#your_form_ID").ajaxForm(function() { 
                    alert("Thank you for your comment!"); 
                }); 
    });     }(jQuery));;
    
           ', 'inline');

これですべて完了です。必要なページだけをスクリプトにロードすることを検討したい場合があります。


私はそれを検討してきました。今、私はそれを構成ページのあるモジュールにしようと考えています。そのようなものはありますか?
esafwan

-1

Ajaxモジュールがそれを支援できるかどうかを確認してください。ドキュメントも参照してください


1
彼はDrupal 7を求めています。そのモジュールはD7ではまだ利用できません。
ダニーイングランド人

1
公平を期すために、質問には7のタグが付けられていますが、D6またはD7でajaxの経験があったかどうかを明確に尋ねます。
EmmyS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.