我搜索了一会儿,只出现了一些解决方案,为Magento商店的产品添加了全新的选项集。
我想要实现的是将简单产品添加到购物车的方法。这个简单的产品有一些预定义的自定义选项(自由文本字段),必须由php函数填充。
那么,我该怎么做呢?假设我有一个ID为“111”的产品和一个自定义选项。
$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();
提前感谢任何人。
BTW:通过QueryString设置选项值相对容易,如here所示。
答案 0 :(得分:15)
您没有在产品型号上设置自定义选项,而是通过第二个参数将其传递给$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的早期版本编写了这个脚本。
此外,我很确定添加此方式时会触发标准的添加到购物车事件,因此您需要自行设置它们。可能有副作用。
答案 1 :(得分:4)
在Magento 1.7中,你必须将params数组包装在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);
答案 2 :(得分:1)
您应该将addproduct
的输入参数编写为以下格式,由我自己测试:
$params = array(
'product' => 1, // This would be $product->getId()
'qty' => 1,
'super_attribute' => array(
34 => "value",
35 => "other value",
53 => "some other value"
)
);
答案 3 :(得分:0)
当前答案的问题是,如果SKU相同但是选项与第一个不同,则magento不会添加第二个订单项。如果你想要一个3“苹果和4”苹果,你想要单独的项目。或者至少我这样做。
对以下网址的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 ready 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);
}
?>