In this tutorial, I would like to help out Magento developers and clients with how to programmatically add/delete custom options in Magento. At the end of this post you’d be able to add/delete custom option on your Magento website with absolute ease. Here, we are with the set of codes to add custom options in Magento, followed subsequently by deleting custom options.

Programmatically add custom option in Magento:

This will be useful for everyone who want to know how custom option works and how to add/delete the custom option programmatically in front-end or automatically when product save. Only thing you have to do it is that you’ve to place the code in the right place. There are two methods to add the custom options. Let’s discuss them one-by-one in the sections below.

Method 1:

Load the product details using the product Id. For e.g., the product ID is 1

$product_id = 1;

$product = Mage::getModel(“catalog/product”)->load($product_id);

$product->getOptions() This code is used to check whether the product already has the custom options. If not then we will add the custom option array into product using the function called addOption() and saveOption().To give an array as input to the addOption(), we are using a function called, createCustomOption()

$custom_title = “Red,Green,Blue”;

$customoptions_price = “51,23,54”;

$prod_sku = “redsku,greensku,bluesku”;

$customoption_main_title = “Color”;

$option_type = “drop_down”;

$optionData[ ] = $this-> createCustomOption($custom_title, $customoptions_price, $prod_sku , $customoption_main_title,$option_type);

if(count($product->getOptions()) == 0){

foreach ($optionData as $options) {

foreach ($options as $option) {

$opt = Mage::getModel(‘catalog/product_option’);

$opt->setProduct($product);

$opt->addOption($option);

$opt->saveOptions();

}

}

$product->setHasOptions(1)->save();

}

//This function will just create and return array

function createCustomOption($value,$customoptions_price, $sku , $title, $type, $noOption = false)

{

$custom_options = array();

if ($type && $value != “” && $value) {

$values = explode(‘,’, $value);

$skus = explode(‘,’, $sku);

$customoptions_prices = explode(‘,’, $customoptions_price);

if (count($values)) {

/**If the custom option has options*/

if (! $noOption) {

$is_required = 0;

$sort_order = 0;

$custom_options[ ] = array(

‘is_delete’ => 0 ,

‘title’ => $title ,

‘previous_group’ => ” ,

‘previous_type’ => ” ,

‘type’ => $type ,

‘is_require’ => $is_required ,

‘sort_order’ => $sort_order ,

‘values’ => array()

);

for($i = 0; $i < (count($values)) ; $i++)

{

switch ($type) {

case ‘drop_down’:

case ‘radio’:

case ‘checkbox’:

case ‘multiple’:

default:

$custom_options[count($custom_options) - 1]['values'][ ] = array(

‘is_delete’ => 0 , ‘title’ => $values[$i] , ‘option_type_id’ => – 1 , ‘price_type’ => ‘fixed’ , ‘price’ => $customoptions_prices[$i] , ‘sku’ => $skus[$i] , ‘sort_order’ => ”

);

break;

}

}

return $custom_options;

}

/**If the custom option doesn’t have options | Case: area and field*/

else {

$is_required = 0;

$sort_order = ”;

$custom_options[ ] = array(

“is_delete” => 0 , “title” => $title , “previous_group” => “text” , “price_type” => ‘fixed’ , “price” => ” , “type” => $type , “is_required” => $is_required

);

return $custom_options;

}

}

}

return false;

}

$optionData[ ] = $this-> createCustomOption($custom_title, $customoptions_price, $prod_sku , $customoption_main_title,$option_type);

The createCustomOption() function, when called will return an array similar to below:

Array

(

[0] => Array

(

[0] => Array

(

[is_delete] => 0

[title] => Color

[previous_group] => ‘’

[previous_type] => ‘’

[type] => drop_down

[is_require] => 0

[sort_order] => 0

[values] => Array

(

[0] => Array

(

[is_delete] => 0

[title] => Red

[option_type_id] => 1

[price_type] => fixed

[price] => 51

[sku] => redsku

[sort_order] => 0

)

[1] => Array

(

[is_delete] => 0

[title] => Green

[option_type_id] => 1

[price_type] => fixed

[price] => 23

[sku] => greensku

[sort_order] => 1

)

[2] => Array

(

[is_delete] => 0

[title] => Blue

[option_type_id] => 1

[price_type] => fixed

[price] => 54

[sku] => bluesku

[sort_order] => 2

)

)

)

)

)

Method 2:

In other way you can add Custom option in this manner also:

$productCollection = Mage::getModel(“catalog/product”)->load(1);

$product_id = $productCollection ->getId();

$ex_cop = array();

foreach ($product->getOptions() as $value) {

$ex_cop[ ] = $value->getTitle();

}

$custome_option = array();

$optionsfield = array(

‘type’ => ‘radio’,//select

‘is_require’ => 1,

‘sort_order’ => ’0′

);

$valuesfield = array(

array(

‘title’ => ‘Option Value 1′,

‘price’ => 0.00,

‘price_type’ => ‘fixed’,

‘sku’ => ”,

‘ sort_order’ => ’1′

),

array(

‘title’ => ‘Option Value 1′,

‘price’ => 0.00,

‘price_type’ => ‘fixed’,

‘sku’ => ”,

‘sort_order’ => ’1′

)

);

$valuesfield = array();

