コマースチェックアウトフォームに追加の送信ハンドラを追加するにはどうすればよいですか?


14

追加の送信ハンドラを追加するにはどうすればよいですか?私はこれを試しましたが、うまくいきませんでした。

function c_coupon_form_alter(&$form, $form_state, $form_id) {
  drupal_set_message($form_id);
  switch($form_id) {
     case 'commerce_checkout_form_review':
      drupal_set_message($form_id . '_form submit');
      $form['#submit'][] = 'c_coupon_review_submit';
  }
}

function c_coupon_review_submit($form, &$form_state) {
  drupal_set_message('submitted');
}

回答:


14

あなたがしていることは正しいです。

問題は、Drupal Commerceがクリックされたボタンで送信アクションを定義したことです。これは、フォーム自体で定義された送信ハンドラーの代わりに使用されます。そのため、送信機能を使用するボタン(キャンセル、続行)に送信ハンドラーを追加する必要があります。

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';

続行ボタンに送信ハンドラを追加するにはどうすればよいですか?
アーマッド

1
私はそれがだと考えている$form['buttons']['continue']['#submit'][] = ..あなたは、フォーム変数を検査して調べることができます。
googletorp

しかし、自分のサブミット関数よりも最初にサブミット関数を実行する必要がありますか?どうすればこれができますか?
アーマッド

それは新しい質問です。コメントは、質問をしたり答えたりするためのものではありません。
googletorp

6

Ahmadの洗練された質問-他の送信関数の前にカスタム送信関数を追加する方法にすばやく答えるには:

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');

参考のために、洗練された質問はgoogletorpからの回答のコメントにあります。
ルービー14年

1

次のコードを使用して、追加の送信ハンドラーをフォームに追加します。それは私のために働いた:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
        if ($form_id == 'xyz') {
            $form['#submit'][] = 'webform_extra_submit_test';
        }
    }

function webform_extra_submit_test($form, &$form_state) {
    global $user;
    $user_id = $user->uid; 
    // do code here $form_state['values'] etc...
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.