Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Nieuwe klant registratie formulier uitbreiden
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 

Heren,

Voor mijn huidige implementatie moet ik het registreren van de klanten wijzigen.
Er moet een element (selectbox) komen, waarbij klanten kunnen selecteren hoe ze met de webshop in aanmerking zijn gekomen.

Nu had ik wat gegoogled en kwam ik uit bij het wijzigen van enkele files waaronder:

app/design/frontend/mijnTemplate/mijnTemplate/template/customer/form/register.phtml
Hier kan ik nog wel inkomen, maar ik moest ook
app/code/core/Mage/Customer/Model/Entity/Setup.php wijzigen, maar dit lijkt me niet de bedoeling, hier staat nl letterlijk in:

/**
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
**/
Ofterwijl, dan ben ik bij een update van Magento zeer waarschijnlijk de sjaak.

Nu concreet de vraag:

Hoe voeg ik elementen toe bij het registratie formulier
- Zodat de klant kan kiezen uit elementen (die makkerlijk in de BO uitbreidbaar zijn)
- Het dus in de database komt te staan.
- Bij een update blijft bestaan.

Ik hoor het erg graag.

Met vriendelijke groet,
Johan

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

Hoi Johan,

Voor een shop die ik recentelijk opgezet heb diende de klant meer gegevens over zichzelf in te vullen, waaronder een mogelijk debiteurnummer, een gewoon tekst veld. De waardes die hij invult komen keurig in de database dus ik denk dat het wel op dezelfde manier mogelijk is voor jouw situatie.

Sleutel tot mijn oplossing is de volgende extensie:
http://www.magentocommerce.com/extension/898/attributes-manager
Je kan hiermee je catalogus, klant en klantadressen van extra attributen voorzien en de bestaande attributen beheren..

Als je met deze extensie voor de klant een nieuwe drop down box gemaakt hebt zal je de volgende gegevens aan moeten passen:
@design: customer/form/register.phtml een extra invoerveld

@app/code/core/Mage/Customer/etc/config.xml:
Voeg de volgende regel toe om de waarde in de backend opvraagbaar te maken (je zal voor backendweergave nog wel ergens een phtml file aan moeten passen):

<admin>
        <
fieldsets>
            <
customer_dataflow>
                <
nieuwe_waarde><billing>1</billing><shipping>1</shipping><mapped>1</mapped></nieuwe_waarde>
            </
customer_dataflow>
        </
fieldsets>
    </
admin>

En het volgende stukje code om de bezoeker toe te staan deze info te creëren als hij zich aanmeld:

<global>
        <
fieldsets>
            <
customer_account
                <
nieuwe_waarde><create>1</create></nieuwe_waarde>
            </
customer_account>
        </
fieldsets>
    </global>

Bij een eventuele upgrade van Magento raak je de wijzigingen in config.xml kwijt. In mijn geval hou ik een notitie bij over de zaken waar ik bij een upgrade op moet letten. Een andere mogelijkheid is om de ‘core’ in het pad naar de xml file te vervangen voor ‘local’. Hou er in elk geval rekening mee dat je na een upgrade moet kijken of Magento iets aan de originele config gewijzigd heeft.

Afgezien van het laatste item (dat volgens mij niet anders dan handmatig kan) zijn je vragen hopelijk beantwoord, toch?

Groet,

Finn

edit: 2e set config xml ‘nieuwe_waarde’ neergezet ipv het origineel

 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 

Hoi Finn,

Bedankt voor je reactie, ik zal het eens gaan proberen.
Ik heb echter meteen al een probleempje, want ik heb die extension (attributes-manager) geinstalleerd en als ik er (na opnieuw inloggen) na toe ga, en bijvoorbeeld op ‘Customers attributes’
klik, gebeurd er niets, toevallig een idee?

Zorgt die attributes-manager er overigens ook voor dat de database etc. wordt aangepast?
En dat blijft bij updates van magento dus ook gewaardborgd?

Groeten,
Johan

EDIT:

Fixed!

Ik kan dus weer verder, overigens gefixt met:

go to “app/design/adminhtml/default/default/template/attributemanager/index.phtml”

and modify the link to:

<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')->__('Customer\'s address attributes?></a></h3>
    </
div>

Bron
http://www.magentocommerce.com/boards/viewthread/37548/

 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 
