Анонимный заказ не работает должным образом
Анонимные пользователи по умолчанию должны иметь доступ к торговой корзине/оформлению заказа. В моем текущем проекте корзина остается пустой для анонимных пользователей, даже если заказ создан. Когда анонимный пользователь нажимает на Добавить в корзину, новый заказ создается правильно, со статусом Принадлежит анонимному . Это прекрасно, но:
-
В то время как текущая страница продукта перезагружается, как и ожидалось, было добавлено правило, отображающее сообщение по умолчанию (Foo в вашу корзину) не уволен
-
Если я вручную перейду в /корзину, я получу сообщение Корзина пуста. /проверка возвращает ошибку 404.
-
$_SESSION
остается пустым (я уточняю это из-заcommerce_checkout_access()
).if (empty($_SESSION['commerce_cart_orders']) || !in_array($order->order_id, $_SESSION['commerce_cart_orders'])) { return FALSE; }
На самом деле, кажется, что в анонимном контексте порядок не виден.
Как мне отладить, почему корзина остается пустой, а заказ не виден анонимным пользователям?
Моя конфигурация: очищайте шаг за шагом Коммерческая установка, а не запуск; некоторые пользовательские позиции ; Доступ к оформлению заказа / Просмотр собственных заказов любого типа/ Просмотр любого продукта любого типа разрешения, предоставленные для анонимных.
2 answers
Счастливый конец и глупо потерянное время: единственной проблемой было то, что Анонимный пользователь был случайно удален (не знаю как)! Я благодарю всех джентльменов, которые пытались помочь мне отладить.
Идентификатор uid 0 обязательно должен быть там. Если вы столкнулись с таким случаем, просто вставьте пустую строку в таблицу пользователей через phpmyadmin или запустите эти 2 запроса (для D7):
insert into users (name, pass, mail, theme, signature, language, init, timezone) values ('', '', '', '', '', '', '', '');
update users set uid = 0 where name = '';
Тем временем я прочитал много вещей о Коммерческом оформлении заказа, чтобы убедиться, что я все делал правильно. Я поделитесь некоторыми подсказками ниже на случай, если это может помочь кому-то еще.
Распространенная проблема для пустой страницы корзины (и других проблем с коммерческими представлениями, когда пользователь не может видеть товары) связана с Отношениями с продуктами: 2 решения могут работать в зависимости от вашей конфигурации:
- В наборе полей дополнительных настроек представления отключите перезапись SQL.
- Включите не совсем безопасное разрешение
View any product of any type
. Это обсуждается и исправляется здесь. Если у вас есть Общий доступ дистрибутив, вам придется отключить паранойя (отключить только с помощью Drush, это не отображается в списке модулей).
Важные разрешения для предоставления (администратор/люди/разрешения):
- Анонимный :
- Оформить заказ =>Получить доступ к оформлению заказа
- Заказ =>Создавать заказы любого типа /Создавать заказы
- Аутентифицированный: те же самые, плюс
- Заказ => Просмотр собственных заказов любого типа / Просмотр собственных заказы
Поведение по умолчанию в Drupal Commerce :
Анонимные пользователи могут добавить товар в корзину, оформить заказ (указав адрес электронной почты, имя и адрес), просмотреть и завершить заказ. Некоторая документация для чтения: Оформление заказа: Анонимный против Аутентифицированные и Анонимные тележки и Зарегистрированные пользователи
Несколько полезных советов и ссылок для улучшения проверки по умолчанию
Как автоматически войти в систему анонимного пользователя, у которого завершена проверка? Согласно ответу duckx, вы можете получить это в 3 коротких шага: проверка вышеуказанных правил, включение Полной регистрации при оформлении заказа в коммерции или Немедленного входа в коммерцию, добавление действия входа в систему к правилу по умолчанию "Создать новую учетную запись для анонимного заказа".
-
Используйте Логин для оформления заказа в коммерческом магазине , чтобы обеспечить проверку электронной почты и встроенную форму входа через AJAX.
Если адрес электронной почты ввод анонимного пользователя уже связан с учетной записью пользователя, форма оформления заказа расширится с дополнительным текстовым полем пароля и кнопкой входа для немедленного входа.
Используйте популярное Перенаправление при оформлении заказа в коммерческом магазине , чтобы перенаправлять анонимных пользователей на страницу, где они могут войти в систему или создать новую учетную запись при попытке оформления заказа. Доступно множество настроек...
Используйте Коммерческую адресную книгу , чтобы разрешить аутентифицированным клиентам повторно используйте ранее введенные адреса во время оформления заказа.
Как настроить Экспресс-оформление заказа (процесс оформления заказа на одной странице, который любой пользователь, включая анонимного пользователя, может выполнить в одно мгновение)
Как установить Различные способы оплаты для разных типов продуктов добавление условия в правило способа оплаты.
Использование Коммерция добавить в корзину подтверждение, чтобы открыть диалоговое окно подтверждения "добавить в корзину", отображаемое после того, как клиент добавил товар в свою корзину.
Наконец, Commerce Extra предлагает набор функций, из которых клонирует адресную информацию из учетной записи пользователя (вместо ранее сделанных заказов, как это делает адресная книга Commerce), и добавляет дополнительный шаг к оформлению заказа , чтобы пользователи могли войти в систему по желанию.
Найти файл docroot/web/сайты/все/модули/содержимое/коммерция/модули/корзина/commerce_cart.модуль
Найдите функцию commerce_cart_get_provider и заставьте ее загрузить класс Commercecartprovidersession
/**
* Returns the instantiated cart provider.
*/
function commerce_cart_get_provider($provider = NULL)
{
ctools_include('plugins');
if (empty($provider)) {
$file = DRUPAL_ROOT . '/' . drupal_get_path('module', 'commerce_cart') . "/plugins/cart_provider/CommerceCartProviderSession.class.php";
require_once($file);
$class = 'CommerceCartProviderSession';
return new $class();
// the following line was not working
// $provider = variable_get('commerce_cart_provider', COMMERCE_CART_DEFAULT_PROVIDER);
}
// Return NULL if the class could not be found.
if (!$class = ctools_plugin_load_class('commerce_cart', 'cart_provider', $provider, 'class')) {
return NULL;
}
return new $class();
}