Можно ли совершать анонимные покупки с помощью ubercart без создания новой учетной записи пользователя? - PullRequest
3 голосов
/ 09 апреля 2010

Я бы хотел, чтобы анонимные пользователи покупали продукт, но при этом не создавали новую учетную запись.

К сожалению, создание нового пользователя, похоже, очень тесно интегрировано в систему заказов Ubercart. И, поскольку модуль заказа является частью ядра Ubercart, его поведение не может быть легко изменено.

Одной из возможностей переопределения создания новой учетной записи пользователя является предоставление ubercart поддельной анонимной учетной записи:

подключитесь к hook_form_alter в $ form_id == 'uc_cart_checkout_review_form', потому что именно здесь 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);

}

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

К сожалению, он создает учетные записи для анонимных пользователей, поэтому пользователь может войти в систему и просмотреть свой счет, историю заказов и т. Д.

Вы можете просто отключить отправленную электронную почту и не делать аккаунты активными. Это в Конфигурации> Оформить заказ:

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

Я думаю, вам лучше не взламывать Ubercart, потому что в таком случае обновлять будет сложнее. По крайней мере, таким образом, они не получают электронную почту и не знают, что у них есть аккаунт.

Вдобавок ко всему, вам понадобится UID (требующий учетную запись пользователя), иначе каждый заказ будет по UID 0, что делает практически невозможным использование каких-либо отчетов / представлений или функций истории заказов, если что-то пойдет. неправильно.

1 голос
/ 28 августа 2011

Модуль ECO (дополнительные настройки для Ubercart) предоставляет способ сделать это для Drupal 6.x / Ubercart 2.3.

Он работает с помощью hook_menu_alter для переопределения страницыобратный вызов для пути cart/checkout/complete и замена его собственной реализацией, которая не создает нового пользователя Drupal для анонимных проверок.

Лучше, чем прямой взлом Ubercart, но все равно не идеален выгрузка основного блокафункциональности Ubercart, как это.

1 голос
/ 09 декабря 2010

Я сделал модуль, который позволяет анонимным пользователям иметь корзину и процесс оформления заказа очень короткий. Пользователь должен заполнить 4 поля при оформлении заказа (имя, адрес электронной почты, телефон и комментарий), и эти данные + содержимое корзины будут отправлены менеджерам и клиенту после отправки формы. Модуль будет опубликован на drupal.org позже.

...