Magento Observer is one of the powerful feature of magento, it enable you to do anything on any magento event.
Like you want to run a method when customer adding product in cart, or you want to run a script when admin creating product in back-end etc.
you have to bind your method with event. here event is “catalog_product_save_before”
aa_cartmonitor/observer myDoSomethingMethod
here the method which adds custom options when u create product
public function enforceSingleOrderLimit($observer)
{
/* if (!$this->_helper->isModuleEnabled()) {
return;
}*/
$event = $observer->getEvent();
$product = $event->getProduct();
//check that we haven't made the option already
$options = $product->getOptions();
$arr = true;
//if (sizeof($options)) {
foreach ($options as $option) {
if (($option['title'] == 'Finish') && ($option['type'] == 'drop_down') && (!$option['is_delete'])) {
$arr = false;
mail('[email protected]', 'mage obj', sizeof($options));
return;
}
if (($option['title'] == 'Metal') && ($option['type'] == 'drop_down') && (!$option['is_delete'])) {
$arr = false;
return;
}
if (($option['title'] == 'Size') && ($option['type'] == 'drop_down') && (!$option['is_delete'])) {
$arr = false;
return;
}
if (($option['title'] == 'Year') && ($option['type'] == 'drop_down') && (!$option['is_delete'])) {
$arr = false;
return;
}
if (($option['title'] == 'Inside Engraving') && ($option['type'] == 'field') && (!$option['is_delete'])) {
$arr = false;
return;
}
if (($option['title'] == 'Additional Info') && ($option['type'] == 'field') && (!$option['is_delete'])) {
$arr = false;
return;
}
}
//}
$option = array(
'title' => 'Finish',
'type' => 'drop_down',
'is_require' => 1,
'sort_order' => 2,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => '',
'values' => array(
array(
'is_delete' => 0,
'title' => 'Faceted',
'price_type' => 'fixed',
'price' => 0,
'option_type_id' => -1,
),
array(
'is_delete' => 0,
'title' => 'Smooth',
'price_type' => 'fixed',
'price' => 0,
'option_type_id' => -1,
)
)
);
$option2 = array(
'title' => 'Metal',
'type' => 'drop_down',
'is_require' => 1,
'sort_order' => 1,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => '',
'values' => array(
array(
'is_delete' => 0,
'title' => '10k Gold',
'price_type' => 'fixed',
'price' => 695,
'option_type_id' => -1,
),
array(
'is_delete' => 0,
'title' => 'Celestrium',
'price_type' => 'fixed',
'price' => 1095,
'option_type_id' => -1,
)
)
);
$option3 = array(
'title' => 'Size',
'type' => 'drop_down',
'is_require' => 1,
'sort_order' => 4,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => '',
'values' => array(
array(
'is_delete' => 0,
'title' => '4',
'option_type_id' => -1,
'price' => '0.00',
'price_type' => 'fixed',
'sort_order' => 1
), array(
'is_delete' => 0,
'title' => '15.5',
'option_type_id' => -1,
'price' => '0.00',
'price_type' => 'fixed',
'sort_order' => 25
)
)
);
$option4 = array(
'title' => 'Year',
'type' => 'drop_down',
'is_require' => 1,
'sort_order' => 5,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => '',
'values' => array(
array(
'is_delete' => 0,
'title' => '2015',
'option_type_id' => -1,
'price' => '0.00',
'price_type' => 'fixed',
),array(
'is_delete' => 0,
'title' => '2014',
'option_type_id' => -1,
'price' => '0.00',
'price_type' => 'fixed',
),array(
'is_delete' => 0,
'title' => '2000',
'option_type_id' => -1,
'price' => '0.00',
'price_type' => 'fixed',
)
)
);
$option6 = array(
'title' => 'Additional Info',
'type' => 'field',
'is_require' => 0,
'sort_order' => 7,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => ''
);
$option7 = array(
'title' => 'Stone',
'type' => 'drop_down',
'is_require' => 1,
'sort_order' => 3,
'is_delete' => '',
'previous_type' => '',
'previous_group' => '',
'price' => '0.00',
'price_type' => 'fixed',
'sku' => '',
'values' => array(
array(
'is_delete' => 0,
'title' => 'Alexandrite',
'price_type' => 'fixed',
'price' => 0,
'option_type_id' => -1,
),
array(
'is_delete' => 0,
'title' => 'White Spinel',
'price_type' => 'fixed',
'price' => 0,
'option_type_id' => -1,
)
)
);
if($arr){
//don't use it like this because it has no effect
//$product->setProductOptions($options);
$product->setCanSaveCustomOptions(true);
//use it this way. Populate `$product->getOptionInstance()` directly
$product->getOptionInstance()->addOption($option);
$product->getOptionInstance()->addOption($option2);
$product->getOptionInstance()->addOption($option3);
$product->getOptionInstance()->addOption($option4);
//$product->getOptionInstance()->addOption($option5);
$product->getOptionInstance()->addOption($option6);
$product->getOptionInstance()->addOption($option7);
//don't forget to state that the product has custom options
$product->setHasOptions(true);
//$product->save();
}
}