Finn - 22 July 2009 09:10 PM


Als je met deze extensie voor de klant een nieuwe drop down box gemaakt hebt zal je de volgende gegevens aan moeten passen:
@design: customer/form/register.phtml een extra invoerveld

Wat moet je hier precies aanpassen, want het invoerformulier is dynamisch en kan ik hier toch niet hard neer zetten?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

- De attributes manager zorgt ervoor dat de klant entity een extra attribuut krijgt.
- De aanpassingen in je config.xml zorgen ervoor dat de beheerder en de klant toegang krijgen tot dit attribuut en dat de waardes ook verwerkt worden na een POST.
- Check bij een upgrade altijd of deze extensie compatibel is met jouw versie van Magento. In het ergste geval kan je geen wijzigingen meer uitvoeren. In principe behoud je je extra attribuut in de database.
- Omdat de wijzigingen in config.xml niet vanuit een extensie geregeld worden zal je er dus rekening mee moeten houden dat je bij een upgrade opnieuw aan de beurt kan zijn. Als je het clean wilt hebben dan zal je een aparte extensie moeten schrijven.
- In register.phtml zal je een extra invoerveld aan moeten maken. Het genereren van dit formulier gaat niet automatisch, je moet handmatig aangeven welke elementen er gecreëerd moeten worden. Afhankelijk van hoe je je design opgezet hebt is dit redelijk bestand tegen upgrades.
- Wil je de waarde die de klant invult in het backend terug zien dan zal je ook daar een phtml file aan moeten passen om hem weer te geven.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 

In register.phtml zal je een extra invoerveld aan moeten maken. Het genereren van dit formulier gaat niet automatisch, je moet handmatig aangeven welke elementen er gecreëerd moeten worden. Afhankelijk van hoe je je design opgezet hebt is dit redelijk bestand tegen upgrades.

Oke nogmaals bedankt.
Maar nog een vraag, want hoe zorg ik dat de drop-down waarden zichtbaar zijn voor de klant, dus in register.phtml staan.

Nu zet ik daar hard een invoerveld neer (die hij uiteraard wel toont, maar ik wil dus de waarden die ik in de manager ingevoerd hebt).

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

Da’s een goeie. Er schieten me zo twee opties te binnen. De eerste is een slordige workaround waarbij je de select met opties gewoon hard in je register.phtml zet, maarja da’s zonde van de dynamiek. De andere optie vergt wat meer werk, je zal een functie moeten schrijven die de attribuut waardes ophaalt, waarna je vervolgens voor elke waarde een optie genereert.

<select id="custom_field" name="custom_field" class="select">
 
<?php foreach ($this->getCustomFieldOption() as $option): ?>
 
<option value="<?php echo $option['value'] ?>"><?php echo $option['label'] ?></option>
 
<?php endforeach; ?>
</select>
De functie getCustomFieldOption kan je waarschijnlijk het beste in de phtml laten staan, alhoewel dit niet de meest nette oplossing is (hij hoort eigenlijk in ‘app/code/core/Mage/Customer/Block/Form/Register.php’)

