您的位置:首页 > 其它

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
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.xml
andadd
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/Customer
directory.Inside
this directory, create an
etc
directoryand
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
flavour
isthe
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
getDefaultEntities
methodfrom
app/code/core/Mage/Customer/Model/Entity/Setup.php
fileto
a new file,
Model/Entity/Setup.php
inour
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
required
lines.

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.phtml
filesince
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
varchar
andthe
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.phtml
file,since
that is what customers see on the register page. You can addthe same text box in the
edit.phtml
fileso
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 the
template/customer/form/register.phtml
file,but
they are disabled by an inactive
if
statementthat
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
if
statement.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
/local
don'tget
affected when you run upgrades, it means your signup form willwork as expected after an upgrade.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: