【问题标题】:Programmatically add product in cart - empty cart以编程方式将产品添加到购物车 - 清空购物车
【发布时间】:2013-12-12 20:31:43
【问题描述】:

我正在尝试将产品添加到购物车中,但购物车仍为空。 这是我的代码

try{
    $product_model = Mage::getSingleton('catalog/product');

    // Load product
    $_sku = "1-574#AD-B00731";
    $my_product_id  = $product_model->getIdBySku($_sku);
    $my_product     = $product_model->load($my_product_id);
    $qty_value = 1;

    // Add to cart 
    $cart = Mage::getModel('checkout/cart');
    $cart->init();
    $cart->addProduct($my_product, array('qty' => $qty_value));
    $cart->save();
    print_r($cart->getItemsQty().PHP_EOL);
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
    var_dump("working");
 }
catch(Exception $e){
    return $e->getMessage();
}

当我打印$cart->getItemsQty() 时,我的商品数量在增加,但我的购物车仍然是空的。我认为是Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 工作不正常。

有人知道什么不起作用吗?

编辑 1:我使用 Magento 1.8.0,所以通过 url 查询由于 form_key 而不起作用

【问题讨论】:

    标签: php magento cart


    【解决方案1】:

    尝试改变

    $cart = Mage::getModel('checkout/cart');
    

    $cart = Mage::getSingleton('checkout/cart');
    

    Cart 是一个单例,因为您的商店中只有 1 个用户的购物车,所有想要使用它的人都可以将其称为 getSingleton,而无需创建新对象。如果你使用 Mage::getModel('checkout/cart') 它将创建一个新对象。是的,它将允许您将报价保存到数据库,但这不会是当前活跃的客户购物车。

    【讨论】:

    • 如何获取客户的购物车?
    • 您是否按照我的建议更改脚本?要获取当前客户购物车,请使用 Mage::getSingleton('checkout/cart')->getQuote();或 Mage::getSingleton('checkout/session')->getQuote();
    • 是的,我的购物车还是空的
    • 我刚刚覆盖了 CartController,现在我使用 URL 方法
    【解决方案2】:

    你需要刷新Itemcollection的itemcache。因为这也会从中删除quote-model,所以也必须在之后添加它

    $cart->getItems()->clear();
    $cart->getItems()->setQuote($cart->getQuote());
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多