Como adiciono um manipulador de envio adicional no formulário de checkout de comércio?

14

Como adiciono um manipulador de envio adicional? Eu tentei isso, mas não funcionou.

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

Respostas:

14

O que você está fazendo está correto.

O problema é que o Drupal Commerce definiu a ação de envio nos botões clicados, que serão usados ​​em vez dos manipuladores de envio definidos no próprio formulário. Portanto, você precisa adicionar seus manipuladores de envio aos botões (Cancelar, Continuar) que deseja usar sua função de envio.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
fonte
então, como posso adicionar o manipulador de envio ao botão Continuar?
Ahmad
1
Eu acredito que é $form['buttons']['continue']['#submit'][] = ..Você pode inspecionar a variável do formulário e descobrir.
googletorp
Mas eu quero que minha função de envio seja executada primeiro do que sua própria função de envio? Como eu pude fazer isso?
Ahmad
Essa é uma nova pergunta. Comentários não se destinam a fazer / responder perguntas.
googletorp
6

Para responder rapidamente à pergunta refinada de Ahmad - como adicionar sua função de envio personalizada ANTES de outras funções de envio:

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');
Giles B
fonte
Para referência, a pergunta refinada está nos comentários da resposta do googletorp.
rooby
1

Use o código a seguir para adicionar um manipulador de envio extra a um formulário. Funcionou para mim:

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...
}
Astha chauhan
fonte