স্ক্রিপ্ট আপগ্রেড করুন - বিকল্পগুলি সহ নতুন সিলেক্ট অ্যাট্রিবিউট তৈরি করুন


27

আমি একটি আপগ্রেড স্ক্রিপ্ট ব্যবহার করে কিছু পূর্বনির্ধারিত বিকল্পগুলির সাথে একটি নতুন পণ্য বৈশিষ্ট্য তৈরি করতে চাই।

আমার একটি আপগ্রেড স্ক্রিপ্ট কাজ করছে, সুতরাং আমি কী করতে পারি তা জানার একমাত্র জিনিসটি হ'ল বৈশিষ্ট্যের সাথে ড্রপ ডাউন বিকল্পগুলি যুক্ত করা।

আমি নিম্নলিখিতটি ব্যবহার করে আমার মডিউলগুলি আপগ্রেড স্ক্রিপ্টের মধ্যে আমার বৈশিষ্ট্য যুক্ত করছি:

$installer->addAttribute('catalog_product', "shirt_size", array(
    'type'       => 'int',
    'input'      => 'select',
    'label'      => 'Shirt Size',
    'sort_order' => 1000,
    'required'   => false,
    'global'     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
));

এটির সাথে আমি কীভাবে 3 টি বিকল্প যুক্ত করতে পারি: ছোট, মাঝারি এবং বড়?

আমি কোনও কাস্টম উত্স মডেল ব্যবহার করতে চাই না। আমি সাধারণ বিকল্প চাই

উত্তর:


30

এটি একটি ক্লাসিক কেস যেখানে কোড-প্রজন্মটি আপনার বন্ধু। এগুলি হাতে তৈরি করা বন্ধ করুন এবং নিম্নলিখিত নিখরচায় ও মুক্ত উত্স স্ক্রিপ্টটি ব্যবহার করে দেখুন , (যা n98-magerunসরঞ্জামটিতে অন্তর্ভুক্ত করা হয়েছে )

উদাহরণস্বরূপ, নিম্নলিখিতটি নমুনা ডেটার রঙের বৈশিষ্ট্যটিকে নকল করবে

$ magento-create-setup.php color
//WARNING, non false value detected in is_used_for_price_rules.  The setup resource migration scripts may not support this (per 1.7.0.1)
<?php
if(! ($this instanceof Mage_Catalog_Model_Resource_Setup) )
{
    throw new Exception("Resource Class needs to inherit from " .
    "Mage_Catalog_Model_Resource_Setup for this to work");
}

$attr = array (
  'attribute_model' => NULL,
  'backend' => '',
  'type' => 'int',
  'table' => '',
  'frontend' => '',
  'input' => 'select',
  'label' => 'Color',
  'frontend_class' => '',
  'source' => '',
  'required' => '0',
  'user_defined' => '1',
  'default' => '',
  'unique' => '0',
  'note' => '',
  'input_renderer' => NULL,
  'global' => '1',
  'visible' => '1',
  'searchable' => '1',
  'filterable' => '1',
  'comparable' => '1',
  'visible_on_front' => '0',
  'is_html_allowed_on_front' => '0',
  'is_used_for_price_rules' => '1',
  'filterable_in_search' => '1',
  'used_in_product_listing' => '0',
  'used_for_sort_by' => '0',
  'is_configurable' => '1',
  'apply_to' => 'simple',
  'visible_in_advanced_search' => '1',
  'position' => '1',
  'wysiwyg_enabled' => '0',
  'used_for_promo_rules' => '1',
  'option' => 
  array (
    'values' => 
    array (
      0 => 'Green',
      1 => 'Silver',
      2 => 'Black',
      3 => 'Blue',
      4 => 'Red',
      5 => 'Pink',
      6 => 'Magenta',
      7 => 'Brown',
      8 => 'White',
      9 => 'Gray',
    ),
  ),
);
$this->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'color', $attr);

আপনি যদি n98-magerunসংস্করণটি ব্যবহার করেন তবে তা হবে

$ n98-magerun dev:setup:script:attribute catalog_product color

কোড জেনারেশন ব্যবহার করা আপনাকে আপনার কাজটি আরও দ্রুত সম্পন্ন করতে দেবে এবং সময় বাড়ার সাথে সাথে আপনি ফর্ম্যাটটি শিখতে শুরু করবেন।


আমরা জেএস ইভেন্টের পর্যবেক্ষকের মতো onClickএবং onChangeবৈশিষ্ট্যের বিকল্পগুলিতে যুক্ত করতে পারি ?
আরটি