$custome_option[ ] = array(‘title’=>’Start Date’,'options’=>$optionsfield,’values’=>$valuesfield);

foreach($custome_option as $cp){

if(!in_array($cp['title'],$ex_cop)){

Mage::helper(‘module_name’)->setCustomOption($product_id, $cp['title'], $cp['options'], $cp['values']);

}

}

In module_name/helper/data.php add function

public function setCustomOption($productId, $title, array $optionData, array $values = array())

{

$product = Mage::getModel(‘catalog/product’)->load($productId);

//$product->getAttributeSetId();

$data = array_merge( $optionData, array(

‘product_id’ => (int)$productId,

‘title’ => $title,

‘values’ => $values,

));

$product->setHasOptions(1)->save();

$option = Mage::getModel(‘catalog/product_option’)->setData($data)->setProduct($product)->save();

return $option;

}

To delete the custom option:
if($product->getOptions() != ”){
foreach ($product->getOptions() as $opt)
{
$opt->delete();
}
$product->setHasOptions(0)->save();
}

I hope this post was beneficial and helped you learn how to programmatically add/delete custom options in Magento.

- See more at: http://apptha.com/blog/how-to-programmatically-adddelete-custom-options-in-magento/#sthash.j72efsMV.dpuf

ref http://apptha.com/blog/how-to-programmatically-adddelete-custom-options-in-magento/

How to Programmatically Add/Delete Custom Options in Magento? - See more at: http://apptha.com/blog/的更多相关文章

  1. AutoMapper:Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 应用场景:ViewModel==>Mode映射的时候出错 AutoMappe ...

  2. Programmatically add an application to Windows Firewall

    Programmatically add an application to Windows Firewall 回答1   Not sure if this is the best way, but ...

  3. Add&Delete WindowService

    Part One-Add: Step4: Add the new service to windows service: $commandLine = 'D:\IMS\2.16.0.42-DataSe ...

  4. http协议中:GET/POST/PUT/DELETE/TRACE/OPTIONS/HEAD方法

    ###1 HTTP/1.1协议中共定义了八种方法(有时也叫"动作")来表明Request-URI指定的资源的不同操作方式: OPTIONS 返回服务器针对特定资源所支持的HTTP请 ...

  5. 2016/3/26 连接数据库 网页中数据的增删改 add delete update addchuli updateChuLi test8 DBDA

    主页面 test8.php <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  6. svn一次性add/delete所有文件

    Linux命令行下,svn add 一次性批量上传 命令行下操作svn没有使用界面形式的TortoiseSVN直观,但是不管怎样,命令行下操作svn还是有它的有点,如果你碰到一次需要svn add许多 ...

  7. http的几种请求的方式(Get、Post、Put、Head、Delete、Options、Trace和Connect)

    http的这几种请求方式各有各的特点,适用于各自的环境.下面我就说说这些方式的各自特点: 1.Get:它的原理就是通过发送一个请求来取得服务器上的某一资源.获取到的资源是通过一组HTTP头和呈现数据来 ...

  8. magento -- 如何在magento中进行产品的批量上传

    花费了好多时间,阅读了magento官方论坛上几乎所有的批量上传产品的相关帖子,分析了大量相关magento代码,终于可以完全实现指产品批量上传的功能,免除网速慢,在页面之间跳来跳去,以及重复输入数据 ...

  9. Java Web中实现设置多个域名跨域访问

    添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...

随机推荐

  1. MyEclipse 免安装版制作

    前言:以MyEclipse6.0为例,安装目录,例如如d:\java\MyEclipse6.0 (1)新建MyEclipse 6.0.bat文件 新建位置:当前MyEclipse根目录 文件内容: s ...

  2. 非原生APP开发中可以用到的JQ插件

    fancybox 弹出层 图片什么的都可以 效果还不错..

  3. 服务器响应HTTP请求状态码(转)

    当服务器响应HTTP请求时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明: 1.客户方错误: 100 客户必须继续发出请求 101 客户要求服务器根据请求转换HTTP协议版本 2. ...

  4. ObjectiveC 文件操作二

    10,文件委托,以便操作文件.头部看起来像是这样. @interface MyFileManager : NSObject @property(strong)NSFileManager *fileMa ...

  5. es5 api

    ES5 Object.create(prototype, descriptors) //创建对象 var o1 = {foo:'bar'}; var o2 = new Object(); //Obje ...

  6. 如何解决dns解析故障

    在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的.这个现象发生的机率比较 ...

  7. UVA 11475 Extend to Palindrome(后缀数组+ST表)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/27647 [题目大意] 给出一个字符串,要求在其后面添加最少的字符数,使得其成为一个回文串.并输出这个回文串 ...

  8. 一步一步学android之控件篇——ScrollView

    一个手机的屏幕大小是有限的,那么我要显示的东西显示不下怎么办?这就会使用到ScrollView来进行滚动显示,他的定义如下: 可以看到ScrollView是继承于FrameLayout的,所以Scro ...

  9. java 获取随机数的三种方法

    方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1))例:(int)(1+Math.random()*(10-1+1))从1到10的int型随数 方法2获得随机数for (i ...

  10. hdu 4741 Save Labman No.004(2013杭州网络赛)

    http://blog.sina.com.cn/s/blog_a401a1ea0101ij9z.html 空间两直线上最近点对. 这个博客上给出了很好的点法式公式了...其实没有那么多的tricky. ...