将属性添加到客户实体

我目前的目标是添加一个新的客户属性(用inttypes),它应该显示为带有预定义选项的select(从模型中加载,条目可在后端编辑,完成)。 我努力正确使用$installer->addAttribute()方法,特别是指定正确的源选项。 其他问题是新的属性没有保存到eav_entity_attribute表中

我在Magento CE 1.5.1.0

这是具有text渲染器的基本int属性的代码:

 $installer = $this; $installer->startSetup(); $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $entityTypeId = $setup->getEntityTypeId('customer'); $attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId); $attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId); $setup->addAttribute('customer', 'your_attribute_code_here', array( 'input' => 'text', 'type' => 'int', 'label' => 'Some textual description', 'visible' => 1, 'required' => 0, 'user_defined' => 1, )); $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(); 

添加属性的不寻常步骤是setData('used_in_forms')这似乎是客户属性唯一的。 没有它,该领域将不会得到渲染,无论如何不会在adminhtml。 您可以在customer_form_attribute数据库表中看到该数组的有效选项。

在使用预定义选项的选项方面,这是你所需要的:

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

下面是使用自定义源代码的步骤

希望这可以帮助,
JD

Jonathan Day的回答非常好,对我非常有帮助。 但是,只要您将setupsetupMage_Customer_Model_Entity_Setup ,那么Magento就可以为您完成所有工作:

 <!-- config.xml Example --> <?xml version="1.0"?> <config> <global> <resources> <acme_module_setup> <setup> <module>Acme_Module</module> <class>Mage_Customer_Model_Entity_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </acme_module_setup> </resources> </global> </config> 

这里是mysql4-install-XXXphp文件:

 <?php $installer = $this; /* @var $installer Mage_Customer_Model_Entity_Setup */ $installer->startSetup(); $installer->addAttribute( 'customer', 'acme_imported', array( 'group' => 'Default', 'type' => 'int', 'label' => 'Imported into Acme', 'input' => 'select', 'source' => 'eav/entity_attribute_source_boolean', 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 'required' => 0, 'default' => 0, 'visible_on_front' => 1, 'used_for_price_rules' => 0, 'adminhtml_only' => 1, ) ); $installer->endSetup(); 

上面的adminhtml_only将为您处理所有的used_in_forms逻辑。 此外,定义group将负责将其分配给属性组。

只要你有你的自定义模块mysql安装文件通过以下脚本添加您的客户属性。

 $installer = $this; $installer->startSetup(); $installer->addAttribute("customer", "yourattributename", array( "type" => "int", "backend" => "", "label" => "Bad Customer", "input" => "select", "source" => "eav/entity_attribute_source_boolean", "visible" => true, "required" => false, "default" => "", "frontend" => "", "unique" => false, "note" => "" )); $attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "yourattributename"); 

以下脚本用于要使用客户属性的地方

 $used_in_forms=array(); $used_in_forms[]="adminhtml_customer"; $attribute->setData("used_in_forms", $used_in_forms) ->setData("is_used_for_customer_segment", true) ->setData("is_system", 0) ->setData("is_user_defined", 1) ->setData("is_visible", 0) ->setData("sort_order", 100) ; $attribute->save(); $installer->endSetup(); 

这个博客文章对Magento EAV模型有一个非常全面的解释,详细描述了字段参数和含义: http : //www.solvingmagento.com/magento-eav-system/

亚历克斯和韭菜提供的解决scheme都为我工作。 只有我必须在我们的AccountController.php中添加setter函数

 $customer->setProfession($this->getRequest()->getPost('profession')) ->save(); // Added for updating Profession 

哪里“专业”是我的习惯属性。