我已经设置了一个hook alter,它将一个提交函数添加到webform提交链中。在该功能和其他一些处理中我添加:
function webform_checkout_form_alter(&$form, &$form_state, $form_id) {
$form['#submit'][] = 'webformSubmitAlteration';
}
function webformSubmitAlteration(&$form, &$form_state) {
global $user;
$user->last_submission = $sids[1];
drupal_set_message('<pre> current user is: '. check_plain(print_r($user, TRUE)) .'</pre>');
}
该功能还会重定向到ubercart结帐页面。
打印的$ user显示为(为清晰起见而编辑):
current user is: stdClass Object
(
[uid] => 1
[name] => paul.dambra
[last_submission] => 85
)
然后我通过checkout处理购物车,它会触发一个运行一些自定义php的ubercart条件操作。基本上,当捕获此付款完成时,我想使用last_submission值将提交的表单从草稿切换为完成,以便我的用户现在完成哪些应用程序并进行了灰尘处理。
在该代码中我添加了:
global $user;
drupal_set_message('<pre> user is : '. check_plain(print_r($user, TRUE)) .'</pre>');
$sid = $user->last_submission;
drupal_set_message('<pre> sid is : '. check_plain(print_r($sid, TRUE)) .'</pre>');
当我们看到drupal_set_message调用的输出时:
user is : stdClass Object
(
[uid] => 1
[name] => paul.dambra
[last_submission] => 47
)
我知道47是处理相关表单之前的last_submission值。因此,即使我提交表单时,我可以看到last_submission的正确值,当我立即处理购物车后,我看到一个旧值。
关于我可能做错的任何指示都是超级的!
答案 0 :(得分:0)
我必须将我的代码编辑为:
global $user;
if ($user) {
$array = array('last_submission' => $sids[1]);
user_save($user, $array);
}
它现在可以正常运作。希望能帮助别人...