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/

  • 相关阅读:
    2019-2020-1学期20192401《网络空间安全专业导论》第一周学习总结
    14201771010119穷吉
    13201771010119穷吉
    12穷吉201771010119
    11201771010119穷吉
    实验10穷吉201771010119
    实验九201771010119穷吉
    201771010119穷吉第八周
    七次201771010119穷吉
    实验六20177101010119穷吉
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3327330.html
Copyright © 2011-2022 走看看