4

如何在不修改 magento 核心文件的情况下在客户注册表单中创建手机号码等自定义字段?我试过但手机号码没有保存在数据库中

我通过在我的模块文件夹中创建 Model/Entity/Setup.php 来使用 Myown_Mage_Customer_Model_Entity_Setup 覆盖 Mage_Customer_Model_Entity_Setup 类,并将以下代码添加到 getDefaultEntities 中的数组中

'mobilenumber' => array(
                        'label'        => 'Mobile Number',
                        'visible'    => true,
                        'required'    => true,
                    ),

我的配置文件也包含以下代码

<models>
        <customer_entity>
            <rewrite>
                  <customer>Myown_Mage_Customer_Model_Entity_Setup</customer>
            </rewrite>
        </customer_entity>
    </models>

我也在 template/customer/form/register.phtml 中有这个字段

<input type="text" name="mobilenumber" id="mobilenumber" value="<?php echo $this->htmlEscape($this->getFormData()->getMobilenumber()) ?>" title="<?php echo $this->__('Mobile Number') ?>" class="required-entry input-text" />  

在这个配置中有什么我想念的吗?我想将手机号码保存在数据库中,然后再检索。

4

2 回答 2

1

我必须为企业客户创建一个类似的字段(在本例中为referred_by),所以这是怎么回事:

首先,我创建了一个可以容纳所有这些乐趣的模块。我为客户添加了自己的实体设置条目,这样我就不必依赖默认客户或不必要地重写任何模型(随着时间的推移,您开始在重写时与自己发生冲突)。您的实体代码似乎可以工作,因此是否要重构它取决于您。

然后我将该字段添加到客户字段集中,这似乎有助于 Magento 了解要在数据库中保存哪些数据:

<global>
    <fieldsets>
        <customer_account>
            <referred_by>
                <create>1</create>
                <update>0</update>
                <to_order>customer_referred_by</to_order>
            </referred_by>
        </customer_account>
    </fieldsets> 
</global>

然后,我将该字段添加到客户表单中,类似于您在上面所做的方式。在结帐时,我被迫在单页结帐中添加一个覆盖模型以在结帐期间保存数据(在我的情况下,仅在计费期间):

class Company_Module_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage {
    public function saveBilling($data, $customerAddressId) {
        if (isset($data['referred_by'])) {
            // set referred for later use.
            $session    = Mage::getSingleton("customer/session");
            $session->setData("referred_by", $data['referred_by']);
        }

        return parent::saveBilling($data, $customerAddressId);
    }//end saveBilling
}

和:

<global>
    <models>
        <checkout>
            <rewrite>
                <type_onepage>Company_Module_Model_Checkout_Type_Onepage</type_onepage>
            </rewrite>
        </checkout>
    </models>   
</global>

之后,数据被正确保存在数据库中。欢呼!

希望有帮助!谢谢,乔

于 2010-10-01T14:53:00.977 回答
0

关于您的代码:

  1. 您不必重写 Mage_Customer_Model_Entity_Setup,因为此类仅用于安装客户属性。解决方案是拥有自己的从 Mage_Customer_Model_Entity_Setup 继承的安装程序类。

  2. 您还需要一个 mysql4-install 安装文件

要确切了解如何向客户添加新属性,请参阅我制作的这个 magento 模块: https ://code.google.com/p/magento-code-snippets/source/browse/#svn/trunk/PWS_ExtCustomerFields

于 2010-10-02T10:02:35.253 回答