如何在Magento

时间:2015-06-12 13:45:57

标签: php magento session

我无法在Magento中以编程方式将产品添加到购物车,我已经尝试了将所有可能的技术添加到购物车中的产品(在Magento中),以下是我尝试的内容和论坛/网站的帮助。但他们都没有工作。我正在使用Magento社区版1.9.1.1。如果有人有任何建议/答案,请分享。

  • 试图通过网址进行操作 - 例如[Magento_Store_URL]/checkout/cart/add?product=[id]&qty=[qty]甚至是这样的 - [Magento_Store_URL]/checkout/cart/add/product/[id]/qty/[qty]。我还尝试了通过form_key生成的Mage::getSingleton('core/session')->getFormKey();。所有这些东西根本不起作用。这里提到了这些内容 - Magento website
  • 接下来,我已经尝试过编程方式,就像这样。



<?php 
require_once 'app/Mage.php'; 
Mage::app(); 
$product=new Mage_Catalog_Model_Product();
$product->load(1); // 1 is product id, this is simple product ( type)
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->addProduct($product, 1 ); // quantity is 1
$cart = Mage::getSingleton('checkout/cart');
$cart->init(); // tried commenting this too!
$cart->addProduct($product, 1 ); // quantity is 1
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
$quote->collectTotals()->save(); header('Location: '. 'http://localhost/magento/index.php/checkout/cart');
&#13;
&#13;
&#13;

  • 也尝试了以下。

&#13;
&#13;
<?php
require_once 'app/Mage.php';
Mage::app();
$params=array( 'product'=>1, 'qty' => 3 );
$cart = Mage::getSingleton('checkout/cart');
$product = new Mage_Catalog_Model_Product();
$product->load($params["product"]);
$cart->addProduct($product, $params);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
header('Location: '. 'http://localhost/magento/index.php/checkout/cart');
&#13;
&#13;
&#13;

我从以下网站获得了帮助。

我的代码中是否有任何错误,无论我尝试过什么,或者我的Magento安装有任何设置问题?

更新1 我在下面的答案proposed to this question中尝试了,仍然是工作。

&#13;
&#13;
$formKey = Mage::getSingleton('core/session')->getFormKey();
$params = array(
    'product' => 3,
    'qty' => 2,
	'form_key' => $formKey
);
$product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($params['product']);
$cart = Mage::helper('checkout/cart')->getCart();
$cart->addProduct($product, $params);
$cart->save();
&#13;
&#13;
&#13;

更新2

这是有效的,如果我创建一个控制器并将所有代码放在那里,而不是工作 - 在一个引用/app/Mage.php的独立页面中。

2 个答案:

答案 0 :(得分:2)

自1.8以来,您无法仅通过GET请求将产品添加到购物车,因为您需要提供form_key。

您应该可以使用以下内容将产品添加到购物车:

form_key是最重要的事情。

$params //should include at least a valid form_key, qty

$product = Mage::getModel('catalog/product')
                    ->setStoreId(
                        Mage::app()
                        ->getStore()
                        ->getId()
                    )
                    ->load($product_id);

$cart = Mage::helper('checkout/cart')->getCart();
$cart->addProduct($product, $params);
$cart->save();

如果需要调试(然后在app \ code \ core \ Mage \ Sales \中,请查看app \ code \ core \ Mage \ Checkout \ Model \ Cart.php中的addProduct函数Model \ Quote.php也是)

答案 1 :(得分:0)

以下是将产品添加到购物车/报价的简便方法:

$customer = Mage::getModel('customer/customer')->load($customerId);
$product = Mage::getModel('catalog/product')->load($productId);
// load quote by customer and store...
$quote = Mage::getModel('sales/quote')->setStore($storeId)->loadByCustomer($customerId);
$quote->addProduct($product, 1);
$quote->setIsActive(1);
$quote->collectTotals()->save();