我有一个自定义模块,它构建了一个包含几个字段的表单,到目前为止一切都很好。在我的一个页面中,我打印了此表单两次(不同的块),表单获得相同的“form_id”,因此当我提交其中一个并出现错误时,它们都会突出显示错误,并填充字段。我希望只有我提交的表单才会出现错误,有没有办法做到这一点?
谢谢!!
我有一个自定义模块,它构建了一个包含几个字段的表单,到目前为止一切都很好。在我的一个页面中,我打印了此表单两次(不同的块),表单获得相同的“form_id”,因此当我提交其中一个并出现错误时,它们都会突出显示错误,并填充字段。我希望只有我提交的表单才会出现错误,有没有办法做到这一点?
谢谢!!
对于任何有兴趣的人,要做到这一点,您需要使用 hook_forms。仅当传递给 drupal_get_form 的 form_id 不存在时才会调用此钩子,这很重要,如果您想使用它,请确保您的调用使用不存在的 form_id,例如:
//Defining the form:
function mx_wtransnet_form_contacto($form, &$form_state, $block = null, $formType = null) {
}
我想多次使用此表单并获得不同的错误处理程序,而不是加载我的表单(mx_transnet_form_contacto),我将调用一个不存在的表单:
$form = drupal_get_form("mx_wtransnet_form_contacto_invalid", "contacto-mini");
然后我创建我的钩子:
function mx_wtransnet_forms($form_id, $args) {
$forms = array();
if (strpos($form_id, '_contacto_') !==false) {
$forms[$form_id] = array(
'callback' => 'mx_wtransnet_form_contacto',
);
}
return $forms;
}
此函数将捕获我所有不存在的 druapl_get_form 调用,因此我可以处理/指导它们,在我的示例中,我所做的只是检查 form_id 是否包含contacto,然后将此表单的回调设置为原始函数。
在这种情况下,最好创建另一个具有不同“form_id”但具有相同提交处理程序的表单。
另一种情况:当您在页面上两次输出相同的表单时,也可能会出现 JS 错误,因为表单元素的 ID 相同。
如果您不重复表单代码及其提交处理程序(DRY 原则),我建议创建一个具有表单数组的自定义函数
function form_my_custom($form_id){
$form['my_first_field'] = array();
$form['my_second_field'] = array();
$form['#attributes']['id'] = $form_id;
$form['my_submit_button'] = array(
'#submit' => array('my_custom_form_submit')
);
return $form;
}
function my_block1_form(){
return my_custom_form('my_form_id_1');
}
function my_block2_form(){
return my_custom_form('my_form_id_2');
}
function my_custom_form_submit(&$form, &$form_state){
// your submit handler.
}