处理Drupal表单API中的多个提交按钮

use*_*265 27 drupal

我有2个提交按钮,并希望为每个提交按钮执行不同的操作.在这里,我想设置只能在form_alter()中完成的表单字段.任何人都可以建议如何检查form_alter()函数中的多个提交按钮?

我用过

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';
 }
Run Code Online (Sandbox Code Playgroud)

但这不起作用

Joh*_*ala 52

如果表单上有两个提交按钮并希望它们执行不同的操作,最好的办法是为每个按钮创建一个不同的提交功能,然后将它们连接起来.FormAPI的一个好处是它会自动将表单与提交处理程序链接起来,但是如果你有两个提交按钮,你想要去一个新的地方.

所以你的表单代码可能包含:

$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'),
);
Run Code Online (Sandbox Code Playgroud)

但是我不知道你的意思是form_alter() - 没有理由使用任何类型的表单.

编辑:正如在评论中想出了-如果你需要为两个按钮不同的验证功能,还可以包括'#validate' => array('my module_form_validate_one')'#validate' => array('my module_form_validate_two')在各自的按钮配置.但它不是必需的,如果标准表单验证功能正常工作,那就去吧.

  • 如你所知,你可能还需要添加 - '#validate'=> array('my_module_form_validate_one'), (2认同)

son*_*gyy 15

如果要在一个提交功能中处理不同的提交按钮 - 单击,您可以检查:

if($form_state['values']['op'] == BUTTON_ONE_VALUE){
} else if($form_state['values']['op'] == BUTTON_TWO_VALUE){
}
Run Code Online (Sandbox Code Playgroud)

或者您可以先将某些属性分配给按钮,然后检查:

$form_state['triggering_element']['#attributes'][YOUR_PROPERTY] == VALUE
Run Code Online (Sandbox Code Playgroud)

我正在使用Drupal 7 ...希望这会有所帮助