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/

  • 相关阅读:
    HDOJ骨头的诱惑
    DP Big Event in HDU
    hoj1078
    poj2728
    hoj1195
    poj2739
    poj2726
    海量并发也没那么可怕,运维准点下班全靠它!
    云上安全工作乱如麻,等保2.0来一下
    实践案例丨教你一键构建部署发布前端和Node.js服务
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3327330.html
Copyright © 2011-2022 走看看