You need to rewrite Magento's Customer Mage_Customer_Block_Account_Navigation Block class.
create config.xml file in the app/code/local/Neo/CustomerNavigationLinks/etc
<?xml version="1.0"?>
<config>
<modules>
<Neo_CustomerNavigationLinks>
<version>0.0.1</version>
</Neo_CustomerNavigationLinks>
</modules>
<global>
<blocks>
<customer>
<rewrite>
<account_navigation>Neo_CustomerNavigationLinks_Block_Account_Navigation</account_navigation>
</rewrite>
</customer>
</blocks>
<helpers>
<customernavigationlinks>
<class>Neo_CustomerNavigationLinks_Helper</class>
</customernavigationlinks>
</helpers>
</global>
</config>
in Neo/CustomerNavigationLinks/Block/Account/ careate a file called Navigation.php with the following content in it
<?php
class Neo_CustomerNavigationLinks_Block_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
public function removeLinkByName($name)
{
unset($this->_links[$name]);
return $this;
}
}
?>
in app/etc/modules create a file called Neo_CustomerNavigationLinks.xml with the following content
<?xml version="1.0"?>
<config>
<modules>
<Neo_CustomerNavigationLinks>
<active>true</active>
<codePool>local</codePool>
</Neo_CustomerNavigationLinks>
</modules>
</config>
Now in local.xml add following content
<customer_account>
<reference name="customer_account_navigation">
<action method="removeLinkByName">
<name>newsletter</name>
</action>
</reference>
</customer_account>
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.
Best Answer
I have checked it and it's saying "your room" is a required. whereas I can't see this field. You can do two things:
You can delete this required customer attribute from database. For removing any custom attributes run below code by adding some where in your loading templates file
Note: replace customcode with attribute code of "your room" Once run, please remove above code.
Or, If you don't want to remove this customer attribute then post a dummy or null value using hidden type field with this attribute from customer registration template.