0

We can add simple boolean Radio buttons as EAV attribute in install schema by this code:

    "type"     => "int",
    "backend"  => "",
    "label"    => "Test",
    "input"    => "boolean",
    "source"   => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
    "visible"  => true,
    "required" => true,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => ""

But if we want to add more than two options or other than 'Yes'/'No' Type then how to achieve this. I guess this could be in source attribute but have no idea how return the options in custom file i.e. to which file extends or implements and which function need to be used. I am unable to find the answer anywhere else. Thanks

2

Create Attribute

    $eavSetup->updateAttribute(
         \Magento\Catalog\Model\Product::ENTITY, 'custom_attribute_name', 
    [
        'type' => 'int',
        'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend',
        'frontend' => '',
        'label' => 'Custom Attribute Name',
        'input' => 'boolean',
        'group' => 'General',
        'class' => 'custom_attribute_name',
        'source' => 'Custom\Product\Model\YesNo',
        'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
        'visible' => true,
        'required' => true,
        'user_defined' => false,
        'default' => '1',
        'searchable' => false,
        'filterable' => false,
        'comparable' => false,
        'visible_on_front' => false,
        'used_in_product_listing' => true,
        'unique' => false
    ]
    );

Create File Custom\Product\Model\YesNo For Options

<?php
namespace Custom\Product\Model;

class YesNo extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
{

    protected $_options;

    /**
     * getAllOptions
     *
     * @return array
     */

    public function toOptionArray()
    {
         return array(
            array('value' => '1', 'label' => __('Yes')),
            array('value' => '0', 'label' => __('No'))
            ..................
         );
     }
     public function getAllOptions()
    {
        return $this->toOptionArray();
    }
}

You Can Add Options In toOptionArray() Function

  • Thanks, Its working – Stack user Feb 27 at 13:19
1

You can set custom source like:

Vendor\Module\Model\Source\RadioOptions

Now create a Model with name "RadioOptions" under

Vendor\Module\Model\Source

namespace Vendor\Module\Model\Source;

class RadioOptions extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
{
protected $_options = array();
/**
 * Abstract method of source class
 * @return type
 */
public function getAllOptions()
{
    $this->_options = array(
          array(
                  'label' => __('Male'),
                  'value' => 'male',
          ),
          array(
                  'label' => __('Female'),
                  'value' => 'female',
          )
     );

    return $this->_options;
}
/**
 * Abstract method of source class that returns data
 * @param $value
 * @return boolean
 */
public function getOptionText($value)
{
    $options = $this->getAllOptions(false);

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

This may help you.

  • Thanks Its works but I didn't get what is the use of getOptionText as we have already set label in getAllOptions function. – Stack user Feb 27 at 13:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.