将产品添加到magento外的购物车(外部脚本)

时间:2017-11-14 09:16:21

标签: php magento magento-1.9

我必须通过外部页面将产品添加到同一网址下的购物车中。

这些页面之间的区别在于,例如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范围之外开始会议并将产品放入购物车?

2 个答案:

答案 0 :(得分:0)

一旦你加入Mage.php,你需要用

初始化Magento
Mage::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-Cookieproductpage

  

注意:不改变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;
}