我希望能够让匿名用户购买产品,但购买时不会创建新帐户。
不幸的是,新用户的创建似乎非常紧密地集成到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);
}
答案 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这样的核心功能仍然是不理想的。