【问题标题】:Magento 1.7 Captcha moduleMagento 1.7 验证码模块
【发布时间】:2014-02-08 12:26:52
【问题描述】:

在新的 Magento 版本中,“系统->配置->客户配置->验证码”中的验证码选项我创建了一个名为“Signmeup”的新表单......但它似乎不起作用。我无法显示它:

<?php echo Mage::getSingleton('core/layout')
->createBlock('captcha/captcha_zend')
->setFormId('signmeup')
->setImgWidth(230)
->setImgHeight(50)
->setTemplate('captcha/zend.phtml')
->toHtml();?>

现在该块没有显示在页面上。 (不是动态页面...带有核心 Mage Bootup 的静态页面) 这是我正在谈论的屏幕截图:

【问题讨论】:

    标签: magento captcha magento-1.7


    【解决方案1】:

    在网上找到 captcha.xml 代码(由于某种原因不在我的企业中)后,我创建了 captcha.xml 并将该代码粘贴到布局文件夹中。

    接下来,我确保在admin &gt; Config &gt; Customer config.. 中打开了每个此项

    我确实必须添加我希望验证码显示的 phtml 文件:

    echo $this->getChildHtml('form.additional.info');  (in php brackets.)
    

    一旦我这样做了,一切都会显示出来并且可以正常工作。

    【讨论】:

    • 嗨,我正在使用 Magento 社区版 1.7.0.2 并且我已启用验证码,如上图所示。但验证码在前端不可见。我需要进行更改吗一些代码?请帮忙
    • @Muk,你是如何启用验证码的?我的客户配置没有验证码选项,我的最后一个配置灰色条是“地址模板”
    【解决方案2】:

    我可以通过创建一个小模块来做到这一点,该模块将本机验证码模块添加到产品评论表单中。该模块仅包含几个文件:

    app/code/local/MyCompany/MyCaptcha/etc/config.xml
    app/code/local/MyCompany/MyCaptcha/Model/Observer.php
    app/etc/modules/MyCompany_MyCaptcha.xml
    app/design/frontend/default/default/layout/mycaptcha.xml
    

    将以下代码添加到包含您希望将验证码添加到的表单的模板 (.phtml) 文件中:

    <?php echo $this->getLayout()->createBlock('captcha/captcha')
    ->setFormId('your_form_id')
    ->setImgWidht(230)
    ->setImgHeight(50)
    ->toHtml();
    ?>
    

    将“your_form_id”更改为您想要的任何内容。
    config.xml 中:

    <config>
        <modules>
            <MyCompany_MyCaptcha>
                <version>1.0.0</version>
            </MyCompany_MyCaptcha>
        </modules>
        <frontend>
            <layout>
                <updates>
                    <mycaptcha> <!-- should be some unique name -->
                        <file>mycaptcha.xml</file>
                    </mycaptcha>
                </updates>
            </layout>
        </frontend>
        <!--  Now we need to add our observer. I attached mine to the 
    controller_action_predispatch_review_product_post event because 
    I needed to intercept product review post event. The event you 
    attach your observer to will be different depending on what you're 
    trying to do. -->
        <global>
            <events>
                <controller_action_predispatch_review_product_post>
                    <observers>
                        <mycaptcha> <!-- these need to match -->
                            <class>MyCompany_MyCaptcha_Model_Observer</class>
                            <method>myMethod</method>
                        </mycaptcha>
                    </observers>
                </controller_action_predispatch_review_product_post>
            </events>
        </global>
        <!-- Now we add our form label that will show in configuration and allow
    us to turn the captcha on or off. -->
        <default>
            <captcha>
                <frontend>
                    <areas>
                        <mycaptcha> <!-- these need to match -->
                            <label>My Captcha</label>
                        </mycaptcha>
                    </areas>
                </frontend>
            </captcha>
        </default>
    </config>
    

    这就是 config.xml
    现在让我们添加我们的观察者。以下代码来自http://mustakarhu.com/blog/magento-captcha-extension-ajax/,只是稍作改动,请向他们大声喊叫。

    <?php
    /**
    * Break the execution in case of incorrect CAPTCHA  
    *
    * @param Varien_Event_Observer $observer
    * @return Cbad_Captcha_Model_Observer
    */
    
    class MyModule_MyCaptcha_Model_Observer extends Mage_Captcha_Model_Observer
    {
    
     public function myMethod($observer) { // called in config.xml
        $formId = 'your_form_id'; // you will change this value
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
        $controller = $observer->getControllerAction();
        $request = $controller->getRequest();
        if ($captchaModel->isRequired()) {
    
            $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
            if (!$captchaModel->isCorrect($this->_getCaptchaString($request, $formId))) {
    
                if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')) {
                    // Is ajax
                    $action = $request->getActionName();
                    Mage::app()->getFrontController()->getAction()->setFlag(
                            $action, Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
    
                    $controller->getResponse()->setHttpResponseCode(200);
                    $controller->getResponse()->setHeader('Content-type', 'application/json');
    
                    $controller->getResponse()->setBody(json_encode(
                            array(
                                "msg" => Mage::helper('captcha')->__('Incorrect CAPTCHA.')
                            )
                        ));
    
                } else {
                   // Is form submit
                    Mage::getSingleton('customer/session')
                        ->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
                    $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
                    Mage::getSingleton('customer/session')
                        ->setCustomerFormData($controller->getRequest()->getPost());
                    $controller->getResponse()->setRedirect(Mage::getUrl('*/*'));
                }
            }
        }
    
        return $this;
      }
    }
    ?>
    

    大部分工作都已完成。我将把 MyCompany_MyCaptcha.xml 留给您自己解决(这非常简单)。
    转到 mycaptcha.xml

    <?xml version="1.0"?>
    <layout version="0.1.0">
    <catalog_product_view>
            <reference name="head">
                <action method="addJs"><file>mage/captcha.js</file></action>
            </reference>
    </catalog_product_view>
    </layout>
    

    此布局 xml 将必要的 javascript 添加到产品页面的 head 部分。您需要将布局句柄 (catalog_product_view) 更改为表单所在的任何页面。
    我希望我对所有内容都进行了足够详细的介绍,并且有人能够根据自己的需要进行调整。

    关于这个主题的其他一些资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2018-05-15
      相关资源
      最近更新 更多