Kreator formularzy dla PrestaShop 8 i 9: dokumentacja
Instalacja modułu, budowa formularza, logika, etapy, e-maile i webhook, a potem obsługa i eksport zgłoszeń.
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
- W Moduły > Menedżer modułów kliknij Załaduj moduł i upuść plik
dfformbuilder.zip. - W menu Obsługa klienta pojawiają się dwie pozycje: Formularze i Zgłoszenia z formularzy.
- 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_filesizeipost_max_sizew 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.