Vaak is het gewenst om extra velden toe te voegen aan de klant-registratie (Customer_Block_Form_Register). Hier zijn een aantal stappen voor nodig:

Definiëren extra velden bij klant registratie

1.) Installeer de ‘Attributes manager’: Magento Connect – Attributes manager – Overview – eCommerce Software for Growth

2.) Fix de URL’s van deze extensie in de BackOffice.
Ga hiervoor naar: “app/design/adminhtml/{template}/template/attributemanager/index.phtml”

En fix de a href’s met de volgende code:

<div align="center">
        <h3 class="icon-head"><u>< ?php echo Mage::helper('attributemanager')->__('Choose attributes to manage') ?></u></h3>
        <br /><br />
        <h3 class="icon-head">
        <a href="<?php echo $this->getUrl('*/*/category');?>">< ?php echo Mage::helper('attributemanager')->__('Categories attributes') ?></a>
        <br />
        <a href="<?php echo $this->getUrl('*/*/customer');?>">< ?php echo Mage::helper('attributemanager')->__('Customers attributes') ?></a>
        <br />
        <a href="<?php echo $this->getUrl('*/*/address');?>">< ?php echo Mage::helper('attributemanager')->__('Customers address attributes') ?></a></h3>
    </div> 

3.) Maak je custom attribute (extra invoer veld). Bijvoorbeeld extra veld bij de klant registratie (customer registration).
Dit kunt u hier doen: admin/Systeem/Manager/Manage attributes
De attribute manager zorgt ervoor dat het custom attribute in de tabel eav_attribute wordt geplaatst.

4.) We moeten de core klasse Mage_Customer_Block_Form_Register uitbreiden met wat functionaliteit.
Aangezien we bij een update ook operationeel willen blijven, moeten we magento hier uitbreiden, we attenderen Magento op onze extra functionaliteit. Let op De stap is alleen nodig bij het dynamisch ophalen van drop-down lijsten, voor een simpel invoer veld is deze functie niet nodig

Maak een file {BedrijfsNaam}_Customer.xml in: app/etc/modules/ en voeg hier de volgende XML code aan toe.

< ?xml version="1.0"?>
<config>
	<modules>
        <bedrijfsnaam_customer>
           <active>true</active>
           <codepool>local</codepool>
           <version>>0.1.0< /span></version>
       </bedrijfsnaam_customer>
	</modules>
</config>

Nu weet Magento dat hij eerst bij de door jou zelf gedefineerde module moet kijken.
Maar nu moeten we deze klasse nog wel even maken uiteraard.
Maak dit bestand aan:
app/code/local/{BedrijfsNaam}/Customer/Block/Form/Register.php

Let op
Extra zelf gedefineerde code, moet je altijd in de map app/code/local/ plaatsen, deze code wordt bij een update van Magento niet overschreven.

Hier de klasse zelf (de Register.php):

< ?php
/**
 * Customer register form block
 *
 * @author      Johan van de Pol
 */
class BedrijfsNaam_Customer_Block_Form_Register extends Mage_Customer_Block_Form_Register
{
    /**
     * Get CustomField options
     *
     * @param String $custom_field            Name of custom_field.
     * @param Integer $attribute_id            Attribute_ID of custom field.
     * @return Array                         With attribute options.
     */
    public function getCustomFieldOption ($custom_field, $attribute_id)
    { 
        $attribute = Mage::getModel('customer/customer')->getAttribute($custom_field, $attribute_id);
        return $attribute->getSource()->getAllOptions(true, true);
    }
} 

Voor de afhandeling moet magento er ook op worden geattendeerd dat er een extra attribute bij gekomen is (voor de afhandeling en het opslaan). En hij moet weten dat de klasse van jou module eerst moet worden aangeroepen.

Maak hiervoor het volgende bestand aan:
app/code/local/{BedrijfsNaam}/Customer/etc/config.xml

< ?xml version="1.0"?>
<config>
	<global>
		<blocks>
			<customer>
				<rewrite>
					<form_register>BedrijfsNaam_Customer_Block_Form_Register</form_register>
				</rewrite>
			</customer>
		</blocks>
		<fieldsets>
      			<customer_account>
      				<extra_veld><create>>1< /span></create></extra_veld>
	      		</customer_account>
		</fieldsets>
	</global>
</config>

5.) Nu is het tijd voor de weergave van het drop-down attribute zelf.
Zet hiervoor onderstaande code in app/design/frontend/{template}template/customer/form/register.phtml

<div class="input-box">
                    <label for="UW_EXTRA_VELD">< ?php echo $this->__('UW_EXTRA_VELD') ?><span class="required">*</span></label><br />
                    <select id="UW_EXTRA_VELD" name="UW_EXTRA_VELD" class="select">
                         < ?php foreach ($this->getCustomFieldOption('UW_EXTRA_VELD', 'attribute_id') as $option): ?>
                         <option value="<?php echo $option['value'] ?>">< ?php echo $option['label'] ?></option>
                         < ?php endforeach; ?>
                    </select>
                </div>

Opmerking
Zonder attribute_id werkt hij blijkbaar ook, maar het attribute ID vind je in de database en wel in de volgende tabel ‘eav_attribute’.
De volgende Query levert u het juiste attributeID op:

SELECT attribute_id FROM `eav_attribute` WHERE `attribute_code` = 'UW_EXTRA_VELD'

Het extra attribute (input field or dropdown list) is nu zichtbaar en wordt ook netjes opgeslagen.

Deze tutorial is geschreven op het moment dat Magento 1.3.2.3 de meest recente versie was.

Gerelateerde berichten