Я бы хотел, чтобы анонимные пользователи покупали продукт, но при этом не создавали новую учетную запись.
К сожалению, создание нового пользователя, похоже, очень тесно интегрировано в систему заказов 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);
}