2012-06-22 115 views
1

这可能会让我有点困惑,因为我已经尝试过所有这些工作。我想要的只是我的品牌网站(domain.com)中的一个链接,它显示了我的magento 1.5.1购物车(domain.com/shop)中的数量。我很轻松地提取了产品数据和导航块,但无论我做什么,购物车数量总是从外部magento 0。 我试过的主要途径只是在我的品牌的网站去:Magento购物车/会话数据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天。不断删除会话和缓存目录并清除缓存和禁用Mgento缓存的cookie。

这是我使用它多年后发布在这个网站上的第一个问题,我一直坚持这个为期3天!把我的头发拉出来!

回答

1

如果你想要的是为什么实例化magento的数量。只需设置一个客户端Cookie(即cart_qty),然后在您的主站点标题上读取此cookie。

+0

是的,很好的解决方案。当事情不起作用时,我会陷入一种尴尬的境地,因为它们应该不考虑用不同的方法来保护猫。谢谢 – Dave

6

我复制你的代码并在Magento 1.5,1.6和1.7上测试它。
我把代码放在Magento根目录下的一个名为test.php的PHP文件中。这是我使用的代码:

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网站上相同的值。

所以这意味着你的代码是正确的,它可能是你的域名和/或设置(当你请求你的测试脚本时浏览器发送Magento前端cookie)?

+0

嗨威奈,感谢拼尽全力那测试。至少现在我知道我不会发疯。我仍然无法看到问题,因此感到厌倦,我将与Gordon的解决方案一起使用 – Dave

+0

当文件位于magento的根文件夹中时,这将工作得非常好。但是我相信当文件位于根目录之外时,它不起作用。 – Shatir

+0

只要该文件是Magento Cookie域的一部分,它就可以工作,因此它取决于您的Web服务器设置,然后取决于文件系统上的位置。 – Vinai

1

认为你忘了:

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

Mage::app() 
2

你的代码是好的,但默认情况下Magento的 “前端” cookie是不是Magento的(外访问,所以你不能访问会话数据)。您需要在管理>系统>配置>网络>会话Cookie管理> Cookie路径中更改Cookie的路径。尝试设置到/

0

在你的代码:相反的:

Mage::app(); 

使用

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

& U将得到你的输出...