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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 23:03:16  来源:igfitidea点击:

Adding attributes to customer entity

phpmagentocustom-attributes

提问by Zifius

my current goal is to add a new customer attribute (with inttype) 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 intattribute with textrenderer:

这是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_attributedatabase table.

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

In terms of using a selectwith 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 setupclass 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.phpfile:

这是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_onlyabove will handle all of the used_in_formslogic for you. Also, defining groupwill 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.

其中“专业”是我的自定义属性。