This module allows you to create a simple contact form to add to a page type. It is highly configurable since the creation of the form happens in the page controller.
- Integrates with Postmark for bullet-proof email delivery
- Integrates with the Boostrap Forms module
- Includes an API for automatic jQuery validation
- A spam protection API that can be extended with your own spam protection plugins
- Logs failed spam attempts to the database, and locks out repeat offending IPs
<?php
public function ContactForm() {
return ContactForm::create("ContactForm","[email protected]","You've received a new contact form!")
->addFields(
TextField::create("Name","What is your name?"),
EmailField::create("Email", "What is your email?")
)
// You can add fields as strings, too.
->addField("Your message//Textarea")
->setSuccessMessage("Thanks for submitting the form!")
->setSuccessURL($this->Link('success'))
->setOnBeforeSend(function($data, $form) {
// Do stuff here. Return false to refuse the form.
})
->setEmailTemplate("MyCustomTemplate")
->addOmittedField("SomeField")
->setIntroText("Someone submitted a form. Here's the data.")
->addSpamProtector(
SimpleQuestionSpamProtector::create()
->addQuestion("What's the opposite of skinny?","fat")
->addQuestion("Which is bigger, a lake or an ocean?","ocean")
)
->render();
}
The ContactForm class is not actually a form. It is an object that serves as a proxy manager of a Form object. The ->render() method is critical to send the form to the template.
The ContactForm module comes with a page type that allows you to easily create contact forms based on user input in the CMS. The ContactFormPage class has fields for the "To" address, success messaging, and more.
To create a page with a contact form, simply create a descendant of ContactFormPage and call the parent Form() method.
<?php
class MyContactPage extends ContactFormPage {}
class MyContactPage_Controller extends ContactFormPage_Controller {
public function Form() {
return parent::Form()
->addFields(
TextField::create("YourName","Your name"),
EmailField::create("Email","Your email"),
TextareaField::create("Message","Your message")
)
->render();
}
}
Simply add your API key and confirmed "from" address to your _config.php.
<?php
define('POSTMARKAPP_API_KEY','xxxxxxxxxxxxxxxxxxxxx');
define('POSTMARKAPP_MAIL_FROM_ADDRESS', '[email protected]');
Once these settings are in place, the ContactForm module will use Postmark as its delivery method.
If you have the BootstrapForms module installed, the form will automatically render as a BootstrapForm, unless you tell it otherwise, using ->setUseBootstrap(false)
You can set up default spam protection that every form will use, unless configured otherwise.
_config.php
<?php
ContactForm::set_default_spam_protection(array(
SimpleQuestionSpamProtector::create()
->setHeading("Prove you're human by answering a simple question")
->addQuestion("Is fire hot or cold?", "hot")
->addQuestion("What color is a stop sign?", "red")
->addQuestion("Is water wet or dry?","wet")
->addQuestion("Is the world flat?", "no")
->addQuestion("What animal says \"Meow?\"", "cat"),
HoneyPotSpamProtector::create()
->setName("PleaseFillThisOutYouBot")