我最近制作了一个 drupal 7 模块,我想自定义 drupal 显示验证错误的方式。我想在弹出窗口中放置错误消息。我把弹出生成代码放在表单alter hook中。
但是我不能让 drupal hook_form_alter 在验证钩子之后运行。我试图清除表单缓存并尝试使用“#after_build”而不是表单更改挂钩,但它们都在验证之前运行。似乎验证是该过程中运行的最后一件事。我把我的代码放在下面,请帮助我。
非常感谢您提前。
function quote_line_menu() {
$items ['quote_line'] = array (
'page callback' => 'drupal_get_form',
'page arguments' => array (
'quote_line_form'
),
'access arguments' => array (
'access content'
),
'type' => MENU_CALLBACK
);
$items ['ajax_manually_get_price'] = array(
'page callback' => 'ajax_update_price_callback',
'access arguments' => array (
'access content'
),
'type' => MENU_CALLBACK
);
return $items;
}
function quote_line_form($form, &$form_state) {
// Initialize.
if ($form_state ['rebuild']) {
// Don't hang on to submitted data in form state input.
$form_state ['input'] = array ();
}
if (empty ( $form_state ['storage'] )) {
$form_state ['storage'] = array (
'step' => 'quote_line_form_first'
);
}
// Add general settings
$form['#attributes']['class'][] = 'separate-border';
// No cache
/*
$form['#cache'] = FALSE;
$form['#no_cache'] = TRUE;
$form_state['cache'] = FALSE;*/
$form['#after_build'][] = 'quote_line_form_after_build';
// $form['#validate'][] = 'quote_line_form_validate';
// Return the form for the current step.
$function = $form_state ['storage'] ['step'];
$form = $function ( $form, $form_state );
return $form;
}
function quote_line_form_after_build($form, &$form_state) {
error_log(0);
return $form;
}
function quote_line_form_quote_line_form_alter(&$form, &$form_state, $form_id) {
error_log(1);
quote_line_handle_form_set_error($form, $form_state, $form_id); //generate popup here
// Preset form state
if($form_state['storage']['step'] == 'quote_line_form_bike_info'){
if(isset($form_state['storage']['bike_0_oversea_travel_days']) && !empty($form_state['storage']['bike_0_oversea_travel_days'])){
$form ['default_open_oversea'] = array (
'#markup' => '<script>jQuery("a#over0-yes").click();</script>'
);
}
}
}
function quote_line_form_validate($form, &$form_state) {
error_log(2);
error_log($_POST['form_build_id']);
//cache_clear_all('form', 'cache_form', true);
$values = $form_state ['values'];
if(isset($_POST['back']) && !empty($_POST['back'])){
if(!isset($form_state ['values']['back']) || $form_state ['values']['back'] != $_POST['back']){
$form_state ['values']['back'] = $_POST['back'];
}
if(!isset($form_state ['values']['op']) || $form_state ['values']['op'] != $_POST['back']){
$form_state ['values']['op'] = $_POST['back'];
}
$function = 'quote_line_form_submit';
$function ( $form, $form_state );
return;
}
// Call step validate handler if it exists.
if (function_exists ( $form_state ['storage'] ['step'] . '_validate' )) {
$function = $form_state ['storage'] ['step'] . '_validate';
$function ( $form, $form_state );
}
return;
}