我必须通过外部页面将产品添加到同一网址下的购物车中。
这些页面之间的区别在于,例如test.de
正在运行TYPO3,test.de/Shop
正在运行Magento,而test.de/productpage
正在通过TYPO3运行外部脚本。
在产品页面中,我必须将产品添加到Magento购物车中以进行结帐。
关键问题是在Magento之外开始会话。
如果我在转到test.de/Shop/checkout/cart
并将产品添加到购物车之前致电test.de/productpage
,它就可以完美运行。
但如果我按正常方式(网站 - > productpage - >购物车),我无法让Magento在产品页面上收听会话。
我有类似的东西要打电话
function addToBasket()
{
require_once('../app/Mage.php');
ob_start();
session_start();
umask(0);
session_write_close();
Mage::app()->setCurrentStore(33);
$session = Mage::getSingleton('core/session', array('name'=>'frontend'));
$productId = !isset($_GET['activeProdId']) ? '' : $_GET['activeProdId'];
$qty = !isset($_GET['qty']) ? '1' : $_GET['qty'];
if(empty($productId)) {
return "no product-id found";
}
$request = Mage::app()->getRequest();
$product = Mage::getModel('catalog/product')->load($productId);
$cart = Mage::helper('checkout/cart')->getCart();
$cart->addProduct($product, array('qty' => $qty));
$session->setLastAddedProductId($product->getId());
$session->setCartWasUpdated(true);
$cart->save();
return true;
}
通过ajax调用addToBasket。
所以问题是:我如何在Magento范围之外开始会议并将产品放入购物车?
答案 0 :(得分:0)
一旦你加入Mage.php,你需要用
初始化MagentoMage::app("default");
(第一个参数是商店代码)
之后......Mage::getSingleton('core/session', array('name'=>'frontend'));
......将按预期工作。
答案 1 :(得分:0)
首先添加(如 @samsonovits 建议)我必须在mage应用程序和商店ID中添加商店代码(如果在添加商店后需要store-id,则不测试码)。
Mage::app("default")->setCurrentStore(33);
之后我在Mage::app
Mage::app()->loadArea('frontend');
我将Mage::helper('checkout/cart')
切换为单身Mage::getSingleton('checkout/cart')
。
自Magento 1.8
起,我们必须添加form_key
以通过外部脚本添加产品。
这是通过以下代码完成的:
$param = array('product' => $productId,
'qty' => $qty,
'form_key' => Mage::getSingleton('core/session')->getFormKey());
$request = new Varien_Object();
$request->setData($param);
现在我们可以继续使用$cart->addProduct($product, $request)
和$cart->save()
来保存购物车。
还有一个要改变的重要部分(因为外部脚本与magento不在同一个范围内) - cookie网址和路径。
系统 - >配置 - >网络 - >饼干
我们必须自定义两个字段:
Cookie-Path: /Shop
(其中/Shop
是magento的目的地)
Cookie-Domain: .test.de
(其中.test.de
是项目的网址)
在此之后,/Shop/checkout/cart
能够继承外部脚本的frontend-Cookie
(productpage
)
注意:不改变Cookie-Path& Cookie-Domain Magento将创建两个具有不同内容的前端cookie。
完整代码:
function addToBasket()
{
require_once('path/to/Mage.php');
umask(0);
Mage::app("default")->setCurrentStore(33);
umask(0);
Mage::app()->loadArea('frontend');
$productId = !isset($_GET['activeProdId']) ? '' : $_GET['activeProdId'];
$qty = !isset($_GET['qty']) ? '1' : $_GET['qty'];
Mage::getSingleton("core/session", array("name" => "frontend"));
$session = Mage::getSingleton("customer/session");
$cart = Mage::getSingleton('checkout/cart')->setStoreId(33);
$cart->init();
$paramater = array('product' => $productId,
'qty' => $qty,
'form_key' => Mage::getSingleton('core/session')->getFormKey()
);
$request = new Varien_Object();
$request->setData($paramater);
if(empty($productId)) {
return "no product-id found";
}
$product = Mage::getModel('catalog/product')->load($productId);
$cart->addProduct($product, $request);
$session->setLastAddedProductId($product->getId());
$session->setCartWasUpdated(true);
$cart->save();
return 1;
}