Better Contact Form: setup and help

Quick start

  1. Upload the module ZIP in Modules > Module Manager and open Configure.
  2. Edit Default Contact Form in Contact Form > Forms, including Form Title and Admin Email.
  3. Check Send Admin Email, Send Customer Confirmation and GDPR Checkbox on the form.
  4. Review the active fields in Fields, keeping an email-type field for confirmations.
  5. Configure Business Info, Location & Hours and Spam Protection.
  6. Enable Replace Core Contact Page if you want the normal contact URL to use this form.
  7. 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

  1. Upload the Better Contact Form ZIP in Modules > Module Manager and open Configure.
  2. Open Contact Form > Forms and edit Default Contact Form.
  3. Review Form Title, Description, Admin Email, Success Message and GDPR Label in each language.
  4. Open Fields and check the installed name, email, phone, subject and message fields.
  5. Configure the contact page and email settings described below.
  6. 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

Email

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

ResolvedUpdated:
Fixed in: 1.7.5
Security hardening.

Native contact page showed two forms

ResolvedUpdated:
Fixed in: 1.7.2
Enabling contact page replacement could leave both the native form and the replacement visible.

Notification emails were not delivered

ResolvedUpdated:
Fixed in: 1.7.2
On PrestaShop 1.7 to 9, contact notification and confirmation emails could fail because their templates could not be found.

Confirmation replies did not reach the shop

ResolvedUpdated:
Fixed in: 1.7.2
Replying to a customer confirmation email could use an incorrect reply destination.

Administration labels stayed in English

ResolvedUpdated:
Fixed in: 1.7.2
Some settings and short administration labels did not use their available translations.

Default hours used the wrong timezone

ResolvedUpdated:
Fixed in: 1.6.0
New contact forms used a fixed timezone instead of the shop timezone.

Contact pages could fail with differing theme support

ResolvedUpdated:
Fixed in: 1.6.0
Contact pages could fail when another installed module supplied an older theme support component.

Contact form assets were missing

ResolvedUpdated:
Fixed in: 1.4.9
Missing administration and storefront assets could break the form appearance or controls.

Combined CSS broke contact form styling

ResolvedUpdated:
Fixed in: 1.4.9
Enabling combined CSS could prevent contact form styles from loading correctly.

Native contact form styling was missing

ResolvedUpdated:
Fixed in: 1.4.8
Forms displayed on the native contact page could appear without the module styling.

Standalone form styling was missing

ResolvedUpdated:
Fixed in: 1.4.7
A form shown on its own page could appear without its intended layout and styling.

Contact page language links were incorrect

ResolvedUpdated:
Fixed in: 1.4.4
Switching languages on the contact page could lead to an incorrect contact address.

Contact page title omitted the shop name

ResolvedUpdated:
Fixed in: 1.4.4
The contact page title did not include the shop name.

Feature Requests

7

Implemented

Localized default contact form

Implemented
Creates a default contact form when none exists, with localized labels, placeholders, subject choices and privacy consent text. Unsupported languages use English defaults.

Custom contact forms

Implemented
Create forms with configurable fields, route notifications and keep a history of submissions.

Built-in spam controls

Implemented
Configure honeypot protection, submission timing checks and rate limits for contact forms.

Theme-aware form appearance

Implemented
Adjust form appearance using the shop theme styles.

One-click updates

Implemented
Update the module from its administration page.

Contact page language alternates

Implemented
Provide alternate contact page addresses for the active shop languages.

Cloudflare Turnstile

Implemented
Optionally protect contact submissions with 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.
Launch demo shop

By downloading, you accept the demo terms and privacy policy.

By opening this demo you accept the demo terms and the privacy policy.

Loading...
Back to top