Gérer plusieurs boutons d'envoi dans Drupal form API

J'ai 2 boutons de soumission et je veux effectuer différentes actions pour chaque bouton de soumission . Ici, je veux définir les champs de formulaire qui peuvent être faits uniquement dans form_alter (). Quelqu'un peut-il suggérer comment vérifier plusieurs boutons de soumission dans la fonction form_alter ()?

J'ai utilisé

function myform_form_submit($formID, &$form_state) {
if($form_state['clicked_button']['#value'] == $form_state['values']['submit_one'])    //if button 1      is clicked
     $form_state['redirect'] = 'mypath/page_one';   //redirect to whatever page you want
 else if($form_state['clicked_button']['#value'] == $form_state['values']['submit_two'])  /if button      2 is clicked
    $form_state['redirect'] = 'mypath/page_two';
 }

, Mais cela ne fonctionne pas

26
demandé sur user550265 2010-12-21 20:05:04

3 réponses

La meilleure chose à faire si vous avez deux boutons de soumission sur un formulaire et que vous voulez qu'ils fassent des choses différentes, est de créer une fonction de soumission différente pour chaque bouton et de les connecter. Une des bonnes choses à propos de FormAPI est qu'il lie automatiquement le formulaire avec le gestionnaire de soumission pour vous, mais si vous avez deux boutons de soumission, vous voulez aller quelque part de nouveau.

, Donc votre code de formulaire est susceptible de contenir:

$form['submit_one'] = array(
  '#type' => 'submit',
  '#value' => t('Submit One'),
  '#submit' => array('my_module_form_submit_one'),
);
$form['submit_two'] = array(
  '#type' => 'submit',
  '#value' => t('Submit Two'),
  '#submit' => array('my_module_form_submit_two'),
);

Mais je ne sais pas ce que vous entendez par form_alter () - il n'y a pas raison d'utiliser un formulaire alter de toute sorte.

Edit: comme indiqué dans les commentaires-si vous avez besoin de différentes fonctions de validation pour les deux boutons, vous pouvez également inclure '#validate' => array('my module_form_validate_one') et '#validate' => array('my module_form_validate_two') dans les tableaux de boutons respectifs. Mais ce n'est pas nécessaire, et si la fonction de validation de formulaire standard fonctionne bien, allez avec cela.

50
répondu John Fiala 2014-03-17 19:15:36

Si vous souhaitez gérer différents boutons de soumission dans une fonction de soumission, vous pouvez vérifier:

if($form_state['values']['op'] == BUTTON_ONE_VALUE){
} else if($form_state['values']['op'] == BUTTON_TWO_VALUE){
}

Ou vous pouvez d'abord attribuer certaines propriétés au bouton, puis vérifier:

$form_state['triggering_element']['#attributes'][YOUR_PROPERTY] == VALUE

J'utilise Drupal 7... J'espère que cela aide

14
répondu songyy 2011-12-08 05:39:39

Bien que la réponse acceptée soit correcte, il convient de noter que vous devez passer des valeurs différentes avec chacun de vos boutons de soumission, sinon la fonction de soumission utilisée sera le dernier bouton de soumission défini.

En d'autres termes, si la valeur des deux boutons submit est 'Submit', seule la deuxième fonction submit sera appelée, quel que soit le bouton enfoncé.

2
répondu Jeremy Rimpo 2013-11-23 00:17:42