# Kreator formularzy dla PrestaShop 8 i 9: dokumentacja

> DataFirefly Form Builder dodaje do PrestaShop 8 i 9 kreator formularzy typu przeciągnij i upuść. Każdy formularz wyświetla się w pozycjach motywu, na stronie CMS, w oknie popup lub na…

- Strona: <https://www.datafirefly.com/pl/documentation/prestashop-form-builder/>
- Język: pl
- Zaktualizowano: 2026-09-30
- Inne języki: [fr](https://www.datafirefly.com/documentation/prestashop-form-builder/index.md), [en](https://www.datafirefly.com/en/documentation/prestashop-form-builder/index.md), [es](https://www.datafirefly.com/es/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), [nl](https://www.datafirefly.com/nl/documentation/prestashop-form-builder/index.md), [pt](https://www.datafirefly.com/pt/documentation/prestashop-form-builder/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

DataFirefly Form Builder dodaje do PrestaShop 8 i 9 kreator formularzy typu przeciągnij i upuść. Każdy formularz wyświetla się w pozycjach motywu, na stronie CMS, w oknie popup lub na własnej stronie. Zgłoszenia są zapisywane w panelu, wysyłane e-mailem i można je eksportować do CSV.

## Instalacja

1. W **Moduły > Menedżer modułów** kliknij **Załaduj moduł** i upuść plik `dfformbuilder.zip`.
2. W menu **Obsługa klienta** pojawiają się dwie pozycje: **Formularze** i **Zgłoszenia z formularzy**.
3. Przycisk **Konfiguruj** modułu otwiera ustawienia ogólne (opis poniżej) i pokazuje liczbę formularzy oraz nieprzeczytanych zgłoszeń.

Wymagania: PrestaShop od 8.0.0 do 9.x, PHP 7.2 lub nowszy. Pliki wysyłane przez odwiedzających trafiają do `/upload/dfformbuilder/`, który musi mieć prawa zapisu. Moduł nie używa żadnego override.

Aktualizacja: zainstaluj nowy plik ZIP na starym. Formularze i zgłoszenia zostają zachowane, a skrypty aktualizacji dodają nowe tabele.

## Tworzenie formularza

W **Obsługa klienta > Formularze** kliknij **Nowy formularz** i wybierz punkt wyjścia:

- **Formularz kontaktowy**: imię i nazwisko, e-mail, temat i wiadomość. Pole Numer zamówienia pojawia się tylko, gdy temat dotyczy zamówienia.
- **Zapytanie o wycenę**: osoba prywatna lub firma (pola Firma i NIP pojawiają się tylko dla firmy), ilość, budżet, termin, załączniki. Na karcie produktu nazwa produktu wpisuje się sama.
- **Aplikacja o pracę**: trzy etapy (dane kontaktowe, stanowisko, dokumenty), obowiązkowe CV dołączane do e-maila.
- **Pusty formularz**.

Lista formularzy oferuje też **Duplikuj**, **Eksportuj** (plik JSON), a na pasku narzędzi **Importuj**. Zaimportowany formularz jest tworzony jako wyłączony i bez pozycji wyświetlania.

## Kreator

Górny pasek zawiera wewnętrzną nazwę formularza, pole **Włączony**, **język edycji**, przyciski Cofnij i Ponów, **Podgląd** i **Zapisz**. Poniżej są cztery zakładki: Pola, Ustawienia, E-maile, Wyświetlanie i integracja.

### Zakładka Pola

- **Lewa kolumna**: typy pól. Kliknięcie dodaje pole pod zaznaczonym, przeciągnięcie umieszcza je w wybranym miejscu.
- **Środek**: formularz tak, jak będzie wyświetlany, z prawdziwymi szerokościami. Pola przenosi się przeciągając je lub strzałkami na każdej karcie, można je też duplikować i usuwać.
- **Prawa kolumna**: ustawienia zaznaczonego pola.

Skróty: Enter zaznacza pole, Alt + strzałki je przenosi, Delete usuwa, Ctrl+Z cofa, Ctrl+Y ponawia, Ctrl+S zapisuje. Przeglądarka ostrzega, gdy opuszczasz stronę z niezapisanymi zmianami.

### Języki

Wszystkie teksty (etykiety, pomoc, opcje, komunikaty, e-maile, URL) wpisuje się w języku wybranym u góry. Pusty tekst przejmuje tekst domyślnego języka sklepu, pokazany na szaro w polu. Przed publikacją sprawdź każdy język.

### Klucz pola

Każde pole do wypełnienia ma klucz techniczny tworzony z etykiety (na przykład `email`, `order_reference`). To nazwa kolumny w eksporcie CSV i zmienna w e-mailach: `{email}`. Musi być unikalny w formularzu.

## Typy pól

- **Tekst, E-mail, Telefon, Strona WWW**: tekst podpowiedzi, maksymalna długość, wypełnianie. Adres wpisany bez `https://` jest automatycznie uzupełniany.
- **Liczba**: minimum, maksimum i krok.
- **Długi tekst**: wysokość w wierszach, maksymalna długość z licznikiem znaków dla odwiedzającego.
- **Data**: najwcześniejsza i najpóźniejsza data w formacie RRRR-MM-DD lub słowo `today`.
- **Lista rozwijana, Przyciski opcji, Pola wyboru**: opcje z etykietą w każdym języku i wartością. Wartość jest zapisywana i używana przez logikę; pusta przejmuje etykietę. Link **Dodaj kilka opcji naraz** przyjmuje jedną opcję na linię, w razie potrzeby w formacie `etykieta|wartość`.
- **Zgoda**: pole wyboru z tekstem, w którym można umieścić linki (polityka prywatności).
- **Ocena w gwiazdkach**: od 3 do 10 gwiazdek, zapisywana jako 4/5.
- **Przesyłanie plików**: dozwolone rozszerzenia, maksymalny rozmiar pliku (ograniczony ustawieniem globalnym), kilka plików do 10.
- **Pole ukryte**: stała lub wypełniona wartość, niewidoczna dla odwiedzającego.
- **Nagłówek, Blok tekstu, Separator**: tylko układ, nic nie jest zapisywane.
- **Nowy etap**: dzieli formularz na etapy (opis poniżej).

Każde pole ma **szerokość**: pełna, dwie trzecie, połowa lub jedna trzecia. Węższe pola stoją obok siebie na dużych ekranach i jedno pod drugim na telefonie.

### Wypełnianie

Pola Tekst, E-mail, Telefon i Ukryte mogą być wypełniane e-mailem, imieniem, nazwiskiem, pełnym imieniem i nazwiskiem lub firmą zalogowanego klienta, nazwą lub indeksem produktu (na karcie produktu), adresem strony albo **parametrem URL**. Przykład: pole ukryte wypełniane parametrem `utm_source` i link do `/kontakt?utm_source=newsletter` zapisują `newsletter` razem ze zgłoszeniem.

### Adres odpowiedzi

Zaznacz **Użyj jako adresu odpowiedzi** przy polu E-mail: odpowiedź na e-mail z powiadomieniem trafi prosto do odwiedzającego.

## Logika warunkowa

W panelu pola zaznacz **Pokaż lub ukryj to pole zależnie od innych odpowiedzi** i wybierz:

- Pokaż lub Ukryj to pole;
- gdy spełnione są wszystkie lub co najmniej jeden z warunków;
- każdy warunek: pole, operator (jest, nie jest, zawiera, nie zawiera, jest puste, jest wypełnione, jest większe niż, jest mniejsze niż) i wartość.

Dla listy, przycisków opcji lub pól wyboru wartość wybiera się spośród opcji. Ukryte pole nie jest sprawdzane, zapisywane ani wysyłane. Ta sama logika jest ponownie liczona na serwerze przy wysyłce.

## Formularze wieloetapowe

Dodaj element **Nowy etap** (grupa Układ) tam, gdzie ma zaczynać się etap, i nadaj mu tytuł. Pola przed pierwszym znacznikiem tworzą pierwszy etap. Dla odwiedzającego:

- wyświetlane są pasek postępu i tytuły etapów (można to wyłączyć w Ustawienia > Formularz wieloetapowy);
- przyciski Dalej i Wstecz mają tekst ustawiany dla każdego języka;
- każdy etap jest sprawdzany przed przejściem dalej;
- etap, którego wszystkie pola ukryła logika, jest pomijany.

## Zakładka Ustawienia

- **Tytuł i wstęp**: tytuł widoczny dla odwiedzających i tekst wstępu.
- **Wysyłka**: tekst przycisku, komunikat potwierdzenia albo przekierowanie na adres URL po wysłaniu.
- **Dostęp**: formularz tylko dla zalogowanych klientów (pozostali widzą link do logowania), klasa CSS.
- **Dostępność i limity**: data otwarcia i zamknięcia (strefa czasowa sklepu), maksymalna liczba zgłoszeń, jedno zgłoszenie na osobę (sprawdzane po koncie klienta i wpisanym e-mailu), komunikat o zamknięciu.
- **Szkic**: przechowuje odpowiedzi przez 30 dni w przeglądarce odwiedzającego aż do wysłania. Przed wysłaniem nic nie trafia do sklepu, a pliki nie są zapisywane.

## Zakładka E-maile

### Powiadomienie dla sklepu

Wysyłane w domyślnym języku sklepu. Odbiorcy oddzieleni przecinkami; gdy pole jest puste, używani są domyślni odbiorcy z konfiguracji modułu, a potem e-mail sklepu. Temat przyjmuje zmienne `{form_name}` i `{klucz_pola}`, które kopiuje się kliknięciem. Opcja **Dołącz przesłane pliki** dodaje pliki do łącznie 15 MB.

### Odbiorcy warunkowi

Każda reguła łączy warunek z adresami: na przykład jeśli _Temat_ to _Wycena_, wysyłaj na `sprzedaz@twoj-sklep.pl`. Ustawienie **Gdy warunek jest spełniony** dodaje te adresy do odbiorców lub ich zastępuje.

### Potwierdzenie dla odwiedzającego

Wymaga pola E-mail w formularzu. E-mail wychodzi w języku, którego użył odwiedzający, z wybranym tematem i treścią (zmienne dozwolone) oraz opcjonalnie z podsumowaniem odpowiedzi.

### Webhook

Podaj adres URL (Zapier, Make, n8n, CRM), aby otrzymywać każde zgłoszenie jako JSON w żądaniu POST. Przykładowa treść:

```
{
  "event": "submission.created",
  "form": { "id": 3, "name": "Kontakt" },
  "submission": { "id": 128, "date": "2026-09-30T10:12:00+02:00", "language": "pl",
    "shop_id": 1, "customer_id": 0, "product_id": 0, "page_url": "https://..." },
  "fields": {
    "email": { "label": "E-mail", "type": "email", "value": "jan@przyklad.pl", "display": "jan@przyklad.pl" }
  }
}
```

Z **sekretem podpisu** nagłówek `X-DFFB-Signature` zawiera `sha256=` i HMAC-SHA256 treści. Weryfikacja w PHP:

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

Wywołanie czeka najwyżej 5 sekund. Wynik (dostarczono, odrzucono z kodem HTTP, brak odpowiedzi) widać na karcie każdego zgłoszenia.

## Zakładka Wyświetlanie i integracja

### Tryb wyświetlania

**Bezpośrednio na stronie** albo **za przyciskiem, w oknie popup**, z tekstem przycisku w każdym języku. Tryb dotyczy pozycji, shortcode'u i widgetu.

### Automatyczne pozycje

Zaznacz pozycje motywu: strona główna (`displayHome`), strona kontaktu (`displayContactContent`, `displayContactRightColumn`), karta produktu (`displayProductAdditionalInfo`, `displayFooterProduct`), blok zaufania (`displayReassurance`), koszyk (`displayShoppingCartFooter`), strony CMS (`displayCMSDisputeInformation`), kolumny (`displayLeftColumn`, `displayRightColumn`), nad stopką (`displayFooterBefore`), koniec treści (`displayWrapperBottom`). Pozycja nic nie pokazuje, jeśli motyw jej nie wywołuje.

### Osobna strona

Każdy formularz może mieć własną stronę, na przykład `/forms/3-zapytanie-o-wycene`, z przyjaznym adresem w każdym języku. Link **Podgląd** działa także przy wyłączonym formularzu; zgłoszenia są wtedy odrzucane, dopóki go nie włączysz.

### Kody integracji

- Shortcode dla strony CMS: `[dfform id=3]`
- Widget Smarty w szablonie: `{widget name='dfformbuilder' id_form=3}`
- Własny hook: `{hook h='displayDfForm' id_form=3}`

### Statystyki

Z 30 dni: wyświetlenia (formularz pokazany lub popup otwarty), rozpoczęcia (kliknięcie w pole), zgłoszenia, współczynnik konwersji i porzuceń. Odwiedzający bez JavaScript i większość botów nie są liczeni. Wyświetlenia i konwersja widać też na liście formularzy.

## Zarządzanie zgłoszeniami

**Obsługa klienta > Zgłoszenia z formularzy** pokazuje zgłoszenia z formularzem, podsumowaniem, statusem i datą, z filtrami. Akcje zbiorcze: oznacz jako przeczytane, załatwione, archiwizuj, eksportuj do CSV, usuń (pliki też są usuwane).

Otwarcie zgłoszenia zmienia status na Przeczytane i pokazuje:

- wszystkie odpowiedzi i pliki do pobrania;
- status i notatkę wewnętrzną;
- klienta (jeśli był zalogowany), produkt, stronę wysyłki, język, adres IP, wynik e-maila i webhooka;
- przyciski Drukuj, Odpowiedz e-mailem, poprzednie i następne zgłoszenie.

### Odpowiedź do odwiedzającego

Panel **Odpowiedz odwiedzającemu** wysyła wiadomość na adres z pola E-mail (w pierwszej kolejności oznaczonego jako adres odpowiedzi), w języku odwiedzającego i w szablonie e-mail sklepu. Odpowiedź zostaje w historii, a zgłoszenie może od razu otrzymać status Załatwione.

### Eksport CSV

Panel pod listą eksportuje według formularza, statusu i okresu. Po wybraniu formularza każde pole ma własną kolumnę. Plik jest w UTF-8 ze średnikiem jako separatorem i otwiera się bezpośrednio w Excelu, LibreOffice i Arkuszach Google.

## Ustawienia ogólne modułu

- **Domyślni odbiorcy**: używani, gdy formularz nie ma własnych odbiorców.
- **Maksymalny rozmiar pliku** (domyślnie 10 MB): globalny limit na plik. Nie może przekroczyć `upload_max_filesize` i `post_max_size` w PHP.
- **Przechowuj zgłoszenia przez** (dni): po tym czasie zgłoszenia i pliki są usuwane automatycznie. 0 przechowuje je bez limitu.
- **Zapisuj adres IP**: po wyłączeniu zapisywany jest tylko hash używany do limitu zgłoszeń.
- **Minimalny czas wypełniania** (3 sekundy) i **zgłoszenia na godzinę na odwiedzającego** (10): ochrona przed botami.
- **reCAPTCHA v3**: klucz witryny, klucz tajny i minimalny wynik (zalecane 0,5). Skrypt Google ładuje się dopiero, gdy odwiedzający zaczyna wypełniać formularz.

## Bezpieczeństwo i RODO

- Każdy formularz zawiera niewidoczne pole-pułapkę i podpis ze znacznikiem czasu; zbyt szybkie lub zbyt częste zgłoszenia są odrzucane.
- Skrypty, strony HTML i pliki wykonywalne są zawsze odrzucane, a zawartość plików jest sprawdzana. Pliki dostają losowe nazwy w chronionym folderze i można je pobrać tylko z panelu.
- Z oficjalnym modułem **psgdpr** zgłoszenia klienta (konto lub wpisany e-mail) trafiają do eksportu jego danych i są usuwane razem z kontem.

## Tłumaczenia

Interfejs modułu jest dostępny po francusku i angielsku; pozostałe języki panelu wyświetlają go po angielsku. Szablony e-maili modułu są dostępne po angielsku, francusku, niemiecku, hiszpańsku, włosku, niderlandzku, polsku i portugalsku. Teksty samych formularzy wpisuje się we wszystkich językach sklepu.

## Rozwiązywanie problemów

### Formularz się nie wyświetla

Sprawdź, czy formularz jest włączony, czy motyw wywołuje wybraną pozycję i czy daty otwarcia go nie zamykają. W razie wątpliwości przetestuj shortcode na stronie CMS lub osobną stronę formularza.

### E-maile nie docierają

Karta zgłoszenia pokazuje, czy powiadomienie zostało wysłane. Sprawdź **Zaawansowane > E-mail** i wyślij e-mail testowy z PrestaShop.

### Plik jest odrzucany

Sprawdź dozwolone rozszerzenia pola, maksymalny rozmiar pola i modułu oraz limity PHP `upload_max_filesize` i `post_max_size`.

### Ochrona antyspamowa blokuje formularz

Strona otwarta od kilku tygodni ma wygasły podpis: odwiedzający musi odświeżyć stronę. Jeśli używasz reCAPTCHA, sprawdź, czy domena jest dodana w konsoli Google, i obniż minimalny wynik, jeśli blokowani są prawdziwi klienci.
