Magento – Añadir campo al registro del cliente

Os detallo cómo añadir un nuevo campo en el formulario al registro del cliente en Magento 1.X. Vaya por delante que no es tarea sencilla. Intentaré ir paso a paso, y ya os digo que personalmente he tenido problemas que he ido solucionando.

Magento Logo

Lo haremos creando un módulo y subiéndolo al servidor donde esté alojada nuestra tienda. Se trata de subir ciertos ficheros que os detallo, y automáticamente se instala todo.

El ejemplo siguiente añade un campo en el formulario registro dónde el usuario puede escoger a que fundación va destinado parte del coste de la compra.

Las carpetas que no existan, las creáis. Las pruebas se han realizado sobre Magento 1.7.0.2 (otras versiones no se si funcionan)

Creamos los ficheros necesarios

app/etc/modules/Obrasocial_Customer.xml

<config>
    <modules>
        <Obrasocial_Customer>
            <codePool>local</codePool>
            <active>true</active>
        </Obrasocial_Customer>
    </modules>
</config>

app/code/local/Obrasocial/Customer/Model/Entity/Setup.php

<?php
class Obrasocial_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup
{
    public function getDefaultEntities(){
        return array(
                'fundacio'=>array(
                        'type'=> 'select',
                        'label'=> 'Obra social',
                        'visiable' => true,
                        'required' => true,
                        'sort_order' => 0,
                )
        );
    }
}
?>

app/code/local/Obrasocial/Customer/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Obrasocial_Customer>
            <version>1.0.0.0</version>
        </Obrasocial_Customer>
    </modules>
    <global>
        <fieldsets>
            <customer_account>
                <fundacio><create>1</create><update>1</update></fundacio>
            </customer_account>
        </fieldsets>
        <models>
            <Obrasocial_Customer>
                <class>Obrasocial_Customer_Model</class>
            </Obrasocial_Customer>
        </models>
        <helpers>
            <Obrasocial_Customer>
                <class>Obrasocial_Customer_Helper</class>
            </Obrasocial_Customer>
        </helpers>
        <resources>
            <customerattribute_setup>
                <setup>
                    <module>Obrasocial_Customer</module>
                    <class>Obrasocial_Customer_Model_Entity_Setup</class>
                </setup>
            </customerattribute_setup>
        </resources>
    </global>
</config>

app/code/local/Obrasocial/Customer/sql/customerattribute_setup/mysql4-install-0.1.0.php

<?php
$installer = $this;
$installer->startSetup();
 
$installer->addAttribute('customer', 'fundacio', array(
    'label' => 'Obra social',
    'visible' => 1,
    'required' => 1,
    'position' => 1,
    'sort_order' => 0    
));
 
$installer->endSetup();
 
$customer = Mage::getModel('customer/attribute')->loadByCode('customer', 'fundacio');
$forms= array('customer_account_edit', 'customer_account_create', 'adminhtml_customer', 'checkout_register');
$customer->setData('used_in_forms', $forms);
$customer->save(); 
?>

app/design/frontend/default/mitema/template/customer/form/edit.phtml

Este fichero lo he copiado de la carpeta app/design/frontend/base/default/template/customer/form/edit.phtml. Una vez copiado a nuestra plantilla, lo modifico añadiendo al formulario el campo que necesito:

<li>
    <label for="fundacio" class="required"><em>*</em>Obra social on vol que destinem l'ajuda</label>
    <div class="input-box">
        <select name="fundacio" id="fundacio" class="input-text required-entry">
            <option value="Fundació Carreras">Fundaci&oacute; Carreras</option>
        </select>
    </div>
</li>

app/design/frontend/default/mitema/template/customer/form/register.phtml

Este fichero lo he copiado de la carpeta app/design/frontend/base/default/template/customer/form/register.phtml. Una vez copiado a nuestra plantilla, lo modifico añadiendo al formulario el campo que necesito:

<li>
    <label for="fundacio" class="required"><em>*</em>Obra social on vol que destinem l'ajuda</label>
    <div class="input-box">
        <select name="fundacio" id="fundacio" class="input-text required-entry">
            <option value="Fundació Carreras">Fundaci&oacute; Carreras</option>
        </select>
    </div>
</li>

app/design/frontend/default/mitema/template/persistent/customer/form/register.phtml

Este fichero lo he copiado de la carpeta app/design/frontend/base/default/template/persistent/customer/form/register.phtml. Una vez copiado a nuestra plantilla, lo modifico añadiendo al formulario el campo que necesito:

<li>
    <label for="fundacio" class="required"><em>*</em>Obra social on vol que destinem l'ajuda</label>
    <div class="input-box">
        <select name="fundacio" id="fundacio" class="input-text required-entry">
            <option value="Fundació Carreras">Fundaci&oacute; Carreras</option>
        </select>
    </div>
</li>

Los subimos al servidor

Aquí cuidado. Normalmente según que carpetas tienen permisos que no nos permiten subirlo mediante FTP, por lo que deberemos entrar al servidor y asignar a las carpetas privilegios de escritura, los subimos y volvemos a dejar los mismos permisos que teníamos.

Antes de probar

Antes de nada, limpiar caché (Sistema > Cache > Limpiar caché).

Las pruebas

Al registrarse un usuario le sale el correspondiente campo, al editar su información también puede editar el campo, y en la parte administrativa también podemos ver y modificar el campo.

Problemas

  • Pues las diferentes versiones de Magento funcionan de forma diferente. Las carpetas no son estas.
  • Si cambias permisos de carpetas, la tienda puede dejar de funcionar. Recordad antes los permisos que tienen.

Os recomiendo

  • Primero hacedlo en local. Si os funciona, realizar el proceso en el servidor.
  • Haced copias de seguridad.

Espero que os sea de utilidad el artículo: Magento – Añadir campo al registro del cliente. Y tened en cuenta que es para la versión Magento 1.X.


Más información