En esta guía, explicaremos como agregar un nuevo campo al formulario de contacto en Prestashop 1.5.

Digo solo «un nuevo campo«, porque el mismo ejemplo, servirá para añadir más campos al formulario de contacto, en caso de que tengamos esa necesidad.
Vamos a seguir los siguientes pasos:
Ir al siguiente fichero:
/themes/tu-plantilla/contact-form.tpl (Este fichero, corresponde a la plantilla de impresión del formulario de contacto)
Y por ejemplo, buscamos esto:
[sourcecode language=»text»]
[/sourcecode]
Y debajo, por ejemplo, añadimos el siguiente código:
[sourcecode language=»text»]
[/sourcecode]
Hemos añadido un nuevo campo de «texto» (input type=»text» …) donde en el atributo «name» de dicho campo, hemos asignado el valor «nuevocampo» (input type=»text» name=»nuevocampo» … ).
Es importante recordar que con el valor del atributo «name», obtendremos el valor que haya rellenado el usuario en dicho campo.
Dentro de la etiqueta «label», indicamos el nombre del campo, que luego vera el cliente en el formulario de contacto.

Después, vamos al fichero:
/controllers/front/ContactController.php
Y debajo del siguiente código:
[sourcecode language=»php»]
if (Tools::isSubmit(‘submitMessage’)) {
[/sourcecode]
Añadimos el siguiente código:
[sourcecode language=»php»]
$nuevocampo = Tools::getValue(‘nuevocampo’);
[/sourcecode]
Comentar a modo de información, para el lector del blog que con:
[sourcecode language=»php»]
Tools::getValue(‘nuevocampo’);
[/sourcecode]
Obtenemos el valor del campo que tiene asignado en el atributo «name» el valor «nuevocampo», el valor que obtenemos luego lo almacenamos en la variable «$nuevocampo«.
En el mismo fichero, buscamos esto:
[sourcecode language=»php»]
$var_list = array(
‘{order_name}’ => ‘-‘,
‘{attached_file}’ => ‘-‘,
‘{message}’ => Tools::nl2br(stripslashes($message)),
‘{email}’ => $from,
);
[/sourcecode]
Y lo dejamos así:
[sourcecode language=»php»]
$var_list = array(
‘{order_name}’ => ‘-‘,
‘{attached_file}’ => ‘-‘,
‘{message}’ => Tools::nl2br(stripslashes($message)),
‘{email}’ => $from,
‘{nuevocampo}’ => Tools::nl2br(stripslashes($nuevocampo)),
);
[/sourcecode]
De esta manera, podemos llamar a la variable «nuevocampo» en los «emails».
Luego, en el mismo fichero, buscamos la siguiente parte del código:
[sourcecode language=»php»]
$this->context->smarty->assign(array(
‘contacts’ => Contact::getContacts($this->context->language->id),
‘message’ => html_entity_decode(Tools::getValue(‘message’))
));
[/sourcecode]
Y lo dejamos así:
[sourcecode language=»php»]
$this->context->smarty->assign(array(
‘contacts’ => Contact::getContacts($this->context->language->id),
‘message’ => html_entity_decode(Tools::getValue(‘message’)),
‘nuevocampo’ => html_entity_decode(Tools::getValue(‘nuevocampo’))
));
[/sourcecode]
Con esto, enviamos el valor al formulario de contacto, para en caso de que enviemos el formulario y no se complete por algún requerimiento o fallo al rellenar los datos el formulario de contacto, no perdamos el valor en pantalla del nuevo campo que hemos agregado.
En el siguiente paso, vamos a indicar que el valor del nuevo campo se imprima en el email que recibe el usuario, para eso vamos al fichero:
/mails/es/contact-form.html
/themes/tu-plantilla/mails/es/contact-form.html
(También, deberíamos editar el fichero contact-form.txt, pero en este caso solo comentaremos el «.html»)
Y buscamos esto:
[sourcecode language=»html»]
Mensaje: {message}
Referencia del pedido: {order_name}
Archivo: {attached_file}
[/sourcecode]
Y debajo añadimos esto:
[sourcecode language=»html»]
[/sourcecode]
Los ficheros contact-form.html y contact-form.txt corresponden al email de confirmación, que recibe el usuario, una vez enviado el formulario de contacto.
Ahora, vamos a editar el fichero:
/mails/es/contact.html
/themes/tu-plantilla/mails/es/contact.html
(También, deberíamos editar el fichero contact.txt, pero en este caso solo comentaremos el «.html»)
Donde buscaremos el siguiente código:
[sourcecode language=»html»]
Mensaje: {message}
[/sourcecode]
Y debajo añadimos esto:
[sourcecode language=»html»]
[/sourcecode]
Los ficheros contact.html y contact.txt, hacen referencia al email que recibes tú o el contacto establecido en la pestaña «Clientes -> Contacto», una vez que el usuario ha enviado el formulario de contacto.
En otro capítulo, explicaremos como visualizar el valor del nuevo campo en el panel de administración, ya que en este ejemplo el valor del nuevo campo solo se refleja en el email.
Esta prueba, ha sido realizada bajo Prestashop 1.5.4.1.

Victor,
excelente post. Espero que te animes pronto a contarnos como se puede mostrar el campo en el backoffice, sería de enorme ayuda.
Gracias por todo,