Drupal 7 开发内部培训资料, 分头诗人

多个webform间切换等问题

赞成!
0
否决!

两个功能想要实现:

1. 几个webform问卷由链接页面连起来形成一个完整流程(即,webform1提交后转到页面1,点击页面1的链接转到webform2···),在主页上只显示webform1作为入口。(之前的已实现)问题是:如果完成到第三个webform之后突然出现故障(断电什么的),怎样能让用户下次登录后可以直接从webform3开始做?

2. webform的显隐问题:想让用户第一次登录时只能看到webform1,webform1提交后将其隐藏,然后显示webform2。(这中间容许用户退出再重新登录,即用户第二次登录时HOME页上看不到webform1,取而代之的是webform2)。如果有什么方法可以随意控制webform的显隐(trigger似乎做不到?),那么问题1也就可以解决了:做完一个问卷显示下一个就好。

谢谢!

2 个回答

赞成!
0
否决!

我没找到webform 能保存进度的使用方法(或者是有的,我找不到)。

不过在Drupal 7, 有两个方法能对cookies 操作的。

user_cookie_save(), 跟 user_cookie_delete()

虽然这两个function是对匿名用户(anonymous users)起作用的,它并没有通过 $user 获得任何用户数据。

 

comment_form_submit() 就是用了 user_cookie_save() :

1
2
3
if (user_is_anonymous()) {
  user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
}

 

如果你的版本不是Drupal 7以上,是没有这个函数的,你可以模拟一个类似的功能:

1
2
3
4
5
6
function mymodule_cookie_save(array $values) {
  foreach ($values as $field => $value) {
    // Set cookie for 365 days.
    setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, '/');
  }
}

 

1
2
3
function mymodule_cookie_delete($cookie_name) {
  setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, '/');
}

不过 setrawcookie() 只能在php 5以上才有,如果你的版本是php 4,你可以用setcookie(),函数要相应做点小改动:将方法 array $values 改为 $values

同时 rawurlencode() 也需要移除。

你可以试一下这种方法去记录。要如何跟webform 结合使用,得多点尝试。

赞成!
0
否决!

不太明白。。比起load cookies,我更需要的是标记某一张webform是否被提交。换句话说,我只是想要知道如何通过module或代码获取一个“用户提交了某一webform”这个事件,然后通过这个事件控制webform在首页的publish状态。具体说:

1. 在什么地方可以找到“一张webform是否被提交”这个信息?(是webform-form.tpl.php吗?不知道怎么写。。)
2.在什么地方可以找到控制webform的publish状态的代码(就是对应drupal webform edit里面“publishing options"这一项参数的代码)?应该怎么修改?(如:webform1被提交,则webform2的状态改为“Promoted to front page”)