如何在商务结帐表格中添加其他提交处理程序?


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');
}

Answers:


14

你在做什么是正确的。

问题在于,Drupal Commerce已在单击的按钮上定义了提交操作,该操作将用于代替在表单本身上定义的提交处理程序。因此,您需要将提交处理程序添加到要使用提交功能的按钮(取消,继续)上。

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

那么如何将提交处理程序添加到“继续”按钮?
艾哈迈德(Ahmad)

1
我相信这是$form['buttons']['continue']['#submit'][] = ..您可以检查表格变量并找出答案的地方。
googletorp

但是我希望我的提交功能应该比自己的提交功能先执行吗?我该怎么办?
艾哈迈德(Ahmad)

这是一个新问题。评论并不用于提出/回答问题。
googletorp

6

为了快速回答艾哈迈德的精致问题-如何在其他提交功能之前添加他的自定义提交功能:

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答案的注释中。
rooby

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...
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.