糟糕的$用户变量混乱drupal 6和ubercart之间

时间:2011-01-27 11:25:40

标签: drupal-6

我已经设置了一个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的正确值,当我立即处理购物车后,我看到一个旧值。

关于我可能做错的任何指示都是超级的!

1 个答案:

答案 0 :(得分:0)

我必须将我的代码编辑为:

    global $user;
    if ($user) {
      $array = array('last_submission' => $sids[1]);
      user_save($user, $array);       
    }

它现在可以正常运作。希望能帮助别人...