Know more about your customer…
2012-12-26 18:53
381 查看
Magento provides a simple user account signup page. However, someonline stores might want to collect relevant customer informationfor more targeted and personal interactions with their customers.Some examples of details that could be collected include
shoe size,clothing size or favourite colour.
Adding your custom fields on the signup form is not difficult, butit is not trivial either, since one cannot use the Magento backendfor the task. As an example of how it can be done, I willdemonstrate the addition of a new custom field to the signup
formasking new users to enter their favourite ice cream flavour.
We need to make a module to extend the functionality of thecustomer model. Start by adding the module xml file tothe
need to decide on a module name. In this example we will usethe Fontis scope, and call the module 'Customer'. Therefore we needto create a file named
the following content:
Adding the above file means that Magento is now aware of a newcustom module. Now, we need to create the module itself, which mustbe located in the
this directory, create an
copying the following file inside:
Edit the file and change :
to:
This file contains two different
in
in
the end of the second one, in the
In this example
chosen attribute code. The attribute code that you choose herewill be important in all the following steps.
Now we need to add the attribute to the Customer Entity SetupModel. To do this, copy the
a new file,
module. Put the method inside the following class:
Then add the following code at the end of the attributes arrayinside the customer arrray:
In this case the new attribute is set as compulsory byadding
end of that array. If you want the attribute to be optional,remove the
The new attribute needs to be added to the Magento database. Thebest way to do this is to tell Magento to insert it for you. Youcan either create your own script that uses the Magento code or youcan just drop the following code into one of your templatefiles:
A handy place to add the above code is the
it needs to be edited to add a custom field for the newattribute. Make sure the above code is enclosed with
To add the attribute (ie. run this code) view the register newcustomer page. Once you have viewed the page this code can beremoved.
In this example the attribute type is set to
input is set to
needs to be modified to match the requirements of eachspecific attribute.
At this point, the attribute is installed and it will show up inthe backend. We need to modify the frontend, so that the customerscan enter values for the custom attribute. There are two fairlysimilar phtml files:
As a minimum, you need to add a new text box in the
that is what customers see on the register page. You can addthe same text box in the
that customers can make changes to the original entry that theyhave made on sign-up. Make sure that the ID and name of the newinput text box match the attribute code chosen in step 3. In thiscase it is 'flavour'. The following shows the sample code that addsa
new text box with a label:
they are disabled by an inactive
so far has not actually been linked to anything else inMagento. Therefore to enable the address related fields you simplyneed to comment out or delete the following statements:
and
Note that there are two occurrences of this
is around the area where the customer actually inputs theirdata and the other is at the bottom of the file. The firststatement shows all the areas for the customer to enter their dataand the second statement is around some JavaScript code that setsup the State/Province
select.
you need toremove the relevant statement from:
This is the code that needs to be removed from
In order to make sure that your Magento installation still worksproperly after you do an upgrade, rather than changing the corefile, the safest option is to copy the above file into thefollowing file structure:
Since files in
affected when you run upgrades, it means your signup form willwork as expected after an upgrade.
shoe size,clothing size or favourite colour.
Adding your custom fields on the signup form is not difficult, butit is not trivial either, since one cannot use the Magento backendfor the task. As an example of how it can be done, I willdemonstrate the addition of a new custom field to the signup
formasking new users to enter their favourite ice cream flavour.
We need to make a module to extend the functionality of thecustomer model. Start by adding the module xml file tothe
app/etc/modules/directory.You
need to decide on a module name. In this example we will usethe Fontis scope, and call the module 'Customer'. Therefore we needto create a file named
Fontis_Customer.xmlandadd
the following content:
<config[b]>[/b] <modules[b]>[/b] <Fontis_Customer[b]>[/b] <active[b]>[/b]true</active[b]>[/b] <codePool[b]>[/b]local</codePool[b]>[/b] </Fontis_Customer[b]>[/b] </modules[b]>[/b] </config[b]>[/b]
Adding the above file means that Magento is now aware of a newcustom module. Now, we need to create the module itself, which mustbe located in the
app/code/local/Fontis/Customerdirectory.Inside
this directory, create an
etcdirectoryand
copying the following file inside:
app/code/core/Mage/Customer/etc/config.xml
Edit the file and change :
<modules[b]>[/b] <Mage_Customer[b]>[/b] <version[b]>[/b]x.x.x</version[b]>[/b] </Mage_Customer[b]>[/b] </modules[b]>[/b]
to:
<modules[b]>[/b] <Fontis_Customer[b]>[/b] <version[b]>[/b]1.0.0</version[b]>[/b] </Fontis_Customer[b]>[/b] </modules[b]>[/b]
This file contains two different
<fieldsets>-one
in
<config><admin>andone
in
<config><global>.At
the end of the second one, in the
<config><global><fieldsets><customer_account>scope,add:
<flavour[b]>[/b]<create[b]>[/b]1</create[b]>[/b]<update[b]>[/b]1</update[b]>[/b]</flavour[b]>[/b]
In this example
flavouristhe
chosen attribute code. The attribute code that you choose herewill be important in all the following steps.
Now we need to add the attribute to the Customer Entity SetupModel. To do this, copy the
getDefaultEntitiesmethodfrom
app/code/core/Mage/Customer/Model/Entity/Setup.phpfileto
a new file,
Model/Entity/Setup.phpinour
module. Put the method inside the following class:
class Fontis_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup
Then add the following code at the end of the attributes arrayinside the customer arrray:
'flavour' => array( 'label' => 'Ice Cream Flavour', 'visible' => true, 'required' => true, ),
In this case the new attribute is set as compulsory byadding
'required' => true,tothe
end of that array. If you want the attribute to be optional,remove the
requiredlines.
The new attribute needs to be added to the Magento database. Thebest way to do this is to tell Magento to insert it for you. Youcan either create your own script that uses the Magento code or youcan just drop the following code into one of your templatefiles:
$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $setup->addAttribute('customer', 'flavour', array( 'label' => 'Ice Cream Flavour', 'type' => 'varchar', 'input' => 'text', 'visible' => true, 'required' => true, 'position' => 1, ));
A handy place to add the above code is the
<theme>/template/customer/form/register.phtmlfilesince
it needs to be edited to add a custom field for the newattribute. Make sure the above code is enclosed with
<?php ... ?>
To add the attribute (ie. run this code) view the register newcustomer page. Once you have viewed the page this code can beremoved.
In this example the attribute type is set to
varcharandthe
input is set to
text.This
needs to be modified to match the requirements of eachspecific attribute.
At this point, the attribute is installed and it will show up inthe backend. We need to modify the frontend, so that the customerscan enter values for the custom attribute. There are two fairlysimilar phtml files:
<theme>/template/customer/form/register.phtml <theme>/template/customer/form/edit.phtml
As a minimum, you need to add a new text box in the
register.phtmlfile,since
that is what customers see on the register page. You can addthe same text box in the
edit.phtmlfileso
that customers can make changes to the original entry that theyhave made on sign-up. Make sure that the ID and name of the newinput text box match the attribute code chosen in step 3. In thiscase it is 'flavour'. The following shows the sample code that addsa
new text box with a label:
<div class="input-box"> <label for="flavour"><?php echo $this->__('Favourite Ice Cream Flavour') ?><span class="required">*</span></label><br /> <input type="text" name="flavour" id="flavour" value="<?php echo $this->htmlEscape($this->getFormData()->getFlavour()) ?>" title="<?php echo $this->__('Flavour') ?>" class="required-entry input-text" /> </div>
Address details
If you only want to add fields for address details you are in luck.Those fields are already setup in thetemplate/customer/form/register.phtmlfile,but
they are disabled by an inactive
ifstatementthat
so far has not actually been linked to anything else inMagento. Therefore to enable the address related fields you simplyneed to comment out or delete the following statements:
<?php if($this->getShowAddressFields()): ?>
and
<?php endif; ?>
Note that there are two occurrences of this
ifstatement.One
is around the area where the customer actually inputs theirdata and the other is at the bottom of the file. The firststatement shows all the areas for the customer to enter their dataand the second statement is around some JavaScript code that setsup the State/Province
select.
Removing phone number field
One final issue relates to the telephone number field. By defaultit is considered a required field and that is hard-coded in theinput validation function. If you do not want the telephone fieldto be mandatory (or any other field for that matter),you need toremove the relevant statement from:
magento/app/code/core/Mage/Customer/Model/Address/Abstract.php
This is the code that needs to be removed from
publicfunction validate():
if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) { $errors[] = $helper->__('Please enter telephone.'); }
In order to make sure that your Magento installation still worksproperly after you do an upgrade, rather than changing the corefile, the safest option is to copy the above file into thefollowing file structure:
magento/app/code/local/Mage/Customer/Model/Address/Abstract.php
Since files in
/localdon'tget
affected when you run upgrades, it means your signup form willwork as expected after an upgrade.
相关文章推荐
- DB2 System Catalog Views: Everything You Need to Know About Your DB Objects
- Know More About Oracle Row Lock(二、解决疑惑,说明行级锁和TX锁即事务锁是不同概念的两个东西)
- Know more about Buffer Cache and Latch
- Know more about Buffer Cache and Latch
- Know more about Enqueue Deadlock Detection
- Your Action Mean More than You Know -- By Arthur
- Know more about RAC statistics and wait event
- Know more about RBA redo block address
- Know more about Oracle Latches
- Know more about Enqueue Deadlock Detection
- know more about Dubai history
- Know more about Oracle Latches
- Know more about Oracle User Space Quota
- Learn know more about big data
- Know more about commit
- Know more about RAC statistics and wait event
- Know more about AWR Parse Statistics
- Know more about Oracle Nologging
- Probably more than you want to know about keyboarding in Windows Forms
- Know more about DML