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 – Permisos carpetas y ficheros Una vez instalamos Magento, se nos indica en las instrucciones, que determinadas carpetas y ficheros hay que aplicarles unos permisos determinados. No...
Magento – Unir ficheros JS en uno solo Veamos la excelente opción de Magento para unir en un solo ficheo JS todos los ficheros que carga individualmente. Es una de las exigencias de la mayo...
Magento – Saber la página actual Para saber la página actual en la que estamos en Magento, utilizaremos el siguiente código: $currentUrl = Mage::helper('core/url')->getCurrentUrl...
Magento – Cambiar los sku de los productos p... Por diferentes motivos, nos puede interesar el SKU de productos dentro de nuestro Magento. Cuando solo es un par de ellos, no hay problem, pero cuando...

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 *

*