在magento(1.9)客户注册中添加新字段


28

我喜欢在客户注册和管理员客户创建表单中添加新字段。

字段名称是许可证号。我搜索了很多与我的需求相关的链接,但这些链接在Magento(1.9)中不起作用。甚至我发现与此相关的扩展名:

http://www.magentocommerce.com/magento-connect/custome-account-profile-13594.html

当我使用密钥安装上述扩展程序时,显示错误。您能给我一些与我的要求有关的想法吗?


还提供了你在上面的扩展越来越错误...请发送尽可能多的细节,你可以..
亚洲时报Siddharth Vaghasia

这以前已经在这里找到答案:magento.stackexchange.com/questions/14163/...
tecjam

Answers:


55

您需要创建一个新扩展名以使其干净。
让我们称之为extension StackExchange_Customer
您将需要以下文件:

app/etc/modules/StackExchange_Customer.xml -声明文件

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <active>true</active>
            <codePool>local</codePool>
            <depends><Mage_Customer/></depends>
        </StackExchange_Customer>
    </modules>
</config> 

app/code/local/StackExchange/Customer/etc/config.xml -配置文件

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <version>1.0.0</version>
        </StackExchange_Customer>
    </modules>
    <global>
        <helpers>
            <stackexchange_customer>
                <class>StackExchange_Customer_Helper</class>
            </stackexchange_customer>
        </helpers>
        <resources>
            <stackexchange_customer_setup>
                <setup>
                    <module>StackExchange_Customer</module>
                    <class>Mage_Customer_Model_Resource_Setup</class>
                </setup>
            </stackexchange_customer_setup>
        </resources>
    </global>
    <frontend>
        <layout>
            <updates>
                <stackexchange_customer>
                    <file>stackexchange_customer.xml</file>
                </stackexchange_customer>
            </updates>
        </layout>
        <translate>
            <modules>
                <StackExchange_Customer>
                    <files>
                        <default>StackExchange_Customer.csv</default>
                    </files>
                </StackExchange_Customer>
            </modules>
        </translate>
    </frontend>
</config>

app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php-安装文件。将添加新属性。

<?php
$this->addAttribute('customer', 'license_number', array(
    'type'      => 'varchar',
    'label'     => 'License Number',
    'input'     => 'text',
    'position'  => 120,
    'required'  => false,//or true
    'is_system' => 0,
));
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'license_number');
$attribute->setData('used_in_forms', array(
    'adminhtml_customer',
    'checkout_register',
    'customer_account_create',
    'customer_account_edit',
));
$attribute->setData('is_user_defined', 0);
$attribute->save();

app/code/local/StackExchange/Customer/Helper/Data.php -模块主要助手

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

这将为您的客户添加属性。
它应该在后端工作良好。
不幸的是,您现在必须手动编辑前端模板,因为Magento没有任何可放置字段的事件或空白块。
为此,您需要以下内容。

app/design/frontend/base/default/layout/stackexchange_customer.xml

<?xml version="1.0"?>
<layout>
    <customer_account_edit>
        <reference name="customer_edit">
            <action method="setTemplate">
                <template>stackexchange_customer/form/edit.phtml</template>
            </action>
        </reference>
    </customer_account_edit>
    <customer_account_create>
        <reference name="customer_form_register">
            <action method="setTemplate">
                <template>stackexchange_customer/register.phtml</template>
            </action>
        </reference>
    </customer_account_create>
</layout>

现在是模板。

app/design/frontend/base/default/template/stackexchange_customer/register.phtml-注册模板。
为此,请复制/app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtml并将其插入表单内的某个位置。我不需要在此处发布完整文件。随便安排

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->escapeHtml($this->getFormData()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

/app/design/frontend/base/default/template/stackexchange_customer/form/edit.phtml对于这个克隆/app/design/frontend/{package}/{theme}/template/customer/form/edit.phtml并将其插入以下形式:

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->htmlEscape($this->getCustomer()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

您也可以创建翻译文件。不是强制性的,但是很高兴

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

清除缓存,您将被设置。


我按照您的方式进行操作,但该字段未显示在管理箱用户页面上。
sendhil'5

@senthil。你是对的。对于那个很抱歉。我粘贴了错误的安装脚本。我用正确的app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php文件更新了答案。由于您已经安装了模块,因此新的安装脚本将不会再次运行。要使其再次运行,您需要从表中删除eav_attribute带有代码的属性,license_number并从表中删除带有代码core_resource的记录StackExchange_Customer。清除缓存并刷新页面。安装脚本应再次运行。
马里斯(Marius)

2
@senthil如果计划添加其他字段,则应克隆install-1.0.0upgrade-1.0.0-1.0.1该字段并在克隆的文件中进行修改。然后将version标记更改config.xml1.0.1。在此处查看升级脚本的工作方式:magento.stackexchange.com/q/26313/146
Marius

1
嗨,先生,您没有告诉我们如何设置多个属性?我通过修改代码尝试了多个attrs。还是行不通 。请解释
PRATIK

1
@Haris,对于上载,您很可能需要做一些额外的事情,但是我不知道该怎么办。
马吕斯

0

感谢Marius,仅此一件事情,该字段不会显示在注册结帐信息中。

如何在结帐注册中显示该字段?

谢谢

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.