是否可以在没有创建新用户帐户的情况下使用ubercart进行匿名购买?

时间:2010-04-09 15:15:05

标签: drupal ubercart

我希望能够让匿名用户购买产品,但购买时不会创建新帐户。

不幸的是,新用户的创建似乎非常紧密地集成到ubercart的订购系统中。并且,因为订单模块是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中为匿名购买创建新用户帐户是否有更好的非管道磁带方式?

AND FYI - 在这一点上,我有点被ubercart困住,所以我不能用别的东西。

谢谢!

d


更新


我一直想指出,用户如上所述自动登录并不一定正确。仅在保存会话时才会出现这种情况。但正如Drupal中关于safely impersonating another user的文章所示,可以绕过自动登录,如下所示:

//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);

}

3 个答案:

答案 0 :(得分:4)

不幸的是,它会为匿名用户创建帐户,以便用户可以登录并查看其发票,订单历史记录等。

您可以关闭已发送的电子邮件,而不是激活帐户。这是在配置>结帐:

Send new customers a separate e-mail with their account details.
New customer accounts will be set to active.

我认为你最好不要攻击Ubercart,因为在这种情况下更新会更难。至少这样,他们没有收到电子邮件,也不知道他们有帐户。

在我的头顶,你会想要UID(需要一个用户帐户),否则每个订单都是UID 0,因此如果有的话,基本上不可能有任何类型的报告/视图或订单历史功能错。

答案 1 :(得分:1)

我已经完成了一个模块,允许匿名用户拥有购物车,结帐流程非常短。用户应在结账表格(姓名,电子邮件,电话和评论)填写4个字段,这些数据+购物车内容将在表单提交后发送给经理和客户。 该模块将在稍后的drupal.org上发布。

答案 2 :(得分:1)

ECO (Extra Customizations for Ubercart) module为Drupal 6.x / Ubercart 2.3提供了一种方法。

它的工作原理是使用hook_menu_alter覆盖cart/checkout/complete路径的页面回调,并将其替换为自己的实现,不会为匿名签出创建新的Drupal用户。

比直接攻击Ubercart更好,但是更换Ubercart这样的核心功能仍然是不理想的。