Ticaret ödeme formuna nasıl ek bir gönderici ekleyebilirim?


14

Ek bir gönderme işleyicisi nasıl eklerim? Bunu denedim ama işe yaramadı.

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

Yanıtlar:


14

Yaptığın doğru.

Sorun, Drupal Commerce, tıklatılan düğmelerde formun kendisinde tanımlanan gönderme işleyicileri yerine kullanılacak gönderme eylemini tanımlamasıdır. Bu nedenle, gönderme işlevinizi kullanmak istediğiniz düğmelere (İptal, Devam) gönderme işleyicilerinizi eklemeniz gerekir.

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

öyleyse gönderme düğmesine Devam düğmesine nasıl ekleyebilirim?
Ahmad

1
$form['buttons']['continue']['#submit'][] = ..Form değişkenini inceleyip öğrenebileceğinize inanıyorum .
googletorp

Ancak, gönderme işlevimin kendi gönderme işlevinden önce yürütülmesini istiyorum? Bunu nasıl yapabilirim?
Ahmad

Bu yeni bir soru. Yorumlar, soru sorma / cevaplama amaçlı değildir.
googletorp

6

Ahmad'in zarif sorusunu hızlı bir şekilde cevaplamak için - diğer gönderme işlevlerinden ÖNCE özel gönderme işlevini nasıl ekleyeceğiniz:

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

Referans olarak, rafine edilmiş soru googletorp tarafından verilen yanıtın yorumlarındadır.
rooby

1

Bir forma ekstra gönderme işleyicisi eklemek için aşağıdaki kodu kullanın. Benim için çalıştı:

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...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.