如何在不修改magento核心文件的情况下在客户注册表单中创建手机号码等自定义字段?

时间:2010-09-29 07:51:52

标签: magento registration fieldset

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

我通过在modules文件夹中创建Model / Entity / Setup.php并使用以下代码将以下代码添加到getDefaultEntities

中来覆盖Mage_Customer_Model_Entity_Setup类和Myown_Mage_Customer_Model_Entity_Setup
'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" />  

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

2 个答案:

答案 0 :(得分:1)

我必须为Enterprise客户创建一个类似的字段(在本例中为refer_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>

之后,数据已正确保存在数据库中。乌拉!

希望有所帮助! 谢谢, 乔

答案 1 :(得分:0)

关于您的代码:

  1. 您不必覆盖 Mage_Customer_Model_Entity_Setup 因为这个类只用于 安装客户属性。该 解决方案是拥有自己的设置 继承自的类 Mage_Customer_Model_Entity_Setup。

  2. 您还需要一个mysql4安装设置 文件

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