【发布时间】:2017-03-31 21:31:07
【问题描述】:
我们有一个 Drupal 7 网络表单,它会在成功提交后重定向到一个 url。
如果用户再次登陆同一个网络表单并且已经提交,我们需要做的是重定向用户。
我们需要一个模块,还是以编程方式完成?
提前致谢。
【问题讨论】:
标签: redirect drupal-7 drupal-webform
我们有一个 Drupal 7 网络表单,它会在成功提交后重定向到一个 url。
如果用户再次登陆同一个网络表单并且已经提交,我们需要做的是重定向用户。
我们需要一个模块,还是以编程方式完成?
提前致谢。
【问题讨论】:
标签: redirect drupal-7 drupal-webform
我查看了 webform 模块,如果用户已经提交了表单,没有发现任何会重定向用户的设置,所以我认为您需要以编程方式进行。
注意:如果没有自定义模块,也可以使用规则模块。这个我没试过。
要以编程方式执行此操作,您可以执行以下操作。它实现了hook_node_view(),并使用webform api函数webform_get_submission_count()检查用户是否已经提交了任何东西。 (编辑:本例中的自定义模块称为 example_webform)
<?php
/**
* Implements hook_node_view().
*/
function example_webform_node_view($node, $view_mode, $langcode) {
global $user;
module_load_include('inc', 'webform', 'includes/webform.submissions');
$submission_count = webform_get_submission_count($node->nid, $user->uid);
if (!empty($submission_count) && $submission_count > 0) {
$redirect = $node->webform['redirect_url'];
drupal_goto($redirect);
}
}
现在它将重用提交表单时使用的页面,因此如果您选择这样做,请记住让成功页面反映这一点。 (例如,如果用户第二次登陆成功页面,显示“您的帖子已保存”会很奇怪。)或者您可以将$redirect 替换为网络表单设置之外的另一个页面。
另请注意,网络表单仍会添加消息“您已提交此表单。查看您以前的提交。”如果启用。
【讨论】:
这就是我们最终采用的解决方案。
因此,网络表单在提交时会正确重定向(在网络表单设置中设置),然后如果用户返回该页面并完成网络表单,它就会重定向。
【讨论】: