phpattributesmage

How to set sort order while add attribute programmatically


I want to set sort order in attribute. In mysql file i m used this

$installer->addAttribute('customer','badge', array( 
'label'             => 'Badge',
'type'              => 'text',    //backend_type
'input'             => 'multiselect', //frontend_input
'backend'           => 'eav/entity_attribute_backend_array',    
'global'            =>  Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'source'            => 'marketplace/eav_entity_attribute_source_badge', // Goes to Step 2
'visible'           => true,
'required'          => false,
'default'           => '',
'frontend'          => '',
'unique'            => false,
'note'              => '',
'sort_order'        => 10

 ));
Mage::getSingleton('eav/config')
->getAttribute('customer', 'badge')
->setData('used_in_forms', array('customer_account_create','customer_account_edit','customer_address_edit','checkout_onepage_register','checkout_onepage_register_guest','checkout_onepage_billing_address','adminhtml_customer','checkout_onepage_shipping_address','checkout_multishipping_register'))
->save();

but it not worked how to set sort order for this attribute


Solution

  • when you add attribute programmatically that time you have to set order like this

     Mage::getSingleton('eav/config')
      ->getAttribute('customer', 'badge')
      ->setSortOrder(100)
       ->setData('used_in_forms', array('customer_account_create','customer_account_edit','customer_address_edit','checkout_onepage_register','checkout_onepage_register_guest','checkout_onepage_billing_address','adminhtml_customer','checkout_onepage_shipping_address','checkout_multishipping_register'))
       ->save();
    

    'sort_order' is not worked

    Or

    You have to use position instead of sort_order.

    'position' => 20
    

    From Mage_Customer_Model_Resource_Setup

    /**
     * Prepare customer attribute values to save in additional table
     *
     * @param array $attr
     * @return array
     */
    protected function _prepareValues($attr)
    {
        $data = parent::_prepareValues($attr);
        $data = array_merge($data, array(
            'is_visible'                => $this->_getValue($attr, 'visible', 1),
            'is_system'                 => $this->_getValue($attr, 'system', 1),
            'input_filter'              => $this->_getValue($attr, 'input_filter', null),
            'multiline_count'           => $this->_getValue($attr, 'multiline_count', 0),
            'validate_rules'            => $this->_getValue($attr, 'validate_rules', null),
            'data_model'                => $this->_getValue($attr, 'data', null),
            'sort_order'                => $this->_getValue($attr, 'position', 0)
        ));
    
        return $data;
    }