zoukankan      html  css  js  c++  java
  • How to Programmatically Add/Delete Custom Options in Magento?

    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/

  • 相关阅读:
    全排列和几道例题
    NOJ1333: [蓝桥杯2017初赛]Excel地址
    力扣5-最长回文子串-(Manacher算法)
    CF1003E-Tree Constructing-(构造+dfs)
    NOJ1329:[蓝桥杯2017初赛]k倍区间-(前缀和)
    Java 时间
    小魂和他的数列-(离散+二分+树状数组)
    AC自动机入门和几道例题
    java写入加速
    清理 Excel 导出的 HTML 的多余属性
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3327330.html
Copyright © 2011-2022 走看看