You need to create a new extension to make it clean.
Let's call the extension StackExchange_Customer
.
You will need the following files:
app/etc/modules/StackExchange_Customer.xml
- the declaration file
<?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
- the configuration file
<?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
- the install file. Will add the new attribute.
<?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
- the module main helper
<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{
}
This will add your attribute for the customer.
It should work nicely on the backend.
Unfortunately you have to edit the frontend templates manually now because Magento does not have any event or empty block where you can put your fields.
For this you need the following.
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>
And now the templates.
app/design/frontend/base/default/template/stackexchange_customer/register.phtml
- the registration template.
For this one make a clone of the /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtml
and just insert this somewhere inside the form. I don't need to post the full file here. Arrange it as you please
<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
For this one clone /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtml
and insert somewhere inside the form this:
<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>
You can also create the translation file. Is not mandatory but it's nice to have
app/locale/en_US/StackExchange_Customer.csv
"License Number","License Number"
Clear the cache and you should be set.
1- You have to create the attribute phone_number
and then display it for the customer in register.phtml
and edit.phtml
, you have to follow this tuto
2- You have to Rewritte loginPostAction()
from AccountController.php
to your local codepool, you can follow this tuto and then you add this piece of code in loginPostAction()
:
if (strpos($login['username'], '@') === false){ //the user has entred a phone number
$telUser = $login['username'];
$customer = Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('phone_number', $telUser)
->getFirstItem();
if($telUser == $customer->getPhoneNumber()){
$login['username'] = $customer->getEmail();
}
}
Best Answer
You can simply add validate class for validation in magento 1.
For Phone Number Validation
For Zip Code Validation