0

我有一个自定义模块,它构建了一个包含几个字段的表单,到目前为止一切都很好。在我的一个页面中,我打印了此表单两次(不同的块),表单获得相同的“form_id”,因此当我提交其中一个并出现错误时,它们都会突出显示错误,并填充字段。我希望只有我提交的表单才会出现错误,有没有办法做到这一点?

谢谢!!

4

3 回答 3

1

对于任何有兴趣的人,要做到这一点,您需要使用 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,然后将此表单的回调设置为原始函数。

于 2013-03-20T11:57:36.067 回答
0

在这种情况下,最好创建另一个具有不同“form_id”但具有相同提交处理程序的表单。

另一种情况:当您在页面上两次输出相同的表单时,也可能会出现 JS 错误,因为表单元素的 ID 相同。

于 2013-03-20T04:44:40.023 回答
0

如果您不重复表单代码及其提交处理程序(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. 
}  
于 2013-03-21T21:21:29.893 回答