상거래 체크 아웃 양식에 제출 핸들러를 추가하려면 어떻게해야합니까?


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

어떻게 제출 핸들러를 계속 버튼에 추가 할 수 있습니까?
Ahmad

1
$form['buttons']['continue']['#submit'][] = ..폼 변수를 검사하고 찾을 수 있다고 생각합니다 .
googletorp

그러나 제출 기능이 자체 제출 기능보다 먼저 실행되기를 원합니까? 어떻게해야합니까?
Ahmad

새로운 질문입니다. 의견은 질문을하거나 대답하기위한 것이 아닙니다.
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의 답변에 대한 의견입니다.
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...
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.