Анонимный заказ не работает должным образом


Анонимные пользователи по умолчанию должны иметь доступ к торговой корзине/оформлению заказа. В моем текущем проекте корзина остается пустой для анонимных пользователей, даже если заказ создан. Когда анонимный пользователь нажимает на Добавить в корзину, новый заказ создается правильно, со статусом Принадлежит анонимному . Это прекрасно, но:

  • В то время как текущая страница продукта перезагружается, как и ожидалось, было добавлено правило, отображающее сообщение по умолчанию (Foo в вашу корзину) не уволен

  • Если я вручную перейду в /корзину, я получу сообщение Корзина пуста. /проверка возвращает ошибку 404.

  • $_SESSION остается пустым (я уточняю это из-за commerce_checkout_access()).

    if (empty($_SESSION['commerce_cart_orders']) || !in_array($order->order_id, $_SESSION['commerce_cart_orders'])) {
      return FALSE;
    }
    

На самом деле, кажется, что в анонимном контексте порядок не виден.

Как мне отладить, почему корзина остается пустой, а заказ не виден анонимным пользователям?

Моя конфигурация: очищайте шаг за шагом Коммерческая установка, а не запуск; некоторые пользовательские позиции ; Доступ к оформлению заказа / Просмотр собственных заказов любого типа/ Просмотр любого продукта любого типа разрешения, предоставленные для анонимных.

Author: kiamlaluno, 2014-07-18

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 :

Анонимные пользователи могут добавить товар в корзину, оформить заказ (указав адрес электронной почты, имя и адрес), просмотреть и завершить заказ. Некоторая документация для чтения: Оформление заказа: Анонимный против Аутентифицированные и Анонимные тележки и Зарегистрированные пользователи


Несколько полезных советов и ссылок для улучшения проверки по умолчанию

 8
Author: Kojo, 2017-04-13 12:46:55

Найти файл 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();
}
 0
Author: Angelos, 2020-07-18 09:08:16