在Drupal 6.20中我正在构建一个创建多页表单的函数(my_form_process)。在一个页面上,用户可以从先前创建的地址列表中进行选择,或者创建一个新地址。如果用户想要创建一个新的,我使用javascript& CSS隐藏选择并取消隐藏地址表单(地址,城市状态zip等)。为了确保用户提供所需的数据,我有一个验证函数(my_form_process_validate),如果字段为空,我会设置错误。问题是,当页面验证失败时,my_form_process会重新绘制带有验证错误的表单,但默认返回“从以前创建的地址列表中选择”,并且带有错误的“create new”表单元素仍然是隐藏。
如何验证构建表单的my_form_process,当验证失败时显示“create new”div,并隐藏“select old”div?我已经尝试设置$ form ['storage']变量,但my_form_process似乎没有看到它。
以下是更多信息:
我尝试在验证例程中添加$ form_state ['validation_status'] ='error',但仍然发现当找到错误时,该值不在表单函数中使用的$ form_state数组中。
但是,当没有错误时,该值可用。 (一个线索)
所以,只是为了踢,我从验证例程中删除了“form_set_error”行,现在该值可用。
所以现在,我必须设置
$form_state['validation_error'] = '<ol>';
$form_state['validation_status'] = 'error';
$form_state['validation_error'] .= '<li>' . t('address cannot be blank') . '</li>';
$form_state['validation_error'] .= '</ol>';
然后在表单函数中我可以测试$ form_state ['validation_error']并且如果'error'则使用
drupal_set_message($form_state['validation_error'],$form_state['validation_status']);
显示消息,然后适当地设置div的显示属性。
当然,似乎是“form_set_error”过程中的一个错误,但我是Drupal / PHP领域的新手,所以我不确定我在做什么。
答案 0 :(得分:0)
您应该能够在表单函数,验证函数和提交处理函数之间来回传递$ form_state变量中的值。这可能有所帮助(如果你还没有看过这个)http://drupal.org/node/144132#multistep