I m creating a custom option programmatically using observer with the catalog_product_save_before
event.The custom option was created successfully on product save. but the problem is whenever the product saves a second time it will create the same option on every save action.So I want to remove all the options first before save and recreate all the options on save. My observer code for creating custom option is as below
public function createMyCustomOption(Varien_Event_Observer $observer)
{
//Mage::getSingleton('catalog/product_option')->unsetOptions();
$this->saveProductTabData($observer);
$product = $observer->getProduct();
$globlaOptions = unserialize(Mage::getStoreConfig("toursection/tourgroup/product_option"));
$globlaOptionsArray = array();
foreach ($globlaOptions as $key=>$value){
$item['optiontitle'] = $value['optiontitle'];
$item['optionprice'] = $value['optionprice'];
$globlaOptionsArray[] = $item;
}
//print_r($globlaOptionsArray);
//print_r($options);exit;
$options = $product->getProductOptions();
echo '<pre>';
print_r($options);exit;
/*if ($options) {
foreach ($options as $option) {
if ($option['title'] == 'Adult' || $option['title'] == 'Child') {
return;
}
}
}*/
$noOfAdult = Mage::getStoreConfig("toursection/tourgroup/noofadult");
$noOfchild = Mage::getStoreConfig("toursection/tourgroup/nofochild");
$adultPrice = $product->getAdultOurprice();
$childPrice = $product->getChildOurprice();
if(!$product_id = Mage::app()->getRequest()->getParam('id')){
$productModel = Mage::getModel('catalog/product');
$product_entity_table = $productModel->getResource()->getEntityTable();
$resource = Mage::getSingleton('core/resource');
$connection = $resource->getConnection('core_read');
$result = $connection->showTableStatus($product_entity_table);
$product_id = $result['Auto_increment'];
}
$optionModel = Mage::getModel('touroptions/touroptions')->load($product_id,'product_id');
$tourOptionArray = unserialize($optionModel->getTouroptions());
print_r($tourOptionArray);
$optionsTitle = array('Adult','Child');
$optionsPrice = array($adultPrice,$childPrice);
$noOfOption = array(
$noOfAdult,
$noOfchild
);
$optionsSku = array(NULL,NULL);
$isRequired = array(
1
);
$typeArray = array(
'drop_down',
'drop_down'
);
$inc = 0;
foreach($globlaOptionsArray as $title){
if(!in_array($title['optiontitle'],$tourOptionArray)){
continue;
}
$optionsTitle[]=$title['optiontitle'];
$optionsPrice[]=$title['optionprice'];
$noOfOption[] = '1';
$optionsSku[] = $tourOptionArray['optionsku'][$inc];
$isRequired[] = 0;
$typeArray[] = 'checkbox';
$inc++;
}
$optionsArray = $this->getOptions($optionsTitle, $typeArray, $noOfOption, $optionsPrice, $isRequired , $optionsSku);
//echo '<pre>';
//print_r($optionsArray);exit;
try {
$product->setCanSaveCustomOptions(true);
foreach ($optionsArray as $option) {
$product->getOptionInstance()->addOption($option);
}
$product->setHasOptions(true);
}
catch (Exception $e) {
Mage::Log($e->getMessage());
}
}
protected function getOptions($optionsTitle = '', $typeArray = '', $noOfOption, $optionsPrice, $isRequired, $optionsSku)
{
if (is_array($optionsTitle)) {
$j = 0;
foreach ($optionsTitle as $ttl) {
$option[$j] = array();
$optionvalue = array();
$option[$j]['title'] = $ttl;
$option[$j]['type'] = $typeArray[$j];
$option[$j]['is_require'] = $isRequired[$j];
$option[$j]['sort_order'] = $j;
for ($i = 1; $i <= $noOfOption[$j]; $i++) {
$optionvalue[$i]['title'] = $i;
$optionvalue[$i]['price'] = $i * $optionsPrice[$j];
$optionvalue[$i]['price_type'] = 'fixed';
$optionvalue[$i]['sku'] = $optionsSku[$j];
$optionvalue[$i]['sort_order'] = $i;
}
$option[$j]['values'] = $optionvalue;
$j++;
}
}
return $option;
}
any help would be much appreciated.
Thanks.
Best Answer
Try this before adding your new options: