向客户添加自定义属性


64

我们需要一种简单的方法来将属性添加到客户记录中,而该属性不能由客户或管理员编辑,只能以编程方式进行。本质上,我们有一个与Magento耦合的ExpressionEngine网站。

我们通过网络服务进行身份验证,并希望将从身份验证中获取的一些JSON存储到客户的记录中,并在每次登录时进行更新。

如果他们在结帐流程中更改信息(例如送货地址),我们还将希望修改数据。然后,我们将按照当前当前对每个订单的处理将数据发送回我们的Web服务。

因为我们现在正在使用MageWorx的“自定义选项”扩展程序中的自定义属性在每个产品上存储一些JSON,这很难做到吗?

我在此处http://www.silksoftware.com/magento-module-creator/使用了Online Module Creator,但不确定模块安装后如何修改或检索该值。

我在哪里可以学习如何编写扩展名来做到这一点?


X-Ref:向客户实体添加属性(2011年5月)
hakre,2015年

如果要将此属性值保存到“ customer_entity”数据库表中怎么办?@Marius
Kazim Noorani

1
@KazimNoorani如果要直接在customer_entity表中保存值,则需要将列添加到表中,并在添加属性的脚本中(请参见下面的答案),将类型从替换varcharstatic
马吕斯

@Marius我已经在customer_entity表中添加了列。我的属性是“选择”类型。我想直接在customer_entity表的此“ custom_column”中保存属性值。怎么做?
卡齐姆·诺拉尼

1
即使您想要将数据保存在主表中,您仍然需要具有静态类型的属性。
马吕斯

Answers:


68

/app/code/local/Your/Customattribute/sql/your_customattribute_setup/install-0.1.0.php

<?php
$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", "customattribute",  array(
    "type"     => "varchar",
    "backend"  => "",
    "label"    => "Custom Attribute",
    "input"    => "text",
    "source"   => "",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => "Custom Attribute"
));

$attribute   = Mage::getSingleton("eav/config")->getAttribute("customer", "customattribute");

$setup->addAttributeToGroup(
    $entityTypeId,
    $attributeSetId,
    $attributeGroupId,
    'customattribute',
    '999'  //sort_order
);

$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
//$used_in_forms[]="checkout_register";
//$used_in_forms[]="customer_account_create";
//$used_in_forms[]="customer_account_edit";
//$used_in_forms[]="adminhtml_checkout";
        $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", 1)
                ->setData("sort_order", 100)
                ;
        $attribute->save();



$installer->endSetup();

/app/code/local/Your/Customattribute/etc/config.xml

 <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
        <global>

            <resources>
                <Your_Customattribute_setup>
                    <setup>
                        <module>Your_Customattribute</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </Your_Customattribute_setup>
                <Your_Customattribute_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </Your_Customattribute_write>
                <Your_Customattribute_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </Your_Customattribute_read>
            </resources>
        </global>

    </config>

app / etc / modules / Your_Customattribute.xml

  <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <active>true</active>
                <codePool>local</codePool>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
    </config>

然后要检索或编辑,请使用:

$customer = Mage::getModel('customer/customer')->load($custid);
$customer->getCustomattribute();
$customer->setCustomattribute($yourjson);

您将必须为登录事件创建事件观察器,在此处回答:成功登录后如何从观察器获取客户数据?

如果他们更改了帐户mgmt中的地址,也可能是customer_save_after的观察者,而对于报价的观察者则可能是观察者,视您的需求而定,它们可能位于不同的位置。


什么是customer_band_sku?
MB34 2014年

抱歉,那是我创建的剩菜。
willboudle

那么setCustomAttribute()如何设置数据?
MB34 2014年

您有用户登录时如何设置数据的示例吗?
MB34 2014年

1
工作正常..您还可以说出如何在管理面板+客户网格中显示该属性

9

您必须创建许多自定义功能,以将其创建为自定义模块重写类,并挂接到要将数据传递到Web服务的事件中。就属性而言,当您创建自定义模块并在模块中定义其设置资源时,config.xml就像上面的教程一样,然后在安装脚本中可以执行以下操作:

[module_path] / sql / [resource_node_defined_in_config_xml] / mysql4-install- [module_version_number] .php

$installer = $this;

$installer->startSetup ();

$setup = Mage::getModel ( 'customer/entity_setup' , 'core_setup' );

    //add budget
    $setup->addAttribute('customer', 'budget', array(
        'type' => 'decimal',
        'input' => 'text',
        'label' => 'Budget',
        'global' => 1,
        'visible' => 1,
        'required' => 0,
        'user_defined' => 0,
        'default' => '',
        'visible_on_front' => 1,
        'source' =>   NULL,
        'comment' => 'This is a budget'
    ));

$installer->endSetup ();

user_definedsystem如果将该属性设置为0,则使该属性成为属性,从而禁用了从管理员删除该属性的功能。


0

经过大量的核心调试后,我发现magento希望文件位于data / Companyname_Modulname_setup /sql / Companyname_Modulname_setup /中

而且它被命名为mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpmysql4-data-upgrade-0.1.0-0.1.0.php来代替mysql4-install-0.1.0.php

至少在Magento 1.9.3上

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.