1

This might get a little confusing as I have tried everything to make this work. All I want is a link in my brand site (domain.com) which shows the qty in my magento 1.5.1 cart (domain.com/shop) I quite easily pulled in product data and navigation blocks but no matter what I do, cart qty is always 0 from outside magento. The main way I tried was just in my brand site to go:

    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

Then, when none of those worked, I created a template in Magento just to give me the cart qty as a block which returns the block fine but still zero in the cart!

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

and the block in magento is simply

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

I've seen a lot of people having similar issues: / session_cookie_management, .domain.com cookie_domain(even though that's subdomain specific), I've read and tried everything I could find for 2 days. Constantly deleting session and cache directories and clearing cache and cookies with magento caching disabled.

This is the first question I've posted on this site after using it for years, I've been stuck on this for 3 days! Pulling my hair out!

Community
  • 1
  • 1
Dave
  • 1,409
  • 2
  • 18
  • 14

5 Answers5

7

I copied your code and tested it on Magento 1.5, 1.6 and 1.7.
I placed the code in a PHP file called test.php in the Magento root directory. This is the code I used:

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

The Magento instances use the local test host names magento15.dev, magento16.dev and magento17.dev.

The I requested the corresponding Magento instances and placed a product in the cart (tested with a configurable and a simple product), and then updated the quantity of the product in the cart.

Between each step I reloaded the test.php file in the browser.
The result is always the same: it works as expected. Each call returns the same values as on the Magento site.

So this means your code is correct, it might be your domain and/or setup (is the browser sending the Magento frontend cookie when you request your test script)?

Vinai
  • 14,162
  • 2
  • 49
  • 69
  • Hi Vinai, thanks for doing all that testing. At least now I know I'm not going crazy. I still can't see the problem though and so sick of it, I'm going to go with Gordon's solution – Dave Jun 25 '12 at 03:23
  • This would work great when the file is in the root folder of magento. However I believe it wouldn't work when the file is located outside the root directory. – Shatir Sep 04 '13 at 04:47
  • As long as the file is part of the Magento cookie domain it will work, so it depends on your Webserver setup then the location on the file system. – Vinai Sep 11 '13 at 08:03
2

Your code is good, but by default Magento's "frontend" cookie isn't accessible outside of Magento (and so you can't access session data). You'll need to change the cookie's path in Admin > System > Configuration > Web > Session Cookie Management > Cookie Path. Try setting that to /

geppy
  • 604
  • 8
  • 10
1

If all you want is the qty why instantiate magento at all. Just set a client side cookie (ie cart_qty) and then read this cookie on your main site header.

  • yeah, good solution. I get stuck in a rut when things don't work as they should without thinking about different ways to skin the cat. Thanks – Dave Jun 25 '12 at 03:25
1

Think you forgot:

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

after

Mage::app()
Lan Nguyen
  • 445
  • 2
  • 6
  • 13
0

In Your Code: Instead of:

Mage::app();

use

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

& u will get your output...

Shashank
  • 425
  • 5
  • 10