Php 将选项值添加到产品,然后添加到带有Magento的购物车
我四处搜索了一段时间,只找到了为Magento商店的产品添加全新选项集的wit解决方案 我试图实现的是一种向购物车添加简单产品的方法。这个简单的产品有一些预先定义的自定义选项(自由文本字段),必须由php函数填充 那么,我该怎么做呢?假设我有一个ID为“111”的产品和一个自定义选项Php 将选项值添加到产品,然后添加到带有Magento的购物车,php,magento,Php,Magento,我四处搜索了一段时间,只找到了为Magento商店的产品添加全新选项集的wit解决方案 我试图实现的是一种向购物车添加简单产品的方法。这个简单的产品有一些预先定义的自定义选项(自由文本字段),必须由php函数填充 那么,我该怎么做呢?假设我有一个ID为“111”的产品和一个自定义选项 $qty = '1'; $product = Mage::getModel('catalog/product')->load("111"); // set option value in product mo
$qty = '1';
$product = Mage::getModel('catalog/product')->load("111");
// set option value in product model?
$cart = Mage::helper('checkout/cart')->getCart();
$cart->addProduct($product, $qty);
// set option value while passing product to car?
$cart->save();
提前感谢您的帮助
顺便说一句:通过QueryString设置选项值相对容易 您没有在产品模型上设置自定义选项,而是通过第二个参数将其传递到
$cart->addProduct($product,$params)
我们为需要外部应用程序才能添加到Magento购物车的项目所做的设置是使用以下格式的$params
数组:
$params = array(
'product' => 1, // This would be $product->getId()
'qty' => 1,
'options' => array(
34 => "value",
35 => "other value",
53 => "some other value"
)
);
$params['options']
包含自定义选项信息。这些键是自定义选项ID,如果使用Firebug或类似工具检查产品屏幕的“自定义选项”部分,您可以看到它们
$params['product']
可能是多余的,我不久前为一个更早版本的Magento编写了这个脚本
另外,我相当肯定,当您以这种方式添加时,标准的add-to-cart事件将触发,因此您需要自己设置它们。可能会有副作用。当前答案的问题是,如果SKU相同,但选项与第一个不同,则magento不会添加第二行项目。如果你想要一个3英寸的苹果和一个4英寸的苹果,你希望有单独的行项目。至少我知道 对以下URL的HTTP调用
/store/checkout/cart/add?product=23&qty=1&options[41]=4
接
/store/checkout/cart/add?product=23&qty=1&options[41]=3
将添加两个行项目
但这仍然只是战斗的一半,这些选项代码代表什么??下面的PHP代码将告诉您。由于我们使用的是HTTP调用,代码将返回javascript就绪的JSON
<?php
include_once '../app/Mage.php';
Mage::app();
echo getProductOptionsIds($_GET['eventcode']);
function getProductOptionsIds($sku)
{
$ProductID = Mage::getModel('catalog/product')->getIdBySku($sku);
$Product = Mage::getModel('catalog/product')->load($ProductID);
$config = array();
$config['ProductID'] = $ProductID;
foreach ($Product->getOptions() as $option) {
// @var $option Mage_Catalog_Model_Product_Option
if ($option->getGroupByType() == Mage_Catalog_Model_Product_Option::OPTION_GROUP_SELECT) {
$_tmpValues = array();
foreach ($option->getValues() as $value) {
// @var $value Mage_Catalog_Model_Product_Option_Value
$_tmpValues[$value->getTitle()] = $value->getId();
}
$config[$option->getTitle().'list'] = $option->getId();
$optionValue = $_tmpValues;
} else {
$optionValue = $option->getId();
}
$config[$option->getTitle()] = $optionValue;
}
return json_encode($config);
}
?>
您应该按照以下格式编写
addproduct
的输入参数,由我自己测试:
$params = array(
'product' => 1, // This would be $product->getId()
'qty' => 1,
'super_attribute' => array(
34 => "value",
35 => "other value",
53 => "some other value"
)
);
在Magento 1.7中,必须将参数数组包装在Varien对象中
$params = array(
'product' => $_fancypack->getId(),
'qty' => 1,
'options' => array(
$this->_getOptionId($_fancypack,'Product SKU') => $product->getId() .'/'. $product->getSku()
)
);
$request = new Varien_Object();
$request->setData($params);
$quote->addProduct($_fancypack, $request);
谢谢你,尼克!在Magento 1.4.1.1中进行了测试,效果与预期一致。在我的情况下,它是一个可配置的产品,我如何实现这一点?我需要从addtocart传递一个与自定义模块相关的值。我的选择是什么?我可以使用session,event,但我只会在确定没有其他方法的情况下使用。注:轮胎,使所有类型的产品通用。谢谢!我花了半天时间和同样的麻烦搏斗!