18
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'shirt_size', [
    'type'       => 'int',
    'input'      => 'select',
    'label'      => 'Shirt Size',
    'sort_order' => 1000,
    'required'   => false,
    'global'     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
    'backend'    => 'eav/entity_attribute_backend_array',
    'option'     => [
        'values' => [
            0 => 'Small',
            1 => 'Medium',
            2 => 'Large',
        ]
    ],

]);

valueঅ্যারের প্রতিটি উপাদান একটি বিকল্পকে উপস্থাপন করে। আপনার যদি আরও এইরকম থাকে তবে আপনি প্রতিটি স্টোর ভিউয়ের জন্য লেবেল যুক্ত করতে পারেন:

[
    0=>'Small',
    1=>'Small',
    2=>'Petit'
]

মূলত এটি store_id=>'Label for store'


6
মারিয়াস, আপনি কি জীবিকার জন্য কাজ করেন? :-)
বেনমার্কস

7
@benmarks। আমি একটি জীবিকার জন্য কাজ করি এবং আমি যে কাজটি করে যাচ্ছি তা সত্যই উপভোগ করি। আমি ঠিক সময়ে সময়ে একটি প্রশ্নের উত্তর দিতে 2 মিনিট বিরতি নিতে চাই। আপনি কি আমাকে উত্তর দেওয়া বন্ধ করতে চান? :)
মারিয়াস

1
@philwinkle। হ্যাঁ ... 4 ঘন্টা সপ্তাহে, কিন্তু প্রতি সপ্তাহে নয়। আমি ক্লান্ত হতে চাই না। :)
মারিয়াস

1
@ ডিসেক্সার $installer = $this;ইনস্টলার স্ক্রিপ্টে প্রথম লাইন হিসাবে যুক্ত করুন ।
মারিয়াস

1
@mujas। backendএর মধ্যে backend_modelকলামের সমতুল্য eav_attribute table। একটি অ্যাট্রিবিউট ফ্রন্টএন্ড মডেল (এটি আসলে ব্যাকএন্ডে অ্যাট্রিবিউট ফিল্ডটি রেন্ডার করার জন্য ব্যবহৃত ব্লকগুলি), সোর্স মডেল (ড্রপডাউন এবং মাল্টিলেক্ট বৈশিষ্ট্যগুলির জন্য for এটি বিকল্পগুলির উত্স) এবং ব্যাকএন্ড মডেল সমর্থন করে। অ্যাট্রিবিউট মানটি সংরক্ষণ করার আগে বা এটি লোড হওয়ার পরে আপনি যে ক্লাসটি ব্যাকএন্ড মডেল সেট করেছেন সেটি ব্যবহার করতে পারেন। আপনি অতিরিক্ত বৈধতা সম্পাদন করতে বা মান পরিবর্তন করতে এটি ব্যবহার করতে পারেন। এই নির্দিষ্ট ক্ষেত্রে, আপনি ফর্মটি থেকে যে অ্যারে প্রেরণ করেছেন সেটি ক্রমিকিত করা হয়।
মারিয়াস

3

যখনই আপনি অ্যাট্রিবিউট টাইপ ড্রপডাউন তৈরি করেন উত্সের মডেল যুক্ত করুন।

'source'        => 'eav/entity_attribute_source_table',   

0
$valStringArray = array("Nike","Addidas");
createAttribute("Brand","manufacturer",-1,-1,-1,$valStringArray);

//
// Create an attribute.
//
// For reference, see Mage_Adminhtml_Catalog_Product_AttributeController::saveAction().
//
// @return int|false
//  

