IT related news, fotography, fun and webdevelopment
5 aug
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:
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.
2 Responses for "Magento: Voeg extra velden toe bij klant-registratie."
Beste Johan,
Bedankt voor de heldere uitleg!
Zelf heb ik via ‘Attributes manager’ een note veld toegevoegd aan de customer. Ik wil de inhoud hiervan tonen naast het Primary Billing Address binnen de customer view. Kan jij een hint geven hoe ik de waarde van het veld oproep?
Ik heb een aanpassing gedaan op view.phtml, maar kom er vooralsnog niet achter welke functie ik moet aanroepen om de gegevens op te halen.
Bedankt voor je hulp!
Ik had een vraag over het bezorgen alleen in een aantal plaatsen.
Ik ben bezig om een website te bouwen voor mijn broer zijn pizzeria. Het probleem is hij bezorgt alleen in 2 steden. Hoe kan ik instellen dat mensen bij hun adres gegevens alleen kunnen kiezen uit die 2 steden
Plaats een reactie