【问题标题】:In Drupal 6, how can a function that builds a multi-page form see the results of the validate function?在 Drupal 6 中,构建多页表单的函数如何查看 validate 函数的结果?
【发布时间】:2011-06-02 17:05:55
【问题描述】:

在 Drupal 6.20 中,我正在构建一个创建多页表单 (my_form_process) 的函数。在一个页面上,用户可以从先前创建的地址列表中进行选择,或者创建一个新地址。如果用户想创建一个新的,我使用 javascript 和 CSS 来隐藏选择并取消隐藏地址表单(地址、城市状态 zip 等)。为了确保用户提供所需的数据,我有一个验证函数(my_form_process_validate),如果字段为空,我会设置错误。麻烦的是,当页面验证失败时,my_form_process 会重新绘制出现验证错误的表单,但默认返回“从先前创建的地址列表中选择”,而出现错误的“新建”表单元素仍然是隐藏。

当验证失败时,如何告诉构建表单的 my_form_process 显示“创建新”div,并隐藏“选择旧”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 领域的新手,所以我不确定我在做什么。

【问题讨论】:

    标签: drupal drupal-fapi


    【解决方案1】:

    您应该能够通过 $form_state 变量在表单函数、验证函数和提交处理函数之间来回传递值。这可能会有所帮助(如果你还没有看过这个)http://drupal.org/node/144132#multistep

    【讨论】:

    • 感谢 Shane 的链接 - 它帮助了一些人。我想我是通过尝试其他一些选项来解决的。我将在下面分享它们。
    • 将我的方法作为编辑发布在邮件正文中以保持未答复状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多