Вопрос по session, magento, cart – Данные корзины / сеанса Magento за пределами magento

1

Это может немного сбить с толку, так как я попробовал все, чтобы сделать эту работу. Все, что я хочу, - это ссылка на сайте моего бренда (domain.com), которая показывает количество в моей корзине magento 1.5.1 (domain.com/shop). Я довольно легко вытащил данные о продукте и блоки навигации, но неважно, что я делаю Количество в корзине всегда равно 0 снаружи magento. Основной способ, которым я пытался, был только на моем сайте бренда:

    require_once $_SERVER['DOCUMENT_ROOT'].'/shop/app/Mage.php';
    umask(0);
    Mage::app();        
    Mage::getSingleton('core/session', array('name'=>'frontend'));
    // trying everything 
    Mage::getSingleton('checkout/cart')->getItemsCount(); // returns 0
    Mage::helper('checkout/cart')->getItemsCount(); // returns 0
    Mage::getSingleton('customer/session')->isLoggedIn(); // returns blank
    Mage::helper('checkout/cart')->getCart()->getItemsCount(); // returns 0
    Mage::helper('checkout/cart')->getCart()->getQuote()->getItemsCount(); // returns blank

Затем, когда ни один из них не сработал, я создал шаблон в Magento просто для того, чтобы дать мне количество корзин в виде блока, который возвращает блок в порядке, но все еще ноль в корзине!

    $block = $this->layout->createBlock('core/template');
    $block->setTemplate('page/html/cartForBrand.phtml');
    return $block->renderView();

и блок в magento просто

    Mage::getSingleton('core/session', array('name'=>'frontend'));
    $cart = Mage::getModel('checkout/cart')->getQuote()->getData()['items_qty'];

Я видел много людей, имеющих подобные проблемы:/ session_cookie_management, .domain.com cookie_domain(даже если это зависит от поддомена), я прочитал и перепробовал все, что смог найти в течение 2 дней. Постоянное удаление каталогов сеансов и каталогов, а также очистка кэша и файлов cookie с отключенным кэшированием magento.

Это первый вопрос, который я разместил на этом сайте после его использования в течение многих лет, я застрял на нем в течение 3 дней! Выдернуть мои волосы!

Ваш Ответ

5   ответов
2

Ваш код хорош, но по умолчанию Magento & s "quot; frontend & quot; cookie недоступен за пределами Magento (и поэтому вы не можете получить доступ к данным сеанса). Вам нужно изменить путь к cookie в Admin & gt; Система & gt; Конфигурация & gt; Интернет & gt; Управление сессионными файлами cookie & gt; Путь Печенья. Попробуйте установить это в /

1

Если все, что вы хотите, это кол-во, зачем создавать magento. Просто установите файл cookie на стороне клиента (т.е. cart_qty), а затем прочитайте этот файл cookie в заголовке вашего основного сайта.

да, хорошее решение. Я застреваю в колее, когда все работает не так, как должно, не думая о разных способах кожи кошки. Спасибо Dave
0

В вашем коде: вместо:

Mage::app();

использование

Mage::app()->loadArea('frontend');

& Амп; ты получишь свой вывод ...

7

Я скопировал ваш код и проверил его на Magento 1.5, 1.6 и 1.7.
Я поместил код в файл PHP под названиемtest.php в корневом каталоге Magento. Это код, который я использовал:

umask(0);
require_once 'app/Mage.php';
Mage::app();

Mage::getSingleton('core/session', array('name'=>'frontend'));

var_dump(array(
    "Mage::getSingleton('checkout/cart')->getItemsCount()" =>
    Mage::getSingleton('checkout/cart')->getItemsCount()
)); // returns number of items (w/o qty)
var_dump(array(
    "Mage::helper('checkout/cart')->getSummaryCount()" =>
        Mage::helper('checkout/cart')->getSummaryCount()
)); // returns number according to configuration
var_dump(array(
    "Mage::getSingleton('customer/session')->isLoggedIn()" =>
    Mage::getSingleton('customer/session')->isLoggedIn()
)); // returns bool true|false

Экземпляры Magento используют локальные имена хостов тестирования magento15.dev, magento16.dev и magento17.dev.

Я запросил соответствующие экземпляры Magento и поместил товар в корзину (протестирован с настраиваемым и простым продуктом), а затем обновил количество товара в корзине.

Между каждым шагом я перезагружалtest.php файл в браузере.
Результат всегда один и тот же: он работает как положено. Каждый вызов возвращает те же значения, что и на сайте Magento.

Таким образом, это означает, что ваш код правильный, это может быть ваш домен и / или настройки (отправляет ли браузер файл cookie внешнего интерфейса Magento, когда вы запрашиваете тестовый скрипт)?

Это будет прекрасно работать, когда файл находится в корневой папке magento. Однако я считаю, что это не сработает, если файл находится за пределами корневого каталога.
Привет @ Vinai, в моем случае это не работает.
Пока файл является частью домена cookie Magento, он будет работать, поэтому он зависит от настроек вашего веб-сервера, а затем от местоположения в файловой системе.
Привет Vinai, спасибо за все эти испытания. По крайней мере, теперь я знаю, что я не схожу с ума. Я все еще не вижу проблемы, и мне ее так надоело, что я собираюсь пойти с решением Гордона Dave
1

Думаю, что вы забыли:

Mage::app()->setCurrentStore(1);  // replace 1 with your store id

после

Mage::app()

Похожие вопросы