Como añadir campos al formulario de contacto en PrestaShop
Continuando con la saga de posts sobre PrestaShop, hoy escribo sobre un tema que más de una vez he tenido que aplicar para los clientes de mantenimiento de PrestaShop, que no es más que añadir nuevos campos al formulario de contacto.
Para agregar nuevos campos a los formularios de contacto (contact form) de PrestaShop, tendremos que realizar las siguientes modificaciones:
- El archivo de plantilla contact-form.tpl, ubicado en la carpeta de temas.
- La base de datos, para agregar el nuevo campo.
- La clase CustomerThread.php, para recuperar nuevos datos del formulario.
Tutorial de cómo añadir nuevos campos al formulario de contacto de PrestaShop
Paso 1.- Edición formulario de contacto
Comencemos editando el formulario de contacto. Accede a la carpeta de tu tema y abre contact-form.tpl. No hay un lugar obligatorio para agregar el nuevo campo (siempre que esté dentro del formulario), así que escoge el lugar donde quieras añadir el campo y copia el siguiente fragmento de código. En nuestro caso queríamos añadir un nuevo campo que fuera teléfono, tan sólo tendríamos que añadir el siguiente código:
<p class=»form-group»>
<label for=»phone»>{l s=’Telefono’}</label>
{if isset($customerThread.phone)}
<input class=»form-control» type=»text» id=»phone» name=»phone»
value=»{$customerThread.phone|escape:’htmlall’:’UTF-8′}» readonly=»readonly» />
{else}
<input class=»form-control» type=»text» id=»phone» name=»phone» value=»» />
{/if}
</p>
Guardamos el fichero tpl del formulario de contacto y lo subimos al servidor, ya podemos observar el nuevo campo de nuestro formulario, en este caso como hemos dicho, una entrada de texto input, pero se puede añadir cualquier otro tipo campo (select, radiobutton, checkbox…).
Llegados a este punto, el formulario ya tiene el campo añadido, pero la base de datos no lo sabe. Por lo tanto, el siguiente paso es modificar la base de datos. Hay que modificar la tabla ps_customer_thread añadiendo una nueva columna que almacenará el campo del formulario. En nuestro caso vamos a crear una columna de texto, pero esto dependerá del tipo de campo que se añada (pudiendo ser por ejemplo un campo de enteros si el campo es un radiobutton).
Paso 2.- Classes de CustomerThread
Ya tenemos el campo nuevo y la nueva columna en la base de datos, pero el CustomerThread no conoce el campo nuevo, por lo que debemos configurar un override para considerar el nuevo campo creado en el formulario.
Se creará un nuevo fichero llamado CustomerThread.php en override/classes/ y se añadirá el siguiente fragmento de código:
‘phone’ => array(‘type’ => self::TYPE_STRING, ‘validate’ => ‘isGenericName’)
Donde se puede observar el campo phone, creado anteriormente en el formulario de contacto y en la base de datos.
Lo que se ha hecho, es una redefinición simple de los campos que aceptan estos objetos. Primero, se ha declarado nuestro nuevo campo (phone) como una variable pública, y luego lo agregamos a la lista de definiciones. Lo configuramos como un tipo de cadena y una validación genérica simple.
En este punto, también tenemos que modificar el controlador que es responsable de agregar dichos datos y enviar los correos electrónicos. Podemos hacer lo mismo y usar un override.
Vaya a override/controllers/front/ y creamos un nuevo archivo llamado ContactController.php, abra el archivo original con el mismo nombre, ubicado en los /controllers/front, copiamos todo el contenido y lo pegamos dentro del archivo recién creado.
Identificamos el siguiente fragmento de código y añadimos las líneas que aparecen resaltadas referentes al nuevo campo creado:
$ct->phone = Tools::getValue(‘phone’);
Como podemos ver, agregamos $ ct-> phone = Tools :: getValue (‘phone’); en ambos casos, justo antes de insertar o actualizar las entradas. Para observar como se reflejan los cambios en la base de datos se tiene que borrar la cache en PrestSshop.
Paso 3.- Controller del formulario
Identifica el siguiente fragmento de código en el mismo fichero ContactController y añadimos la línea resaltada:
if (!count($this->errors)) {
$var_list = array(
‘{order_name}’ => ‘-‘,
‘{attached_file}’ => ‘-‘,
‘{message}’ => Tools::nl2br(stripslashes($message)),
‘{email}’ => $from,
‘{product_name}’ => »,
‘{phone}’ => (isset($ct) && $ct->phone) ? $ct->phone : »,
);
El último paso, es añadir el campo en el correo electrónico que se envía con el formulario. Para ello se modificarán los ficheros contact y contact_form de la carpeta mails:
<span style=»color:#333″><strong>Mensaje:</strong></span> {message}<br /><br />
<span style=»color:#333″><strong>Phone:</strong></span> {phone}<br /><br />
<span style=»color:#333″><strong>ID del pedido:</strong></span> {order_name}<br />
Tras la realización de todos estos pasos, tendremos un nuevo campo añadido en el formulario de PrestaShop que se actualiza en la base de datos y llegará en el email que se envía al cliente y al administrador de la tienda online.
Si te ha sido útil este post y quieres que continue con estos posts de PrestaShop, valora con las estrellas y deja un comentario sobre qué quieres escriba 😀