Añadir campos en el formulario de registro en Prestashop 1.7

Introducción (leer atontados)

Traducción literal del artículo de prestacraft.com.

En el artículo no se hace uso de los overrides, lo cual no es una buena práctica, pero como he comentado es una traducción literal del artículo.

  • Tras una segunda revisión del documento, la validez del documento después de bastantes meses, sigue siendo “aceptable” hasta la versión 1.7.2.4 de Prestashop

Añadir campos en la base de datos

Añadimos el campo en la tabla: ps_customer, ejecutando desde phpMyAdmin la siguiente consulta (en vuestra base de datos):

ALTER TABLE ps_customer ADD COLUMN campo_prueba VARCHAR(250);

Recuerdo que estoy usando el “prefijo ps_” porque en mi instalación de prueba el prefijo de las tablas de Prestashop  es “ps_”. Quizás en vuestro caso (aunque no suele ser habitual) no es el mismo prefijo depende de cómo lo hayáis configurado en la instalación de Prestashop).

Creando campo en la base de datos

Hemos añadido en la tabla “ps_customer” un nuevo campo llamado campo_prueba de tipo varchar.

Editar ficheros para la incorporación del campo en el FrontOffice

En este ejemplo, edito directamente los ficheros originales, tal como proponen en el artículo original, pero lo ideal y óptimo es hacer un override y hacer cambios sobre el override.

Fichero:

classes/form/CustomerFormatter.php

Buscamos esta línea:

$format['email'] = (new FormField)

Y justo encima añadimos el siguiente código:

$format['campo_prueba'] = (new FormField)
->setName('campo_prueba')
->setType('text')
->setLabel(
$this->translator->trans(
'Campo de Prueba', [], 'Shop.Forms.Labels'
)
)
;
CustomerFormatter.php

Fichero:

/classes/Customer.php

En la clase Customer, buscamos por ejemplo la siguiente declaración de variable:

public $id_guest;

 y añadimos debajo la nuestra:

public $campo_prueba;
Editando Customer.php

En el mismo fichero, buscamos la siguiente línea de código:

public static $definition = array(
'table' => 'customer',
'primary' => 'id_customer',
'fields' => array(
 Y dentro añadimos:
'campo_prueba' => array('type' => self::TYPE_STRING),
Editando Customer.php

Si hemos seguido todo el proceso y accedemos con nuestro cliente desde la tienda, y por ejemplo, vamos a nuestra cuenta e intentamos editar nuestros datos:

Datos personales cliente

Veremos que aparece el nuevo campo disponible:

Si intentamos escribir algún dato en el campo y lo guardamos, veremos que guarda sin ningún problema la información.

Editar ficheros para la incorporación del campo en el BackOffice (panel de administración)

Mostrar y editar el campo en la pestaña Clientes -> Clientes

Editar el campo en el panel de administración

Aunque lo ideal es hacer overrides de clases y controladores, como vamos a seguir la guía original vamos a editar directamente.

Controlador: controllers/admin/AdminCustomersController.php

Buscamos el siguiente código:

array(
'type' => 'text',
'prefix' => '<i class="icon-envelope-o"></i>',
'label' => $this->trans('Email address', array(), 'Admin.Global'),
'name' => 'email',
'col' => '4',
'required' => true,
'autocomplete' => false
),

y justo encima añadimos:

array(
'type' => 'text',
'label' => $this->trans('Campo de Prueba', array(), 'Admin.Global'),
'name' => 'campo_prueba',
'col' => '4',
),

AdminCustomersController.php
AdminCustomersController.php
Si  intentamos editar un cliente desde el panel de administración, veremos que tenemos disponible el campo para editarlo desde el mismo panel.
Ficha edición cliente del panel en Prestashop

Visualizar campo en el panel de administración

Vuelvo a recordar, que lo ideal es siempre hacer un override de los ficheros, depende editar el original, pero como estamos siguiendo la guía original editamos el original.

Para ver el campo en la ficha del cliente en el panel de administración, editamos el fichero:

/carpeta_administración/themes/default/template/controllers/customers/helpers/view/view.tpl

Buscamos el siguiente código:

<div class="row">
<label class="control-label col-lg-3">{l s='Age' d='Admin.Orderscustomers.Feature'}</label>
<div class="col-lg-9">
<p class="form-control-static">
{if isset($customer->birthday) && $customer->birthday != '0000-00-00'}
{l s='%1$d years old (birth date: %2$s)' sprintf=[$customer_stats['age'], $customer_birthday] d='Admin.Orderscustomers.Feature'}
{else}
{l s='Unknown' d='Admin.Orderscustomers.Feature'}
{/if}
</p>
</div>
</div>

Y justo encima añadimos:

<div class="row">
<label class="control-label col-lg-3">{l s='Campo de prueba'}</label>
<div class="col-lg-9">
<p class="form-control-static">
{if isset($customer->campo_prueba)}
{$customer->campo_prueba}
{else}
{l s='Unknown'}
{/if}
</p>
</div>
</div></div>

Helper view customer

Si vamos a ver la ficha del cliente desde el panel de administración, veremos que ahora se muestra el campo.

Helpers view Customer

Añadir campo en el listado de clientes del panel de administración

Como vuelvo a repetir, recordar que editar los ficheros originales no es lo optimo, lo ideal es hacer override, pero como en la guía original editan los ficheros originales, la traducción es igual.

Editamos el fichero:

/controllers/admin/AdminCustomersController.php

Buscamos el siguiente código:

'email' => array(
'title' => $this->trans('Email address', array(), 'Admin.Global')
),
AdminCustomersController.php

Y justo encima añadimos:

'campo_prueba' => array(
'title' => $this->trans('Campo de Prueba', array(), 'Admin.Global')
),
AdminCustomersController.php
Por último, en el mismo fichero, buscamos
as connect

y justo después añadimos:

, campo_prueba
Campo prueba

Finalmente, veremos que en el listado de clientes, podemos ver el campo en cuestión

Listado Clientes