If you need to add captcha in contacts page, you need to add this. So lets start how to add captcha in contacts page.
NameSpace : MyPackage and Module: MyModule
Module configuration
<!-- app/etc/modules/MyPackage_MyModule.xml --> <config> <modules> <MyPackage_MyModule> <active>true</active> <codePool>local</codePool> </MyPackage_MyModule> </modules> </config>
Create config file for this module
<!-- app/code/local/MyPackage/MyModule/etc/config.xml --> <?xml version="1.0"?> <config> <modules> <MyPackage_MyModule> <version>0.0.0.1</version> </MyPackage_MyModule> </modules> <global> <models> <mymodule> <class>MyPackage_MyModule_Model</class> </mymodule> </models> <events> <controller_action_predispatch_contacts_index_post> <observers> <mymodule> <class>mymodule/observer</class> <method>checkContacts</method> </mymodule> </observers> </controller_action_predispatch_contacts_index_post> </events> </global> <default> <captcha> <frontend> <areas> <contacts> <label>Contacts Page</label> </contacts> </areas> </frontend> </captcha> <customer> <captcha> <always_for> <contacts>1</contacts> </always_for> </captcha> </customer> </default> </config>
Create a observer
<?php // app/code/local/MyPackage/MyModule/Model/Observer.php class MyPackage_MyModule_Model_Observer { public function checkContacts($observer){ $formId = 'contacts'; $captchaModel = Mage::helper('captcha')->getCaptcha($formId); if ($captchaModel->isRequired()) { $controller = $observer->getControllerAction(); $word = $this->_getCaptchaString($controller->getRequest(), $formId); if (!$captchaModel->isCorrect($word)) { Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.')); $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); $url = Mage::getUrl('contacts'); $controller->getResponse()->setRedirect($url); } } return $this; } /** * Get Captcha String * * @param Varien_Object $request * @param string $formId * @return string */ protected function _getCaptchaString($request, $formId) { $captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE); return $captchaParams[$formId]; } }
Create a local.xml to your active theme inside layout folder
<?xml version="1.0"?> <layout version="0.1.0"> <contacts_index_index> <reference name="contactForm"> <action method="setTemplate"><template>mymodule/contacts/form.phtml</template></action> <block type="core/text_list" name="form.additional.info"> <block type="captcha/captcha" name="captcha"> <reference name="head"> <action method="addJs"><file>mage/captcha.js</file></action> </reference> <action method="setFormId"><formId>contacts</formId></action> <action method="setImgWidth"><width>230</width></action> <action method="setImgHeight"><width>50</width></action> </block> </block> </reference> </contacts_index_index> </layout>
Now copy “contacts/form.phtml” to “mymodule/contacts/form.phtml”, add
<?php echo $this->getChildHtml('form.additional.info'); ?>
to your requirement. example…
..... <li class="wide"> <label for="comment" class="required"><em>*</em><?php echo Mage::helper('contacts')->__('Comment') ?></label> <div class="input-box"> <textarea name="comment" id="comment" title="<?php echo Mage::helper('contacts')->__('Comment') ?>" class="required-entry input-text" cols="5" rows="3"></textarea> </div> </li> <?php echo $this->getChildHtml('form.additional.info'); ?> </ul> ....
Clear magento cache.
Now Go to System -> Configuration -> Customer Configuration -> Captcha. Select Contact Page and Save.
Happy Coding!