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.tplthemes/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.