i developed a module that automatically imports simple products to magento. Furthermore it adds custom options for every simple product.
As i can see in the database everything is working fine. My products are there and also the custom options.
The big problem now is, that these custom options are not visible in magento backend or frontend. If i add an additional custom option manually to any product, then the automatical created options also appear in backend and frontend. Strange thing.
Here you can see my function to create custom options for a given product. Is there anything wrong?
THX
protected function _createCustomOptionsForProduct($product, $event){
try{
// create custom options for given product
$options = array(
//'is_delete' => '',
//'previous_type' => '',
//'previous_group' => 'select',
//'id' => '1',
//'option_id' => '0',
'product_id' => $product->getId(),
'title' => 'Price Category',
'type' => 'drop_down',
'is_require' => true,
'sort_order' => '1',
'values' => array()
);
// iterate over pricecategories and their containing price models
$counter = 1;
if(count($event->getData('priceCategories')) > 1) {
foreach($event->getData('priceCategories') as $priceCategory ) {
foreach($priceCategory->getData('priceModels') as $priceModel){
// check if price model is active otherwise skip it
if($priceModel->getData('active') == true){
// fill values array of custom option
// containing price category and price model
$options['values'][] = array(
//'option_type_id' => '-1',
//'is_delete' => '',
'title' => $priceCategory->getData('name') . ' - ' . $priceModel->getData('name') ,
'price' => number_format( $priceModel->getData('price')/100, 2 ),
'price_type' => 'fixed',
'sku' => $priceModel->getData('key'), // price model key as sku
'sort_order' => $counter
);
}
$counter++;
}
}
} else {
foreach($event->getData('priceCategories')->getData('priceModels') as $priceModel){
// check if price model is active otherwise skip it
if($priceModel->getData('active') == true){
// fill values array of custom option
// containing price category and price model
$options['values'][] = array(
//'option_type_id' => '-1',
//'is_delete' => '',
'title' => $event->getData('priceCategories')->getData('name') . ' - ' . $priceModel->getData('name') ,
'price' => number_format( $priceModel->getData('price')/100, 2 ),
'price_type' => 'fixed',
'sku' => $priceModel->getData('key'), // price model key as sku
'sort_order' => $counter
);
}
$counter++;
}
}
if(count($options['values']) > 0 && !$product->getOptionsReadonly()) {
$product->setHasOptions(1);
$opt = Mage::getModel('catalog/product_option');
$opt->setProduct($product);
$opt->addOption($options);
$opt->saveOptions();
//$product->setProductOptions(array($options));
$product->setCanSaveCustomOptions(true);
return true;
}
return false;
}catch (Exception $e){
Mage::log('Error: could not create custom ticket / product options for '.
$product->getName(), ZEND_LOG::CRIT, 'blafoo.log', false);
Mage::log($e->getMessage(), ZEND_LOG::CRIT, 'blafoo.log', false);
return false;
}
Deleting caches or reindexing data didn't help.
$product->save()
after the options have been applied. – pspahn Aug 23 '13 at 19:02$product->setProductOptions(array($options))
– David Manners Jun 27 '14 at 13:43