NameSpace : MyPackage and Module: MyModule
Module configuration
location : 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
location : app/code/local/MyPackage/MyModule/etc/config.xml
<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 for that
location: 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.
<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>
Now copy contacts/form.phtml to mymodule/contacts/form.phtml, add
<?php echo $this->getChildHtml('form.additional.info'); ?>
to
<form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post" class="b_default_layout">
<ul class="form-list">
<li class="fields row">
<div class=" col-lg-6 col-md-6 col-sm-6 m_bottom_15">
<label >
Clear cache. Now Go to System -> Configuration -> Customer Configuration -> Captcha. Select Contact Page and Save.Then you will see the Result :
Hope it helps !