product attribute options

In Magento2, referring to the products’ form attributes and their options, get ‘render dynamically,’ means that as an admin you can add as many attributes and as many options to that product attribute as you want. This is handled by using the strategy of data and meta-data. Now the problem is if you create a custom attribute with 100 options then it will be hard for the user to select any particular one if it’s not sorted alphabetically. In this blog, we will explain how can you sort product attributes options alphabetically to make it user-friendly.

 


We are assuming that you already have an idea to create a custom module in Magento2.  In Case you don’t, then no worries you can follow the below-mentioned steps-

  • Click here to understand the basic Magento2 flow.
  • Click here to understand the code structure of Magento2 and
  • Click here to know how to create a basic hello world module in Magento2.

Here we are going to use a plugin for extending the functionality of meta-data. But if you have no idea how to create a plugin you may check it on Magento2 dev-docs to get a brief idea about Magento2 plugins.

We assume that you already have a basic idea about Magento2 coding.

 

Write the below code in your Vendor\Module\etc\adminhtml\di.xml 

 

<?xml version="1.0"?>

<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"

       xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

<type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav">

 <plugin name="after_ui_eav_product_form_modifier"

   type="Vendor\Module\Plugin\Ui\DataProvider\Product\Form\Modifier\Eav"

   sortOrder="1" disabled="false"/>

</type>

</config>  

 

Now create a plugin file with the namespace  

 

Vendor\Module\Plugin\Ui\DataProvider\Product\Form\Modifier\Eav, and add the below code.

 

<?php 

namespace Vendor\Module\Plugin\Ui\DataProvider\Product\Form\Modifier;

use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav;

/**

 * Class Eav 

 */

class Eav

{    

   

   const ATTRIBUTE_TO_SORT = ['xyz_attr1' ,'xyz_attr2'];

    /**

     * Initial meta setup

     *

     * @param Eav $subject

     * @param array $result 

     * @return array 

     */

    public function afterSetupAttributeMeta(Eav $subject,  $result){ 

        if (isset($result['arguments']['data']['config']['code'])) {

            $code = $result['arguments']['data']['config']['code'];

            if (in_array($code, self::ATTRIBUTE_TO_SORT)){                

                if (isset($result['arguments']['data']['config']['options'])) {

                    $options = &$result['arguments']['data']['config']['options'];

                    usort($options, function($a, $b) {

                        return $a['label'] > $b['label'];

                    }); 

                } 

            }

        } 

        return $result;

    }

}

 

In this, we are using “usort” for the multi-select attribute options, so this code will sort only the multidimensional array, it will sort the array options by labels.

Author of this post:

cedcommerce

Started in 2010, the company has been involved in over 1000 ventures of customizing solutions to address all the unique needs. Fuelled by its rich experience, the company has developed highly popular JET SHOPIFY INTEGRATION APP being used by 500+ sellers across the United States of America. And recently, it became the Official Channel Integration Partner of Walmart, Sears, and Newegg. The company offers all the products that make selling easier on e-commerce.