How to Set Sort Order When Adding Attribute Programmatically in Magento

attributes

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

  'sort_order' => 10

but it not worked

[Edit]

$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();

Best Answer

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;
}