Magento – Añadir campo al registro del cliente

Os detallo cómo añadir un nuevo campo en el formulario de registro de un usuario en Magento. 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.

[wp_ad_camp_2]

Os recomiendo

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

Artículos relacionados

Magento – Añadir atributos del producto en e... En la plantilla de veustro magento, tendréis el fichero cart.phtml que trata la view que muestra el listado de productos que hay al clicar sobre el ca...
Magento – Reindexar desde consola (remotamen... Como sabéis, Magento al añadir productos, categorías... necesita reindexar la base de datos. Para ello, desde el panel de administración podemos ir a ...
Magento – Cambiar stocks y cantidades en múl... Aquí os dejo el script que consigue cambiar de forma rápida los stocks de múltiples productos en Magento. Pero sobretodo: os recomiendo que primero ha...
Magento – Crear otro formulario de contacto ... Ya adelanto que es tedioso, complicado y de una alto nivel para poder hacerlo. Voy a indicar las pautas y dónde podéis encontrar la información, pero ...

4 comentarios

  • Hola! Muy interesante, gracias por compartir la información. La verdad es que todo el tema del e-commerce con Magento es muy interesante, yo no lo conozco demasiado porque lo llevaban la gente de Premium eCommerce, pero me interesa mucho!
    Silvia

  • David

    En primer lugar muchas gracias por el post, me ha resultado tremendamente util. Pero tengo una duda, hice un prueba creando un campo y todo funcionó correctamente, pero ahora quiero agregar más campos, ¿como se haría?, ¿como puedo forzar para que se ejecute nuevamente el install?.

    • Hola David, te recomiendo que hagas todos los campos a la vez. Así evitarás problemas y tener que crear diferentes modelos. Así, te recomiendo que crees un modelo nuevo que se llame por ejemplo registro completo, y ahí añadas todos los campos que necesites.

  • wilson

    He realizado todo igual, se muestra en todos los formularios pero no guarda en la Base de datos y tampoco recupera a pesar de colocar, el metodo getRazonsocial:

    Razon Social

    <input type="text" name="Razonsocial" id="Razonsocial" class="input-text" value="escapeHtml($this->getFormData()->getRazonsocial()) ?>”>

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*