Contenido
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):
[sourcecode language=»text»]
ALTER TABLE ps_customer ADD COLUMN campo_prueba VARCHAR(250);
[/sourcecode]
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).

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:
[sourcecode language=»php»]
$format[‘email’] = (new FormField)
[/sourcecode]
Y justo encima añadimos el siguiente código:
[sourcecode language=»php»]
$format[‘campo_prueba’] = (new FormField)
->setName(‘campo_prueba’)
->setType(‘text’)
->setLabel(
$this->translator->trans(
‘Campo de Prueba’, [], ‘Shop.Forms.Labels’
)
)
;
[/sourcecode]

Fichero:
/classes/Customer.php
En la clase Customer, buscamos por ejemplo la siguiente declaración de variable:
[sourcecode language=»php»]
public $id_guest;
[/sourcecode]
y añadimos debajo la nuestra:
[sourcecode language=»php»]
public $campo_prueba;
[/sourcecode]

En el mismo fichero, buscamos la siguiente línea de código:
[sourcecode language=»php»]
public static $definition = array(
‘table’ => ‘customer’,
‘primary’ => ‘id_customer’,
‘fields’ => array(
[/sourcecode]
[sourcecode language=»php»]
‘campo_prueba’ => array(‘type’ => self::TYPE_STRING),
[/sourcecode]

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:
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:
[sourcecode language=»php»]
array(
‘type’ => ‘text’,
‘prefix’ => ‘‘,
‘label’ => $this->trans(‘Email address’, array(), ‘Admin.Global’),
‘name’ => ‘email’,
‘col’ => ‘4’,
‘required’ => true,
‘autocomplete’ => false
),
[/sourcecode]
y justo encima añadimos:
array(
‘type’ => ‘text’,
‘label’ => $this->trans(‘Campo de Prueba’, array(), ‘Admin.Global’),
‘name’ => ‘campo_prueba’,
‘col’ => ‘4’,
),
[/sourcecode]

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:
[sourcecode language=»text»]
{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}
[/sourcecode]
[sourcecode language=»text»]
{if isset($customer->campo_prueba)}
{$customer->campo_prueba}
{else}
{l s=’Unknown’}
{/if}
[/sourcecode]









