# Creador de formularios para PrestaShop 8 y 9: documentación

> DataFirefly Form Builder añade a PrestaShop 8 y 9 un creador de formularios de arrastrar y soltar. Cada formulario se muestra en las posiciones del tema, en una página CMS,…

- Página: <https://www.datafirefly.com/es/documentation/prestashop-form-builder/>
- Idioma: es
- Actualizado el: 2026-09-30
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/prestashop-form-builder/index.md), [en](https://www.datafirefly.com/en/documentation/prestashop-form-builder/index.md), [de](https://www.datafirefly.com/de/documentation/prestashop-form-builder/index.md), [it](https://www.datafirefly.com/it/documentation/prestashop-form-builder/index.md), [pl](https://www.datafirefly.com/pl/documentation/prestashop-form-builder/index.md), [nl](https://www.datafirefly.com/nl/documentation/prestashop-form-builder/index.md), [pt](https://www.datafirefly.com/pt/documentation/prestashop-form-builder/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

DataFirefly Form Builder añade a PrestaShop 8 y 9 un creador de formularios de arrastrar y soltar. Cada formulario se muestra en las posiciones del tema, en una página CMS, en una ventana emergente o en su propia página. Las respuestas se guardan en el back-office, se envían por email y se pueden exportar a CSV.

## Instalación

1. En **Módulos > Gestor de módulos**, haga clic en **Subir un módulo** y suelte el archivo `dfformbuilder.zip`.
2. Aparecen dos menús en **Servicio al cliente**: **Formularios** y **Respuestas de formularios**.
3. El botón **Configurar** del módulo abre los ajustes generales (ver más abajo) y muestra el número de formularios y de respuestas sin leer.

Requisitos: PrestaShop 8.0.0 a 9.x, PHP 7.2 o superior. Los archivos enviados por los visitantes se guardan en `/upload/dfformbuilder/`, que debe tener permisos de escritura. El módulo no usa ningún override.

Actualización: instale el nuevo ZIP sobre el anterior. Los formularios y las respuestas se conservan, y los scripts de actualización añaden las nuevas tablas.

## Crear un formulario

En **Servicio al cliente > Formularios**, haga clic en **Nuevo formulario** y elija un punto de partida:

- **Formulario de contacto**: nombre, email, asunto y mensaje. El campo Referencia del pedido solo aparece si el asunto trata de un pedido.
- **Solicitud de presupuesto**: particular o empresa (los campos Empresa y NIF solo aparecen para una empresa), cantidad, presupuesto, plazo, archivos adjuntos. En una ficha de producto, el nombre del producto se rellena solo.
- **Candidatura**: tres pasos (datos de contacto, puesto, documentos), CV obligatorio y adjunto al email.
- **Formulario vacío**.

La lista de formularios ofrece también **Duplicar**, **Exportar** (archivo JSON) y, en la barra de herramientas, **Importar**. Un formulario importado se crea desactivado y sin posiciones de visualización.

## El creador

La barra superior contiene el nombre interno del formulario, la casilla **Activado**, el **idioma de edición**, los botones Deshacer y Rehacer, **Vista previa** y **Guardar**. Debajo hay cuatro pestañas: Campos, Ajustes, Emails, Visualización e integración.

### Pestaña Campos

- **Columna izquierda**: los tipos de campo. Un clic añade el campo debajo del seleccionado, arrastrarlo lo coloca donde quiera.
- **Centro**: el formulario tal como se mostrará, con los anchos reales. Los campos se mueven arrastrando o con las flechas de cada tarjeta, y se pueden duplicar o eliminar.
- **Columna derecha**: los ajustes del campo seleccionado.

Atajos: Intro selecciona un campo, Alt + flechas lo mueve, Supr lo elimina, Ctrl+Z deshace, Ctrl+Y rehace, Ctrl+S guarda. El navegador avisa si sale de la página con cambios sin guardar.

### Idiomas

Todos los textos (etiquetas, ayudas, opciones, mensajes, emails, URL) se escriben en el idioma elegido arriba. Un texto vacío toma el del idioma por defecto de la tienda, que se muestra en gris en el campo. Revise cada idioma antes de publicar.

### Clave del campo

Cada campo de entrada tiene una clave técnica generada a partir de la etiqueta (por ejemplo `email`, `order_reference`). Es el nombre de la columna en la exportación CSV y una variable en los emails: `{email}`. Debe ser única en el formulario.

## Tipos de campo

- **Texto, Email, Teléfono, Sitio web**: texto de ejemplo, longitud máxima, precarga. Una dirección web escrita sin `https://` se completa automáticamente.
- **Número**: mínimo, máximo y paso.
- **Texto largo**: altura en líneas, longitud máxima con contador de caracteres para el visitante.
- **Fecha**: fecha más temprana y más tardía, en formato AAAA-MM-DD o con la palabra `today`.
- **Lista desplegable, Botones de opción, Casillas**: opciones con etiqueta por idioma y valor. El valor se guarda y lo usa la lógica; vacío, toma la etiqueta. El enlace **Añadir varias opciones a la vez** acepta una opción por línea, con el formato `etiqueta|valor` si hace falta.
- **Consentimiento**: una casilla con un texto que admite enlaces (política de privacidad).
- **Valoración con estrellas**: de 3 a 10 estrellas, guardada como 4/5.
- **Subida de archivos**: extensiones permitidas, tamaño máximo por archivo (limitado por el ajuste global), varios archivos hasta 10.
- **Campo oculto**: valor fijo o precargado, invisible para el visitante.
- **Título, Bloque de texto, Separador**: solo maquetación, no se guarda nada.
- **Nuevo paso**: divide el formulario en pasos (ver más abajo).

Cada campo tiene un **ancho**: completo, dos tercios, mitad o un tercio. Los campos más estrechos se colocan uno al lado de otro en pantallas grandes y se apilan en móvil.

### Precarga

Los campos Texto, Email, Teléfono y Oculto pueden rellenarse con el email, el nombre, los apellidos, el nombre completo o la empresa del cliente conectado, el nombre o la referencia del producto (en una ficha de producto), la URL de la página o un **parámetro de URL**. Ejemplo: un campo oculto precargado con el parámetro `utm_source` y un enlace a `/contacto?utm_source=newsletter` guardan `newsletter` con la respuesta.

### Dirección de respuesta

Marque **Usar como dirección de respuesta** en un campo Email: responder al email de notificación escribirá directamente al visitante.

## Lógica condicional

En el panel de un campo, marque **Mostrar u ocultar este campo según otras respuestas** y elija:

- Mostrar u Ocultar este campo;
- si se cumplen todas o al menos una de las condiciones;
- cada condición: un campo, un operador (es, no es, contiene, no contiene, está vacío, está rellenado, es mayor que, es menor que) y un valor.

Para una lista, botones de opción o casillas, el valor se elige entre las opciones. Un campo oculto no se valida, no se guarda y no se envía. La misma lógica se vuelve a calcular en el servidor al enviar.

## Formularios en varios pasos

Añada un elemento **Nuevo paso** (grupo Maquetación) donde deba empezar un paso y póngale un título. Los campos situados antes del primer marcador forman el primer paso. Para el visitante:

- se muestran una barra de progreso y los títulos de los pasos (se puede desactivar en Ajustes > Formulario en varios pasos);
- los botones Siguiente y Anterior tienen un texto configurable por idioma;
- cada paso se comprueba antes de continuar;
- un paso cuyos campos están todos ocultos por la lógica se salta.

## Pestaña Ajustes

- **Título e introducción**: título mostrado a los visitantes y texto de introducción.
- **Envío**: texto del botón, mensaje de confirmación o redirección a una URL tras el envío.
- **Acceso**: formulario reservado a clientes conectados (los demás ven un enlace a la página de inicio de sesión), clase CSS.
- **Disponibilidad y límites**: fecha de apertura y de cierre (zona horaria de la tienda), número máximo de respuestas, una sola respuesta por persona (comprobada en la cuenta de cliente y en el email escrito), mensaje de cierre.
- **Borrador**: guarda las respuestas 30 días en el navegador del visitante hasta el envío. No se transmite nada a la tienda antes del envío y los archivos no se conservan.

## Pestaña Emails

### Notificación a la tienda

Se envía en el idioma por defecto de la tienda. Destinatarios separados por comas; si el campo está vacío, se usan los destinatarios por defecto de la configuración del módulo y, después, el email de la tienda. El asunto admite las variables `{form_name}` y `{clave_del_campo}`, que se copian con un clic. La opción **Adjuntar los archivos enviados** añade los archivos hasta 15 MB en total.

### Destinatarios condicionales

Cada regla asocia una condición a direcciones: por ejemplo, si _Asunto_ es _Presupuesto_, enviar a `ventas@su-tienda.com`. El ajuste **Cuando se cumple una condición** añade estas direcciones a los destinatarios o los sustituye.

### Confirmación al visitante

Requiere un campo Email en el formulario. El email se envía en el idioma que usó el visitante, con el asunto y el mensaje que elija (se admiten variables) y, opcionalmente, un resumen de las respuestas.

### Webhook

Indique una URL (Zapier, Make, n8n, CRM) para recibir cada respuesta en JSON mediante una petición POST. Ejemplo de contenido:

```
{
  "event": "submission.created",
  "form": { "id": 3, "name": "Contacto" },
  "submission": { "id": 128, "date": "2026-09-30T10:12:00+02:00", "language": "es",
    "shop_id": 1, "customer_id": 0, "product_id": 0, "page_url": "https://..." },
  "fields": {
    "email": { "label": "Email", "type": "email", "value": "juan@ejemplo.es", "display": "juan@ejemplo.es" }
  }
}
```

Con un **secreto de firma**, la cabecera `X-DFFB-Signature` contiene `sha256=` seguido del HMAC-SHA256 del cuerpo. Comprobación en PHP:

```
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, 'SU_SECRETO');
$valid = hash_equals($expected, $_SERVER['HTTP_X_DFFB_SIGNATURE'] ?? '');
```

La llamada espera 5 segundos como máximo. Su resultado (entregado, rechazado con el código HTTP, sin respuesta) se muestra en la ficha de cada respuesta.

## Pestaña Visualización e integración

### Modo de visualización

**Directamente en la página** o **detrás de un botón, en una ventana emergente**, con el texto del botón por idioma. Este modo se aplica a las posiciones, al shortcode y al widget.

### Posiciones automáticas

Marque las posiciones del tema: inicio (`displayHome`), página de contacto (`displayContactContent`, `displayContactRightColumn`), ficha de producto (`displayProductAdditionalInfo`, `displayFooterProduct`), garantías (`displayReassurance`), carrito (`displayShoppingCartFooter`), páginas CMS (`displayCMSDisputeInformation`), columnas (`displayLeftColumn`, `displayRightColumn`), encima del pie de página (`displayFooterBefore`), final del contenido (`displayWrapperBottom`). Una posición no muestra nada si el tema no la llama.

### Página propia

Cada formulario puede tener su página, por ejemplo `/forms/3-solicitud-de-presupuesto`, con una URL amigable por idioma. El enlace **Vista previa** funciona incluso con el formulario desactivado; los envíos se rechazan hasta que se active.

### Códigos de integración

- Shortcode para página CMS: `[dfform id=3]`
- Widget Smarty en una plantilla: `{widget name='dfformbuilder' id_form=3}`
- Hook personalizado: `{hook h='displayDfForm' id_form=3}`

### Estadísticas

En 30 días: visitas (formulario mostrado o ventana abierta), inicios (clic en un campo), respuestas, tasas de conversión y de abandono. Los visitantes sin JavaScript y la mayoría de los robots no se cuentan. Las visitas y la tasa de conversión aparecen también en la lista de formularios.

## Gestionar las respuestas

**Servicio al cliente > Respuestas de formularios** lista las respuestas con el formulario, un resumen, el estado y la fecha, con filtros. Acciones en bloque: marcar como leído, tratado, archivar, exportar a CSV, eliminar (también se eliminan los archivos).

Abrir una respuesta la pasa a Leído y muestra:

- todas las respuestas y los archivos para descargar;
- el estado y una nota interna;
- el cliente (si estaba conectado), el producto, la página de envío, el idioma, la dirección IP, el resultado del email y del webhook;
- los botones Imprimir, Responder por email, respuesta anterior y siguiente.

### Responder al visitante

El panel **Responder al visitante** envía su mensaje a la dirección del campo Email (primero la marcada como dirección de respuesta), en el idioma que usó el visitante, con el diseño de email de la tienda. La respuesta queda en el historial y la respuesta puede pasar a Tratado al mismo tiempo.

### Exportación CSV

El panel bajo la lista exporta por formulario, estado y periodo. Elegir un formulario da una columna por campo. El archivo está en UTF-8 con punto y coma como separador y se abre directamente en Excel, LibreOffice y Google Sheets.

## Ajustes generales del módulo

- **Destinatarios por defecto**: se usan cuando un formulario no tiene destinatario propio.
- **Tamaño máximo de archivo** (10 MB por defecto): límite global por archivo. No puede superar `upload_max_filesize` y `post_max_size` de PHP.
- **Conservar las respuestas durante** (días): después, las respuestas y sus archivos se eliminan automáticamente. 0 las conserva sin límite.
- **Guardar la dirección IP**: si se desactiva, solo se guarda una versión con hash para el límite de envíos.
- **Tiempo mínimo de relleno** (3 segundos) y **envíos por hora y por visitante** (10): protecciones antirrobots.
- **reCAPTCHA v3**: clave del sitio, clave secreta y puntuación mínima (0,5 recomendado). El script de Google solo se carga cuando el visitante empieza a rellenar el formulario.

## Seguridad y RGPD

- Cada formulario incluye un campo trampa invisible y una firma con fecha; un envío demasiado rápido o por encima del límite se rechaza.
- Los scripts, las páginas HTML y los ejecutables se rechazan siempre y el contenido de los archivos se comprueba. Los archivos se renombran al azar en una carpeta protegida y solo se descargan desde el back-office.
- Con el módulo oficial **psgdpr**, las respuestas de un cliente (cuenta o email escrito) se incluyen en la exportación de sus datos y se eliminan con su cuenta.

## Traducciones

La interfaz del módulo está disponible en francés e inglés; los demás idiomas del back-office la muestran en inglés. Las plantillas de email del módulo existen en inglés, francés, alemán, español, italiano, neerlandés, polaco y portugués. Los textos de los propios formularios se escriben en todos los idiomas de la tienda.

## Solución de problemas

### El formulario no aparece

Compruebe que el formulario está activado, que el tema llama a la posición elegida y que las fechas de apertura no lo cierran. En caso de duda, pruebe el shortcode en una página CMS o la página propia.

### Los emails no llegan

La ficha de la respuesta indica si se envió la notificación. Revise **Parámetros avanzados > Email** y envíe un email de prueba desde PrestaShop.

### Se rechaza un archivo

Compruebe la extensión permitida en el campo, el tamaño máximo del campo y del módulo, y los límites de PHP `upload_max_filesize` y `post_max_size`.

### La protección antispam bloquea el formulario

Una página abierta durante varias semanas tiene una firma caducada: el visitante debe recargar la página. Si usa reCAPTCHA, compruebe que el dominio está declarado en la consola de Google y baje la puntuación mínima si se bloquea a clientes reales.
