gpt4 book ai didi

magento - 添加额外的项目到购物车(观察者)

转载 作者:行者123 更新时间:2023-12-02 22:13:28 29 4
gpt4 key购买 nike

我尝试将额外的产品添加到购物车。我为此创建了一个观察者。

<?php
class WP_Plugadapter_Model_Observer
{

public function hookToControllerActionPostDispatch($observer)
{
if($observer->getEvent()->getControllerAction()->getFullActionName() == 'checkout_cart_add')
{
Mage::dispatchEvent("add_to_cart_after", array('request' => $observer->getControllerAction()->getRequest()));
}
}

public function hookToAddToCartAfter($observer)
{

$request = $observer->getEvent()->getRequest()->getParams();
$_product = Mage::getModel('catalog/product')->load($request['product']);
$extra_functions = $_product->getExtra_functions();

if(!empty($extra_functions)){

$extra_functions = explode(',', $extra_functions);
if(array_search('121', $extra_functions)){

$cart = Mage::getSingleton('checkout/cart');
$cart->addProduct(10934, 1);
$cart->save();

if (!$cart->getQuote()->getHasError()){
Mage::log("Product ADD TO CART is added to cart.");
}else{
Mage::log("BOEM");
}

}

}

}

}

当我检查我的系统日志时,我看到以下日志消息。 产品 ADD TO CART 已添加到购物车。

我不知道我做错了什么。当独立加载脚本时,它工作正常。例如:

<?php

include_once '../app/Mage.php';

Mage::app();
umask(0);

$session = Mage::getSingleton('core/session', array('name'=>'frontend'));
$cart = Mage::getSingleton('checkout/cart');
$cart->addProduct(10934, 1);
$cart->save();

是否有可能在观察者中以不同的方式做到这一点?

最佳答案

问题是购物车的报价对象没有保存到数据库中,稍后在请求处理中被 session 中的报价对象覆盖。为什么不保存购物车报价很令人困惑。报价模型的save 方法需要内部属性_hasDataChanges 设置为true。但是,此属性仍为 false,即使已将产品添加到报价中也是如此。

您可以通过使用 setData 方法向引用添加一些数据(任何属性都可以)来强制将该属性设置为 true:

                $cart = Mage::getSingleton('checkout/cart'); 
$cart->addProduct(10934, 1);
//force _hasDataChanges to true
$cart->getQuote()->setData('updated', true);
$cart->save();

或者,您可以使用结帐 session 报价对象将产品添加到购物车

 if(array_search('121', $extra_functions)){

$cart = Mage::getSingleton('checkout/cart');
$qty = 1;
$quote = Mage::getSingleton('checkout/session')->getQuote()
->addProduct(
Mage::getModel('catalog/product')->load(10934),
$qty)
->save();
$cart->save();

if (!$cart->getQuote()->getHasError()){
Mage::log("Product ADD TO CART is added to cart.");
}else{
Mage::log("BOEM");
}

}

关于magento - 添加额外的项目到购物车(观察者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856984/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com