function createAttribute($labelText, $attributeCode, $values = -1, $productTypes = -1, $setInfo = -1, $options = -1)
{

    $labelText = trim($labelText);
    $attributeCode = trim($attributeCode);

    if($labelText == '' || $attributeCode == '')
    {
        echo "Can't import the attribute with an empty label or code.  LABEL= [$labelText]  CODE= [$attributeCode]"."<br/>";
        return false;
    }

    if($values === -1)
        $values = array();

    if($productTypes === -1)
        $productTypes = array();

    if($setInfo !== -1 && (isset($setInfo['SetID']) == false || isset($setInfo['GroupID']) == false))
    {
        echo "Please provide both the set-ID and the group-ID of the attribute-set if you'd like to subscribe to one."."<br/>";
        return false;
    }

    echo "Creating attribute [$labelText] with code [$attributeCode]."."<br/>";

    //>>>> Build the data structure that will define the attribute. See
    //     Mage_Adminhtml_Catalog_Product_AttributeController::saveAction().

    $data = array(
                    'is_global'                     => '1',
                    'frontend_input'                => 'select',
                    'default_value_text'            => '',
                    'default_value_yesno'           => '0',
                    'default_value_date'            => '',
                    'default_value_textarea'        => '',
                    'is_unique'                     => '0',
                    'is_required'                   => '0',
                    'frontend_class'                => '',
                    'is_searchable'                 => '1',
                    'is_visible_in_advanced_search' => '1',
                    'is_comparable'                 => '1',
                    'is_used_for_promo_rules'       => '0',
                    'is_html_allowed_on_front'      => '1',
                    'is_visible_on_front'           => '0',
                    'used_in_product_listing'       => '0',
                    'used_for_sort_by'              => '0',
                    'is_configurable'               => '0',
                    'is_filterable'                 => '1',
                    'is_filterable_in_search'       => '1',
                    'backend_type'                  => 'varchar',
                    'default_value'                 => '',
                    'is_user_defined'               => '0',
                    'is_visible'                    => '1',
                    'is_used_for_price_rules'       => '0',
                    'position'                      => '0',
                    'is_wysiwyg_enabled'            => '0',
                    'backend_model'                 => '',
                    'attribute_model'               => '',
                    'backend_table'                 => '',
                    'frontend_model'                => '',
                    'source_model'                  => '',
                    'note'                          => '',
                    'frontend_input_renderer'       => '',                      
                );

    // Now, overlay the incoming values on to the defaults.
    foreach($values as $key => $newValue)
        if(isset($data[$key]) == false)
        {
            echo "Attribute feature [$key] is not valid."."<br/>";
            return false;
        }

        else
            $data[$key] = $newValue;

    // Valid product types: simple, grouped, configurable, virtual, bundle, downloadable, giftcard
    $data['apply_to']       = $productTypes;
    $data['attribute_code'] = $attributeCode;
    $data['frontend_label'] = array(
                                        0 => $labelText,
                                        1 => '',
                                        3 => '',
                                        2 => '',
                                        4 => '',
                                    );

    //<<<<

    //>>>> Build the model.

    $model = Mage::getModel('catalog/resource_eav_attribute');

    $model->addData($data);

    if($setInfo !== -1)
    {
        $model->setAttributeSetId($setInfo['SetID']);
        $model->setAttributeGroupId($setInfo['GroupID']);
    }

    $entityTypeID = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId();
    $model->setEntityTypeId($entityTypeID);

    $model->setIsUserDefined(1);

    //<<<<

    // Save.

    try
    {
        $model->save();
    }
    catch(Exception $ex)
    {
        echo "Attribute [$labelText] could not be saved: " . $ex->getMessage()."<br/>";
        if($ex->getMessage() == "Attribute with the same code already exists."){
            if(is_array($options)){
                foreach($options as $_opt){
                    addAttributeValue($attributeCode, $_opt);
                }
            }
        }
        return false;
    }

    if(is_array($options)){
        foreach($options as $_opt){
            addAttributeValue($attributeCode, $_opt);
        }
    }

    $id = $model->getId();

    echo "Attribute [$labelText] has been saved as ID ($id).<br/>";

    // Asssign to attribute set.
    $model1 = Mage::getModel('eav/entity_setup','core_setup');
    $model1->addAttributeToSet(
        'catalog_product', 'Default', 'General', $attributeCode
    ); //Default = attribute set, General = attribute group

    // return $id;
}

function addAttributeValue($arg_attribute, $arg_value)
{
    $attribute_model        = Mage::getModel('eav/entity_attribute');

    $attribute_code         = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
    $attribute              = $attribute_model->load($attribute_code);

    if(!attributeValueExists($arg_attribute, $arg_value))
    {
        $value['option'] = array($arg_value,$arg_value);
        $result = array('value' => $value);
        $attribute->setData('option',$result);
        $attribute->save();
    }

    $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
    $attribute_table        = $attribute_options_model->setAttribute($attribute);
    $options                = $attribute_options_model->getAllOptions(false);

    foreach($options as $option)
    {
        if ($option['label'] == $arg_value)
        {
            return $option['value'];
        }
    }
   return false;
}
function attributeValueExists($arg_attribute, $arg_value)
{
    $attribute_model        = Mage::getModel('eav/entity_attribute');
    $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;

    $attribute_code         = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
    $attribute              = $attribute_model->load($attribute_code);

    $attribute_table        = $attribute_options_model->setAttribute($attribute);
    $options                = $attribute_options_model->getAllOptions(false);

    foreach($options as $option)
    {
        if ($option['label'] == $arg_value)
        {
            return $option['value'];
        }
    }

    return false;
}

এটা চেষ্টা কর. আমি এই কোডের মাধ্যমে অনেকগুলি অ্যাট্রিবিউট এবং অ্যাট্রিবিউট মান যুক্ত করেছি এবং আপনি এই কোডের মাধ্যমে অ্যাট্রিবিউট সেটটি নির্দিষ্ট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.