Better Contact Form: setup and help
Quick start
- Upload the module ZIP in Modules > Module Manager and open Configure.
- Edit Default Contact Form in Contact Form > Forms, including Form Title and Admin Email.
- Check Send Admin Email, Send Customer Confirmation and GDPR Checkbox on the form.
- Review the active fields in Fields, keeping an email-type field for confirmations.
- Configure Business Info, Location & Hours and Spam Protection.
- Enable Replace Core Contact Page if you want the normal contact URL to use this form.
- Submit a test after Min Submit Time and check Submissions plus both email destinations.
Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.
Setup manual
Install and prepare your first form
- Upload the Better Contact Form ZIP in Modules > Module Manager and open Configure.
- Open Contact Form > Forms and edit Default Contact Form.
- Review Form Title, Description, Admin Email, Success Message and GDPR Label in each language.
- Open Fields and check the installed name, email, phone, subject and message fields.
- Configure the contact page and email settings described below.
- Submit a test message. Confirm it appears in Submissions and check both notification mailboxes.
Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.
The module menu contains Dashboard, Forms, Fields, Submissions and Settings. Configure opens the configuration screen under Settings.
Configure the contact page
General
| Setting | Default | What it does |
|---|---|---|
| Replace Core Contact Page | No | Routes the normal contact URL, including language-specific contact rewrites, to the module page. Enable after testing your form. |
| Enable Schema.org Markup | Yes | Adds LocalBusiness data on the main module contact page and FAQPage data when FAQ content is present. |
Without replacement, you can open the module's display front controller through a PrestaShop-generated module link. Form-specific id_form pages are treated as noindex, follow variants by the module's own SEO handling. A central page SEO authority can control the final metadata.
Business Info
| Setting | Default | What you do |
|---|---|---|
| Show Business Info Cards | Yes | Display shop address, telephone and email cards from PrestaShop settings. |
| WhatsApp Number | Empty | Enter an international number with country code, for example +48511511286. Leave empty to omit it. |
| Show Social Links | Yes | Display stored social profile links. |
| Show FAQ Section | Yes | Display stored questions and answers. |
Social Links and FAQ Items are stored JSON values, not editable fields in the current configuration form. Social links default to an empty list. FAQ content defaults to three generic questions about response time, telephone support and visiting the office. Review that content before enabling the section for customers. It may not describe your business.
Location & Hours
| Setting | Default | What you do |
|---|---|---|
| Show Map | Yes | Enable the map block. Both coordinate values must also be nonempty. |
| Map Latitude | Empty | Enter the marker latitude. |
| Map Longitude | Empty | Enter the marker longitude. |
| Map Zoom Level | 15 | Adjust the OpenStreetMap zoom. The form suggests 1 to 18. |
| Show Opening Hours | Yes | Show the stored weekly timetable and the current open/closed calculation. |
| Timezone | PrestaShop PS_TIMEZONE |
Enter a valid PHP timezone identifier if your business hours use another timezone. It is not fixed to Europe/Warsaw. |
The stored opening_hours JSON defaults to Monday through Friday 09:00 to 17:00, with Saturday and Sunday closed. The current form has no timetable editor. A developer can update the stored structure with keys mon, tue, wed, thu, fri, sat, sun; each has open and close strings. Empty values mean closed. Verify the displayed timetable and timezone before publishing it.
Email and spam settings
| Setting | Default | Runtime use |
|---|---|---|
| Send Admin Notification | Yes | Global fallback when a form does not provide its own switch. |
| Admin Email Address | Shop email | Fallback recipient when Admin Email on the form is empty. Use commas for several addresses. |
| Send Customer Confirmation | Yes | Global fallback when a form does not provide its own switch. Requires a submitted customer email. |
The installed form has its own email switches. Change those in Forms when you want to stop mail for that form. The global switch is not a master override of populated per-form settings.
Spam Protection
| Setting | Default | Runtime use |
|---|---|---|
| Enable Honeypot Protection | Yes | Saved global preference. Each form's Enable Honeypot setting controls its protection. |
| Enable Time-Based Check | Yes | Saved global preference. Each form's Enable Time Check setting controls its time check. |
| Minimum Submit Time (seconds) | 3 | Saved global preference. Each form uses its own Min Submit Time value. |
| Max Submissions per IP/Hour | 10 | Flags a new message when that IP already has this many submissions in the last hour. Set 0 to disable. |
| Blocked Words | Empty | Enter one case-insensitive text fragment per line. Matches in submitted values flag spam. |
| Blocked IP Addresses | Empty | Enter one exact IP per line. Matching submissions are flagged as spam. |
The hidden honeypot is website_url_confirm. The time check uses the submitted render timestamp and flags missing or invalid timestamps too. These checks do not display a CAPTCHA.
Spam messages are stored with a reason but skip email notifications. The visitor receives the normal success message. This is flagging, not a ban on visiting the store.
Create and edit forms
Open Forms and add or edit a row. The installed form is called Default Contact Form internally. Its English Form Title is Contact us, and its description is Send us a message and we will get back to you as soon as possible. New text fields need your own wording.
| Field | Default for the installed form | What you do |
|---|---|---|
| Internal Name | Default Contact Form | Set a private organizational label. |
| Form Title | Contact us | Set the multilingual storefront heading. |
| Description | Installed contact description | Set the multilingual introduction. |
| Success Message | Thank you for your message! We have received your inquiry and will respond shortly. | Set the multilingual confirmation shown after saving. |
| Send Admin Email | Yes | Enable notification for this form. |
| Admin Email | Empty | Override the global recipient, or leave empty for fallback. Commas separate addresses. |
| Email Subject | New contact form submission | Set the multilingual admin subject. The mailer appends the shop name. |
| Send Customer Confirmation | Yes | Enable acknowledgement to the submitted email address. |
| Enable Honeypot | Yes | Check the hidden bot field for this form. |
| Enable Time Check | Yes | Check elapsed time for this form. |
| Min Submit Time | 3 seconds | Change the form's minimum elapsed time. |
| GDPR Checkbox | Yes | Require the consent checkbox before saving. |
| GDPR Label | I agree to the processing of my personal data in accordance with the privacy policy. | Set the multilingual consent wording. |
| Active | Yes | Disable to stop display and submission for the form. |
Add and order fields
Open Fields and select the intended Form. New fields default to Text, not required, active, Position 0, with empty text and validation values.
| Field | What you do |
|---|---|
| Form | Assign the field to its form. |
| Label | Set a multilingual visible label. |
| Field Name | Set a submitted key such as company_name, order_number, website or vat_number. The POST name becomes mpr_cf_FIELD_NAME. |
| Field Type | Choose text, email, phone, textarea, select, checkbox, url, number or file. |
| Placeholder | Set multilingual input guidance. |
| Description | Set multilingual help below the field. |
| Required | Require a submitted value. |
| Validation Rule | Optionally name an existing PrestaShop Validate method, such as isName, isEmail, isPhoneNumber or isMessage. |
| Options | Enter one allowed Select / Dropdown value per line. |
| Position | Set the field order. |
| Active | Hide or show this field. |
For a topic dropdown, enter one line each for Order question, Return request, Product advice, Business account and Other. Email, phone, URL, number and select fields also receive type-specific checks.
Keep an email-type field if you want customer confirmations. Use name or full_name as the name key if you want it copied into the submission's customer name column.
File Upload displays a file field, but uploaded files are not saved. Do not use it to collect attachments. Required file fields can be rejected as empty.
Embed and style a form
Use a theme or module Smarty template that executes hooks. Pasting Smarty into ordinary CMS HTML does not make PrestaShop execute it.
{hook h='displayMprContactForm'}
{hook h='displayMprContactForm' id_form=2}
The first call uses the default active form. The second selects a form by ID.
In Theme styles, review the detected palette, text, backgrounds, borders, success/error colors, focus color and radii. Private settings include Form spacing (20px), Card shadow (0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04)), Raised card shadow (0 4px 6px -1px rgba(0, 0, 0, 0.07), 0 2px 4px -2px rgba(0, 0, 0, 0.05)) and WhatsApp color (#25D366).
For markup changes, override these module templates in your theme:
themes/your-theme/modules/mprcontactform/views/templates/front/contact_form.tpl
themes/your-theme/modules/mprcontactform/views/templates/front/contact_page.tpl
Use .mpr-contactform .mpr-cf-title, .mpr-contactform .mpr-cf-btn and .mpr-contact-page .mpr-cp-card--whatsapp for custom theme styles.
A developer updating stored social links can use a JSON object keyed by facebook, instagram, x, linkedin, youtube, tiktok, pinterest or whatsapp, with a profile URL as each value. This does not create an extra back-office field.
Mail templates under views/templates/mails/ receive {form_title}, {customer_name}, {customer_email}, {field_data}, {submission_date}, {ip_address}, {shop_name} and {shop_url}.
Verify submissions and troubleshoot
Submit a normal message after waiting longer than the form's minimum time. Check Submissions for the form, name, email, IP, status, spam flag, date and field values. Use the row detail to read the values. Bulk actions let you mark messages read, mark spam or delete them.
If mail is missing, check the saved submission first: its spam reason, then the per-form mail switches, recipient addresses and PrestaShop mail delivery. A saved submission means the form worked; the email can still fail to arrive.
If a form is missing, check its Active state, active fields and selected form ID. If replacement routing fails, check Replace Core Contact Page and the shop's contact URL rewrite. If the map or social links are absent, check their switches and stored coordinates or links.
Uninstall
Back up form definitions and submissions before uninstalling. Uninstall removes the module schema, including forms, fields and submissions, together with module configuration and admin entries. It also removes its Theme Detector registration. Use the per-form Active switch or disable the module when you need to pause it while retaining records.
Questions
No questions about this module yet
Ask anything about installation, compatibility or setup. Answers appear here.
Known Issues
13
Security hardening
Native contact page showed two forms
Notification emails were not delivered
Confirmation replies did not reach the shop
Administration labels stayed in English
Default hours used the wrong timezone
Contact pages could fail with differing theme support
Contact form assets were missing
Combined CSS broke contact form styling
Native contact form styling was missing
Standalone form styling was missing
Contact page language links were incorrect
Contact page title omitted the shop name
Feature Requests
7
Implemented
Localized default contact form
Custom contact forms
Built-in spam controls
Theme-aware form appearance
One-click updates
Contact page language alternates
Cloudflare Turnstile
Changelog
v1.4.82026-09-06
- FixedContact form stylesheet now loads on the native PrestaShop contact page (registered via actionFrontControllerSetMedia with a PS 1.6 link fallback)
Older releases
v1.4.72026-08-10
- FixedFront-office form styling on the standalone contact page
v1.4.62026-05-27
- AddedLocalize default contact forms
- AddedUse shared theme style tokens
- Addedcomplete FR/DE/ES/IT/PL translations
- FixedVendor prestashop compat as files
- FixedSuppress contact schema on noindex form variants
- FixedCapture contact user agent safely
- FixedUse local CSS path for CCC bundling compatibility
v1.4.62026-05-26
- Fixeddemo installation by refreshing shared package wiring and autoload registration.
- Addedlazy post-install integrity runner so first-visit install checks fire consistently.
- Cleaned the customer ZIP packaging for current shared admin, integrity, update, selector, and search assets.
v1.3.02026-04-20
- Addedself-healing integrity checks for automatic diagnostics and repair
- Addedautomatic theme detection for Classic and Hummingbird style compatibility
- Addedadmin menu management via MenuInstaller for streamlined module setup
- AddedLicense management tab with key management and renewal options
- Addedcomplete FR/DE/ES/IT/PL translations
- Improvedadmin list columns with visual badge indicators and multiselect filters
- Improvedsettings form organization with tabbed layout
- ImprovedSEO handling with proper canonical URLs and meta tags on all front pages
- FixedAdd canonical route name for getModuleLink resolution
- FixedAppend shop name to contact page meta title
- Fixedadmin list filters — sorting, searching, and filtering now work correctly on all columns
v1.2.02026-02-13
- AddedPrestaShop 9 and Hummingbird theme compatibility
- Addedfile attachment support with configurable allowed file types and maximum upload size
- Improvedform-specific recipient email and customer confirmation settings
- Fixedhoneypot field interfering with PS native form validation on older jQuery builds
- Addedminimum submit-time anti-bot checks as companion protection to honeypot fields
v1.0.02025-12-04
- Initialrelease of Better Contact Form
- InitialCustom field builder: add text, textarea and select fields via the back office interface
- InitialHoneypot anti-bot protection with no CAPTCHA friction for legitimate users
- InitialForm-specific recipient email address for admin notifications
- InitialInquiry log in back office with full submission history and CSV export
v1.1.02025-09-16
- Addedcustom field types: email, phone, URL, number, checkbox, file upload, textarea and select
- Addedconfigurable success messages and customer confirmation emails per form
- Improvedback office submission tracking and filtering
- Fixedsubmitted form data not saved to inquiry log when email delivery fails
Demo
Test the full module before you buy
Buy a licence later and keep your settings.
- Your 30-day demo Test it on your own shop for 30 days from the first install.
- Ready demo shop Explore a ready demo shop in your browser.
- No registration No account, email or store domain needed.
By downloading, you accept the demo terms and privacy policy.
By opening this demo you accept the demo terms and the privacy policy.