php 向客户实体添加属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5961290/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Adding attributes to customer entity
提问by Zifius
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
我目前的目标是添加一个新的客户属性(带int
类型),它应该显示为带有预定义选项的选择(从具有可在后端编辑条目的模型加载,已完成)。我正在努力正确使用$installer->addAttribute()
方法,尤其是指定正确的源选项。另一个问题是新属性没有保存到 eav_entity_attribute 表
I'm on Magento CE 1.5.1.0
我在 Magento CE 1.5.1.0
回答by Jonathan Day
This is the code for a basic int
attribute with text
renderer:
这是int
带有text
渲染器的基本属性的代码:
$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.
添加属性的不寻常步骤是setData('used_in_forms')
这似乎是客户属性所独有的。没有它,该字段将不会被渲染,无论如何肯定不会在 adminhtml 中。您可以在customer_form_attribute
数据库表中看到此数组的有效选项。
In terms of using a select
with predefined options, this is what you need:
在使用select
带有预定义选项的a 方面,这是您需要的:
$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-throughon using a custom source for your drop-down
这里是一个步行通过使用自定义源为您的下拉
Hope this helps,
JD
希望这有帮助,
JD
回答by leek
@Jonathan Day's answer is great and helped me tremendously. However - as long as you've set your setup
class to Mage_Customer_Model_Entity_Setup
, then Magento can do all of that work for you:
@ Jonathan Day的回答很好,对我帮助很大。但是 - 只要您将setup
类设置为Mage_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>
And here is the mysql4-install-X.X.X.php
file:
这是mysql4-install-X.X.X.php
文件:
<?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();
The adminhtml_only
above will handle all of the used_in_forms
logic for you. Also, defining group
will take care of assigning it to the attribute group.
在adminhtml_only
上述将处理所有的used_in_forms
逻辑你。此外,定义group
将负责将其分配给属性组。
回答by Alexandar
Just you have add your customer attribute under by your custom module mysql setup file through the following script.
只需通过以下脚本在自定义模块 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");
The following script used for where want to use customer attribute
以下脚本用于要使用客户属性的地方
$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();
回答by Suman-PHP4U
The solution provide by alex and leekboth worked for me. Only I have to add the setter function in our AccountController.php
亚历克斯和韭菜提供的解决方案都对我有用。只有我必须在我们的 AccountController.php 中添加 setter 函数
$customer->setProfession($this->getRequest()->getPost('profession'))
->save(); // Added for updating Profession
Where "profession" was my custom attribute.
其中“专业”是我的自定义属性。