我希望能够让匿名用户购买产品,但在购买时没有创建新帐户。
不幸的是,新用户的创建似乎非常紧密地集成到 ubercart 的订购系统中。而且,因为 order 模块是 ubercart 核心的一部分,它的行为不能轻易被覆盖。
覆盖创建新用户帐户的一种可能性是向 ubercart 提供一个伪造的匿名帐户:
在 $form_id == 'uc_cart_checkout_review_form' 处挂钩 hook_form_alter,因为这是 ubercart 首先将 $order 与 uid 关联的地方。将我们的提交函数添加到队列中:
//Find out if the user is anonymous:
global $user;
if ($user->uid == 0 ) {
//Load a previously created anonymous user account
$anonymous_user = mymodule_get_anonymous_user();
//create the order and assign our anonymous_user_id to it
$order = uc_order_load($_SESSION['cart_order']);
$order->uid = $anonymous_user->uid;
uc_order_save($order);
//Assign the global user our anonymous user uid
$user->uid = $anonymous_user->uid;
}
但是我真正需要的是能够进行匿名购买而不必被迫创建新帐户,这个解决方案对我不起作用。
除此之外,使用此技术将自动登录anonymous_user
到我们的bogus_anonymous_user
帐户。这绝对是我不想要的。
在 ubercart 中创建用于匿名购买的新用户帐户是否有更好的非胶带方式?
仅供参考 - 在这一点上,我有点坚持使用 ubercart,所以我不能使用其他东西。
谢谢!
D
更新:
我的意思是要指出,用户不一定会如上所述自动登录。仅当会话被保存时才如此。但正如一篇关于在 Drupal 中安全地模拟另一个用户的文章中所示,可以绕过自动登录,如下所示:
//Find out if the user is anonymous:
global $user;
if (!$user->uid) {
$original_user = $user;
session_save_session(FALSE); //Prevents the auto login amongst other effects.
//Load admin user
$user = user_load(array('uid' => 1));
//create the order and assign our anonymous_user_id to it
$order = uc_order_load($_SESSION['cart_order']);
$order->uid = $anonymous_user->uid;
uc_order_save($order);
//Set things back to normal.
$user = $original_user;
session_save_session(TRUE);
}