Hola,
A continuación queremos mostraros una pequeña guía para añadir un campo nuevo al formulario de registro de Prestashop, es válido para las versiones 1.5 y 1.6
Es posible que al no utilizar el mismo tema algunas cosas varien respecto a tu instalación, pero creo que con un poco de atención se puede solventar.
Antes de modificar cualquier archivo es conveniente hacer una copia del mismo:
1.- Añadimos el campo al tema, en función de si el método es en 5 pasos o en 1 debemos modificar themes/NOMBRE_DEL_TEMA/authentication.tpl o themes/NOMBRE_DEL_TEMA/order-opc-new-account.tpl
Debemos añadir estas líneas en el lugar que consideremos necesario en nuestro template:
<label for="nuevo_campo">{l s='Nuevo Campo'}</label> <input class="text" id="nuevo_campo" type="text" name="nuevo_campo" />
2.- Ahora debemos añadir las siguientes líneas de código al archivo controllers/front/AuthController.php
2.1- Sobre la línea 378
// Preparing customer $customer = new Customer(); $lastnameAddress = Tools::getValue('lastname'); $firstnameAddress = Tools::getValue('firstname');
Debajo debemos añadir la línea
$nuevo_campo= Tools::getValue('nuevo_campo');
2.2- Sobre la línea 423
$customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.');
Debajo debemos añadir
$customer->nuevo_campo = $nuevo_campo;
2.3- Sobre la línea 532
$customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth');
Debajo debemos añadir
$customer->nuevo_campo = $nuevo_campo;
2.4- Sobre la línea 676
$this->context->customer = $customer; $this->context->smarty->assign('confirmation', 1); $this->context->cookie->id_customer = (int)$customer->id;
Debajo debemos añadir
$this->context->cookie->customer_nuevo_campo = $customer->nuevo_campo;
3.- En el archivo debemos añadir las siguientes líneas de código classes/Customer.php
3.1- Sobre la linea 30
public $id;
Debajo debemos añadir
/** @ var string Referralcode */ public $nuevo_campo;
3.2- Sobre la línea 160
public static $definition = array( ... 'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32),
Debajo debemos añadir
'nuevo_campo' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
4.- Para que el campo aparezca en el backoffice debemos modificar este archivo controllers/admin/AdminCustomersController.php
4.1- Sobre la linea 152
'connect' => array( 'title' => $this->l('Last visit'), 'width' => 100, 'type' => 'datetime', 'search' => false, 'havingFilter' => true ) );
Debajo sustituirlo por:
'connect' => array( 'title' => $this->l('Last visit'), 'width' => 100, 'type' => 'datetime', 'search' => false, 'havingFilter' => true ), 'nuevo_campo' => array( 'title' => $this->l('Nuevo Campo'), 'width' => 'auto', 'search' => true ) );
5.- Por último debemos crear el campo en la base de datos, para esto debemos acceder a PHPMyAdmin y ejecutar esta consulta SQL:
ALTER TABLE `ps_customer` ADD `nuevo_campo` VARCHAR( 25 )
Con esto ya debe funcionar todo correctamente.
Hola, se que paso bastante tiempo desde que se creo el post pero: primero felicitar porque me funciono de maravillas... pero ahora bien tengo un problema como hacer que aparezca el campo nuevo (donde modificar) y que el usuario desde su cuenta o el administrador desde el panel de administración puedan editar este campo nuevo... solo puedo hacer que se visualice nomas... ante todo muchas gracias!!
Aunque la pregunta es de hace mucho tiempo dejo la respuesta por si a alguien le puede venir bien:
- Añadir un campo en información personal (front office, para el cliente):
en identity.tpl (C:\xampp\htdocs\proyecto\themes\tema)
añadir en la línea 87 aprox.:
{l s='campo'}
----------------------------------------------------
- Añadir el campo en back office en cliente (back office, para el administrador):
en AdminCustomersController.php
añadir en la línea 390 aprox:
array(
'type' => 'text',
'label' => $this->l('campo'),
'name' => 'campo',
'required' => true,
'col' => '4',
'hint' => $this->l('Invalid characters:').' 0-9!<>,;?=+()@#"°{}_$%:'
),
Aunque la pregunta es de hace mucho tiempo dejo la respuesta por si a alguien le puede venir bien:
– Añadir un campo en información personal (front office, para el cliente):
en identity.tpl (C:\xampp\htdocs\proyecto\themes\tema)
añadir en la línea 87 aprox.:
{l s='campo'}
—————————————————-
– Añadir el campo en back office en cliente (back office, para el administrador):
en AdminCustomersController.php
añadir en la línea 390 aprox:
array(
‘type’ => ‘text’,
‘label’ => $this->l(‘campo’),
‘name’ => ‘campo’,
‘required’ => true,
‘col’ => ‘4’,
‘hint’ => $this->l(‘Invalid characters:’).’ 0-9!,;?=+()@#”°{}_$%:’
),
Hola Guillermo,
Para poder modificar el campo desde el usuario hay que hacer una modificación de Prestashop mucho mayor.
Es un proceso más largo y complicado...
Un Saludo.
Buenos días:
Este tema que presentan me interesa especialmente pero con una pequeña modificación.
Estoy haciendo una tienda online para un comercio B2B y quiero que el formulario de registro envíe un e-mail con los datos de registro + el teléfono de contacto, para que luego desde la administración de la tienda podamos ponernos en contacto con el cliente y darle de alta en el sistema.
El tema es que ya he conseguido mandar un correo al administrador de mi tienda con el nombre, apellidos, e-mail y contraseña del usuario registrado, pero me faltaría incorporar ahí el teléfono, como campo adicional del formulario y posteriormente como un campo de la plantilla del e-mail (no necesito que el dato se almacene en la base de datos ni sea visible en el backoffice a priori).
Muchas gracias por todo.
Un saludo