我目前正尝试通过以下方式将自定义选项添加到特定订单行的“添加到购物车”中:
public function addToPackageQuote()
{
$cart = Mage::getSingleton("checkout/cart");
$quote = Mage::getSingleton("checkout/session")->getQuote();
$packageId = Mage::getModel('MyTuxedo_OPP/Package')->checkPackageId();
$products = $this->sortArray();
foreach ($products as $productInfo) {
try {
$split = explode(",", $productInfo);
$_product = Mage::getModel('catalog/product')->load($split[0]);
if($_product->isConfigurable()) {
$simpleId = $this->getConfigurableSimple($split[1],$split[3],$split[0]);
} else {
$simpleId = $split[0];
}
$product = Mage::getModel('catalog/product')->load($simpleId);
$options = new Varien_Object(array(
"qty" => 1,
"custom_options" => array(
"package" => $packageId,
"packageName" => Mage::helper('MyTuxedo_OPP')->getPackageName()
)
));
$quote->addProduct($product, $options);
$this->_getSession()->setCartWasUpdated(true);
$quote->save();
} catch (Exception $e) {
echo $e->getMessage();
}
$this->addFreeItems();
}
$cart->save();
unset($_SESSION['products']);
unset($_SESSION['productId']);
$cart->save();
// Let's unset all the package sessions (apart from a few that are needed!).
$this->kill();
}
此方法完全独立于一般的添加到购物车处理程序,仅在软件包系统中使用,因此它只添加简单产品(也会分解可配置超级属性以查找简单产品)。
这些简单的产品在Magento后端没有附加自定义选项,也不是一个目标来添加自定义选项到产品本身。我想做的是附加自定义选项到订单行,然后转移到订单,如果购买了。所以有效的数据是在添加到购物车的方法添加,而不是在其他地方!
add to cart方法按预期工作,只是不包括我试图附加的自定义选项。我还尝试将options对象定义为简单的对象:
$options = new Varien_Object(array(
"qty" => 1,
"package" => $packageId,
"packageName" => Mage::helper('MyTuxedo_OPP')->getPackageName()
)
上面的信息,不包括数量,根本不在orderline对象中,我似乎无法找到从这里继续前进的地方。
现在不停地在谷歌上搜索,所以一些帮助将是最感激的!!
我很感激我在这里两次示例化产品模型对象,但是计划只是让它工作,然后优化!:)
2条答案
按热度按时间vh0rcniy1#
您必须在将产品添加到购物车之前设置产品的自定义选项。
在
Mage_Sales_Model_Quote::_addCatalogProduct()
中,自定义选项将添加到购物车项目中。另请参阅此处:http://www.magentocommerce.com/boards/viewthread/49659/
顺便说一句:您的代码可能会很慢,因为您在foreach循环中加载了两次产品。您应该考虑使用产品集合进行一些重构。而且,直接访问
$_SESSION
变量看起来有点笨拙。您可以使用Checkout Session来实现(Mage::getSingleton('checkout/session')
)。bwleehnv2#
我现在已经解决了这个问题,经过了很多头痛。你可以添加一个自定义选项到购物车,而不必示例化产品对象和保存一个自定义选项来做到这一点,它可以通过钉到一个观察者,并拉报价项目。
钉后:销售报价单添加物料
我接着用:
最重要的是要包含产品对象和id,因为函数出于某种原因不使用加载的对象。
然后,您可以通过以下方式获取对象:
一个简单的信息,如果它在你面前转储一个堆栈跟踪,它找不到定义的选项,请放弃getValue()(如果使用var_dump)函数,看看你是否得到了一个空值,否则xdebug会给予你一大堆提示来解决它。