Na even zoeken vond ik de code om attributen rechtstreeks te benaderen (http://www.sharpdotinc.com/mdost/2009/04/06/magento-getting-product-attributes-values-and-labels/)

Als het goed is zou je er met onderstaande functie moeten zij, ik ben benieuwd.

public function getCustomFieldOption() {
  $attribute 
Mage::getModel('eav/config')->getAttribute('custom_field''attribute_id');
 return 
$attribute->getSource()->getAllOptions(truetrue);
}
 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 

Het leek er al aardig op, maar het werkte nog niet helemaal.

Ik heb het nu (het tonen) voor elkaar met de volgende code: (ook voor anderen wellicht interessant)

Zet de volgende code in app/code/Mage/Customer/Block/Form/Register.php

/**
     * Get CustomField options
     *
     * @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(truetrue);
    
}

Dus i.p.v. eav/config customer/customer.

Nu geeft hij het op een dynamische manier weer en het is ook meteen (zonder het aanpassen van een admin phtml file) meteen zichtbaar in de backoffice.
Ook het opslaan heb ik gefixt en het werkt dus perfect.

Zie ook: http://www.mforum.nl/magento-installatie-configuratie-vragen/1460-extra-velden-bestelling.html

Alleen vraag ik me nog af waarom in de Wiki staat, dat je ook iets moet doen in Customer/Model/Entity Setup.php zie: http://www.magentocommerce.com/wiki/custom_account/registration_fields enig idee waarom ze dat doen?

Of regelt de Arributes manager dit voor ons?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

Tof dat het gelukt is!

Ik denk inderdaad dat de attribute manager de aanpassingen voor de customer entity voor zijn rekening neemt en je de aanpassing in de wiki van “Customer/Model/Entity Setup” dus niet nodig hebt.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 
Finn - 27 July 2009 05:35 AM

Da’s een goeie. Er schieten me zo twee opties te binnen. De eerste is een slordige workaround waarbij je de select met opties gewoon hard in je register.phtml zet, maarja da’s zonde van de dynamiek. De andere optie vergt wat meer werk, je zal een functie moeten schrijven die de attribuut waardes ophaalt, waarna je vervolgens voor elke waarde een optie genereert.

<select id="custom_field" name="custom_field" class="select">
 
<?php foreach ($this->getCustomFieldOption() as $option): ?>
 
<option value="<?php echo $option['value'] ?>"><?php echo $option['label'] ?></option>
 
<?php endforeach; ?>
</select>
De functie getCustomFieldOption kan je waarschijnlijk het beste in de phtml laten staan, alhoewel dit niet de meest nette oplossing is (hij hoort eigenlijk in ‘app/code/core/Mage/Customer/Block/Form/Register.php’)

Na even zoeken vond ik de code om attributen rechtstreeks te benaderen (http://www.sharpdotinc.com/mdost/2009/04/06/magento-getting-product-attributes-values-and-labels/)

Als het goed is zou je er met onderstaande functie moeten zij, ik ben benieuwd.
public function getCustomFieldOption() {
  $attribute 
Mage::getModel('eav/config')->getAttribute('custom_field''attribute_id');
 return 
$attribute->getSource()->getAllOptions(truetrue);
}

@Finn:

Toch nog even een vraag, wij hebben in app/design/frontend/<jouTemplate>/template/customer/form/register.phtml het invoerveld neer gezet. Dit is op dynamische wijze i.c.m. die attributes manager, echter staat in deze file ook die disclaimer van ‘do not update’.

/**
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
**/

Nu de vraag, is dit wel update compatibel?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

Dit is in zoverre bestand tegen updates dat Magento de bestanden onder “<jouTemplate>” niet vervangt omdat ze niet in de “app/design/frontend/default/default/” map zitten. Je kan de melding dus eigenlijk in alle gevallen negeren als je een bestand buiten de default Magento structuur neerzet (zowel code/core, design als skin bestanden).

Hou er wel rekening mee dat Magento de betreffende originele “default” bestanden kan updaten waardoor de code verandert. Het is verstandig om een kopie van het origineel te bewaren en bij elke update van Magento te kijken of men iets in dit bestand verandert heeft en of het verstandig is om deze wijzigingen over te nemen in je eigen template.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Emico
Member
 
Total Posts:  51
Joined:  2009-07-22
Netherlands
 

Ja oke, met andere woorden: in de views (in app/design/frontend/<jouTemplate>/template/ etc. kan je altijd wijzigen wat je maar wilt.
In de app/design/frontend/default/template/ daarin tegen niet.

Dit was inderdaad al wat ik dacht, maar wilde het toch even zeker weten smile
Zojuist de update naar 1.3.2.3 gedaan en dat ging prima smile

Overigens nog een vraag wat wel ontopic is:
Ik heb ook extra velden gemaakt bij de checkout, deze worden echter niet opgeslagen nog.

Ik heb hiervoor dezelfde dingen gedaan als bij customer, heb je toevallig enig idee?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Finn
Member
 
Total Posts:  75
Joined:  2008-12-03
Finland & The Netherlands
 

De attribute manager stelt je in staat van de volgende dingen attributen te beheren:
- Categories
- Customers
- Customer’s address

De checkout zit onder het sales/order model en staat dus los van de drie models waar je met de attribute manager bij kunt. Ik denk dat je met de “customer order comment” extensie meer in de buurt komt van wat je wilt: http://www.magentocommerce.com/extension/1036/customer-order-comment

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top