我在Drupal网站上设置了一个多步骤网页表单,如果该字段不符合条件,我正在尝试检查字段并保留在网页表单的第一页上。在webform的第一步,用户在文本字段(comp_name)中输入公司名称。当用户按下下一步时,我想检查输入的公司名称是否是节点的标题。 到目前为止,我有:
function check_for_company_form_alter(&$form, $form_state, $form_id)
{
if ($form_id == "webform_client_form_2")
{
if($form_state['post']['details']['page_num'] == 1){
$comp_name = $form_state['post']['submitted']['comp_name'];
$query = "SELECT nid FROM node WHERE title='".$comp_name."'";
$nidComp= db_result(db_query($query));
if($nidComp>0){
echo 'we found node id'.$nidComp;
}
else{
//redirection to page 1 of the multistep form
}
}
}
}
代码效果很好,但我无法找到如何重定向到第1页。
答案 0 :(得分:0)
使用自定义验证钩子和form_set_error。
<?php
...
// within hook_form_alter
$form['#validate'][] = 'check_for_company_validate';
...
function check_for_company_validate($form, &$form_state) {
// Check if the company name ISN'T the title of a node here.
// If so...
form_set_error('post][submitted][comp_name', 'Something is not right.');
}
?>
hook_form_alter在构建表单之前触发。听起来你想要hook_validate或(可能)hook_submit。这个解决方案适用于Drupal 6。