2

I was trying to add a Captcha in footer newsletter form and it worked fine when customer is not logged in, but the Captcha is not showing when I login as a customer. Please help me to fix this.

Config file is as follows

<?xml version="1.0"?>
<config>
    <modules>
        <Vendor_Captcha>
            <version>0.1.0</version>
        </Vendor_Captcha>
    </modules>
    <default>
        <captcha>
            <frontend>
                <areas>
                    <newsletter_captcha>
                        <label>Newsletter form</label>
                    </newsletter_captcha>
                </areas>
            </frontend>
        </captcha>
    </default>
    <global>
        <models>
            <vendor_captcha>
                <class>Vendor_Captcha_Model</class>
            </vendor_captcha>
        </models>
        <events>
            <controller_action_predispatch_newsletter_subscriber_new>
                <observers>
                    <captcha>
                        <type>model</type>
                        <class>vendor_captcha/observer</class>
                        <method>checknewsletter</method>
                    </captcha>
                </observers>
            </controller_action_predispatch_newsletter_subscriber_new>
        </events>
    </global>
</config>

Please check the layout file.

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="footer.newsletter">    
            <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>newsletter_captcha</formId></action>
                    <action method="setImgWidth"><width>230</width></action>
                    <action method="setImgHeight"><width>50</width></action>
                </block>
            </block>
        </reference>
    </default>
</layout> 

and added the below code in the phtml below the email input box.

<?php echo $this->getChildHtml('form.additional.info'); ?>

observer is as follows

    <?php class Vendor_Captcha_Model_Observer extends Mage_Captcha_Model_Observer{
    public function checkNewsletter($observer)
    {
        $formId = 'newsletter_captcha';
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
        if ($captchaModel->isRequired()) {
            $controller = $observer->getControllerAction();
            if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
                Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
                $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
                $controller->getResponse()->setRedirect(Mage::getUrl(''));
            }
        }
        return $this;
    }
}

Please help me to solve this. Thanks.

  • In which layout file you have added Captcha block??? – KKR Jul 14 '19 at 12:16
0

In Magento front-end area captcha module depended to customer session if customer login then your not showing in any form.

If you need to captcha in newsletter form, then following code is replace in your observer file.

From:

<?php class Vendor_Captcha_Model_Observer extends Mage_Captcha_Model_Observer{
    public function checkNewsletter($observer)
    {
        $formId = 'newsletter_captcha';
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
        if ($captchaModel->isRequired()) {
            $controller = $observer->getControllerAction();
            if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
                Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
                $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
                $controller->getResponse()->setRedirect(Mage::getUrl(''));
            }
        }
        return $this;
    }
}

To:

<?php class Vendor_Captcha_Model_Observer extends Mage_Captcha_Model_Observer{
    public function checkNewsletter($observer)
    {
        $formId = 'newsletter_captcha';
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
       // if ($captchaModel->isRequired()) {
        $controller = $observer->getControllerAction();
        if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
            Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
            $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
            $controller->getResponse()->setRedirect(Mage::getUrl(''));
        }
        //}
        return $this;
    }
}
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.