3

匿名ユーザーが製品を購入できるようにしたいのですが、購入時に新しいアカウントを作成できないようにしたいと考えています。

残念ながら、新しいユーザーの作成は、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);

}
4

3 に答える 3

4

残念ながら、匿名ユーザー用のアカウントが作成されるため、ユーザーはログインして請求書や注文履歴などを確認できます。

送信されるメールをオフにして、アカウントを有効にしないこともできます。これは [構成] > [チェックアウト] にあります。

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

その場合、更新が難しくなるため、Ubercart をハッキングしない方がよいと思います。少なくともこの方法では、メールは届かず、アカウントを持っていることもわかりません。

私の頭の上から、UID(ユーザーアカウントが必要)が必要です。そうしないと、すべての注文がUID 0になるため、何か問題が発生した場合に、あらゆる種類のレポート/ビューまたは注文履歴機能を持つことが基本的に不可能になります.

于 2010-04-09T15:39:42.483 に答える
1

匿名ユーザーがカートを使用できるようにするモジュールを作成しました。チェックアウト プロセスは非常に短時間です。ユーザーはチェックアウト フォームで 4 つのフィールド (名前、電子メール、電話番号、コメント) に入力する必要があります。このデータとカートの内容は、フォームの送信後にマネージャーと顧客に送信されます。モジュールは後で drupal.org で公開されます。

于 2010-12-09T18:23:25.830 に答える
1

ECO (Extra Customizations for Ubercart) モジュールは、Drupal 6.x / Ubercart 2.3 でこれを行う方法を提供します。

これhook_menu_alterは、パスのページ コールバックをオーバーライドし、cart/checkout/complete匿名チェックアウト用の新しい Drupal ユーザーを作成しない独自の実装に置き換えるために使用することで機能します。

Ubercart を直接ハッキングするよりはましですが、このように Ubercart の機能のコア チャンクを交換するのは理想的ではありません。

于 2011-08-28T02:21:31.060 に答える