我尝试在购物车中的产品中添加或删除自定义选项。自定义选项是在后端针对产品本身定义的,我不是试图动态地构成新的自定义选项或类似的东西。我的所有自定义选项都是单一复选框,以防它产生影响。
我在checkout_cart_update_items_after
上使用观察者并循环浏览Mage::getSingleton('checkout/session')->getQuote()->getAllItems()
。我可以看到哪些项目目前使用
$orderOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
if ( isset($orderOptions['info_buyRequest']['options']) )
// cart item has options selected.
首先,我真的希望能够删除这些自定义选项。我希望能够找到类似$item->removeOption($optionId);
的内容,但我无法找到任何方法。
在第二个实例中,我真的希望能够为项目添加自定义选项。我尝试了各种方法,包括$item->addOption(array('code'=>$optionCode, 'value'=>1));
。
我无法上班,而且我确定我只是错过了一些非常简单的事情。你能帮忙吗?
答案 0 :(得分:2)
如果要在报价项目上即时指定自定义产品选项(例如:在订单中为每个产品添加交货日期),您可以使用观察者添加自定义选项。
示例:
<controller_action_predispatch_checkout>
<observers>
<options_observer>
<class>YOUR_CLASS_NAME</class>
<method>setProductInfo</method>
</options_observer>
</observers>
</controller_action_predispatch_checkout>
$deliveryDate = $prId['delivery_date'];
if (!empty($deliveryDate)) {
$opt['options'] = array($optionID => $deliveryDate);
$request->setParams($opt);
}
return $this;
添加选项的另一种方法是
$item->addOption(array(
'code' => 'additional_options',
'value' => serialize($additionalOptions),
));
假设您有以下选项
$option = array(
'title' => 'Auto Date & Time',
'type' => 'date_time',
'is_require' => 1,
'sort_order' => 0,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => ''
);
直接获取$product->getOptionInstance()
$product->getOptionInstance()->addOption($option);
$product->setHasOptions(true); //mention that the product has custom options
删除自定义选项:
if($product->getOptions() != ''{
foreach ($product->getOptions() as $opt){
$opt->delete();
}
$product->setHasOptions(0)->save();
}
希望它有所帮助!!!