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.