¿Cómo agrego un controlador de envío adicional en el formulario de pago de comercio?

14

¿Cómo agrego un controlador de envío adicional? He intentado esto pero no funcionó.

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
fuente

Respuestas:

14

Lo que estás haciendo es correcto.

El problema es que Drupal Commerce ha definido la acción de envío en los botones en los que se hace clic, que se utilizará en lugar de los controladores de envío definidos en el formulario. Por lo tanto, debe agregar sus controladores de envío a los botones (Cancelar, Continuar) que desea utilizar su función de envío.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
fuente
Entonces, ¿cómo puedo agregar el controlador de envío al botón Continuar?
Ahmad
1
Creo que $form['buttons']['continue']['#submit'][] = ..puede inspeccionar la variable de formulario y averiguarlo.
googletorp
¿Pero quiero que mi función de envío se ejecute primero que su propia función de envío? ¿Cómo podría hacer esto?
Ahmad
Esa es una nueva pregunta. Los comentarios no son para hacer / responder preguntas.
googletorp
6

Para responder rápidamente a la refinada pregunta de Ahmad: cómo agregar su función de envío personalizada ANTES de otras funciones de envío:

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
fuente
Como referencia, la pregunta refinada se encuentra en los comentarios de la respuesta de googletorp.
rooby
1

Use el siguiente código para agregar un controlador de envío adicional a un formulario. A mí me funcionó:

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
fuente