匿名ユーザーが製品を購入できるようにしたいのですが、購入時に新しいアカウントを作成できないようにしたいと考えています。
残念ながら、新しいユーザーの作成は、ubercart の注文システムに非常に緊密に統合されているようです。また、注文モジュールは ubercart コアの一部であるため、その動作を簡単にオーバーライドすることはできません。
新しいユーザー アカウントの作成をオーバーライドする 1 つの可能性は、ubercart に偽の匿名アカウントを提供することです。
これは、ubercart が最初に $order を uid に関連付ける場所であるためです。submit 関数をキューに追加します。
//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);
}