Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding attributes to customer entity

my current goal is to add a new customer attribute (with int type) which should appear as select with predefined options (loaded from a model with entries editable in backend, which is done). I'm struggling with proper use of $installer->addAttribute() method, especially specifying correct source option. Other problem is the new attribute isn't saved to eav_entity_attribute table

I'm on Magento CE 1.5.1.0

like image 535
Zifius Avatar asked May 11 '11 08:05

Zifius


People also ask

What are the attributes of a customer?

When we talk about customer attributes, we are referring to non-personal labels that can be used to group behavioral data into persona groups or categories (e.g. gender, loyalty level, age group, propensity to buy, etc.)

How do I get custom customer attribute value in Magento 2?

Re: Get a Custom Customer Attribute to Appear on the Checkout Success Page. Call custom module Helper getOrderNumberValue($customerId) function on checkout success page. Hope this helps you!


1 Answers

This is the code for a basic int attribute with text renderer:

$installer = $this; $installer->startSetup();  $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $setup->addAttribute('customer', 'your_attribute_code_here', array(     'input'         => 'text',     'type'          => 'int',     'label'         => 'Some textual description',     'visible'       => 1,     'required'      => 0,     'user_defined' => 1, ));  $entityTypeId     = $setup->getEntityTypeId('customer'); $attributeSetId   = $setup->getDefaultAttributeSetId($entityTypeId); $attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);  $setup->addAttributeToGroup(  $entityTypeId,  $attributeSetId,  $attributeGroupId,  'your_attribute_code_here',  '999'  //sort_order );  $oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'your_attribute_code_here'); $oAttribute->setData('used_in_forms', array('adminhtml_customer')); $oAttribute->save();  $setup->endSetup(); 

The unusual step for adding attributes is the setData('used_in_forms') this seems to be unique to customer attributes. Without it, the field won't get rendered, certainly not in the adminhtml anyway. You can see the valid options for this array in the customer_form_attribute database table.

In terms of using a select with predefined options, this is what you need:

$iAttributeId = $installer->getAttributeId($entityTypeId, 'your_attribute_code_here'); $aClasses = array('TV','DVD','Home Theatre','Air Conditioner','Stereo/Hifi','Game Console','Camcorder','VCR','Set Top Box','PVR'); $aOption = array(); $aOption['attribute_id'] = $iAttributeId;  for($iCount=0;$iCount<sizeof($aClasses);$iCount++){     $aOption['value']['option'.$iCount][0] = $aClasses[$iCount]; } $setup->addAttributeOption($aOption); 

And here is a walk-through on using a custom source for your drop-down

Hope this helps,
JD

like image 154
Jonathan Day Avatar answered Sep 29 '22 10:09

Jonathan Day