我有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';
}
但这不起作用
答案 0 :(得分:51)
如果表单上有两个提交按钮并希望它们执行不同的操作,最好的办法是为每个按钮创建不同的提交功能,然后将它们连接起来。 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'),
);
但我不知道你的意思是form_alter() - 没有理由使用任何形式的表单。
编辑:如评论中所示 - 如果您需要两个按钮的不同验证功能,您还可以在相应的按钮阵列中包含'#validate' => array('my module_form_validate_one')
和'#validate' => array('my module_form_validate_two')
。但这不是必需的,如果标准表格验证功能正常工作,那就去吧。
答案 1 :(得分:15)
如果您想在一个提交功能中处理不同的提交按钮,您可以检查:
if($form_state['values']['op'] == BUTTON_ONE_VALUE){
} else if($form_state['values']['op'] == BUTTON_TWO_VALUE){
}
或者您可以先将某些属性指定给按钮,然后检查:
$form_state['triggering_element']['#attributes'][YOUR_PROPERTY] == VALUE
我正在使用Drupal 7 ...希望这有帮助
答案 2 :(得分:3)
虽然接受的答案是正确的,但应注意您必须为每个提交按钮传递不同的值,否则使用的提交功能将是定义的最后一个提交按钮。
换句话说,如果两个提交按钮的值都是“提交”,那么无论按哪个按钮,都只会调用第二个提交功能。