Magento:将验证码添加到自定义联系表单

Kha*_*lil 5 customization captcha magento contact-form

我在 Magento 网站上创建了一个新的自定义联系表单,我试图在它的末尾添加验证码。

我已经添加到 app/code/core/Mage/Captcha/etc/config.xml

                <customcontacts>
                    <label>Custom Contact Form</label>
                </customcontacts>
Run Code Online (Sandbox Code Playgroud)

我添加到 app/design/frontend/base/default/layout/captcha.xml

    <customcontacts>
    <reference name="customcontacts">
        <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>customcontacts</formId></action>
                <action method="setImgWidth"><width>230</width></action>
                <action method="setImgHeight"><width>50</width></action>
            </block>
        </block>
    </reference>
</customcontacts>
Run Code Online (Sandbox Code Playgroud)

我在表单中添加了以下代码:

<script type="text/javascript">
//<![CDATA[
$('form-validate-captcha').captcha.refresh($('catpcha-reload'));
//]]>
Run Code Online (Sandbox Code Playgroud)

我添加了这个代码来显示验证码:

<div><?php echo $this->getChildHtml('captcha'); ?></div>
Run Code Online (Sandbox Code Playgroud)

然后我在“配置”>“客户配置”>“验证码”中启用了验证码,然后选择“自定义联系表单”,然后选择“显示模式”为“始终”。

但是我仍然没有在我的自定义表单中获得验证码。

我希望我很清楚

谢谢

Ami*_*era 3

如果,您想添加 magento own captcha to contact us form,请按照以下步骤操作......

\n\n

不要在代码文件中写入代码create an extension

\n\n

Step1:创建模块控制文件

\n\n

路径app/etc/modules/Amit_Captchaown.xml添加以下代码

\n\n
<?xml version="1.0" ?>\n<config>\n<modules>\n<Amit_Captchaown>\n<active>true</active>\n<codePool>local</codePool>\n<depends>\n<Mage_Captcha/>\n</depends>\n</Amit_Captchaown>\n</modules>\n</config>\n
Run Code Online (Sandbox Code Playgroud)\n\n

第2步:

\n\n

app/code/local/Amit/Captchaown/etc/config.xml在.Rewrite 模型zend and captcha controllers和此处代码中创建模块 config.xml 文件

\n\n
 <?xml version="1.0"?>\n<config>\n<modules>\n<Amit_Captchaown>\n<version>1.0.0</version>\n</Amit_Captchaown>\n</modules>\n<global>\n    <models>\n    <captcha>\n        <rewrite>\n        <zend>Amit_Captchaown_Model_Zend</zend>\n        </rewrite>\n        </captcha>\n    </models>\n</global>\n<default>\n    <captcha  translate="label">\n    <frontend>\n    <areas>\n    <contact_us>\n    <label>Contact us Form</label>\n    </contact_us>\n    </areas>\n    </frontend>\n    </captcha>\n\n    <customer>\n    <captcha>\n    <always_for>\n    <contact_us>1</contact_us>\n    </always_for>\n    </captcha>\n    </customer>\n</default>\n<frontend>\n<routers>\n<contacts>\n<args>\n<modules>\n<amit_captchaown before="Mage_Contacts">Amit_Captchaown</amit_captchaown>\n</modules>\n</args>\n</contacts>\n</routers>\n</frontend>\n</config>\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤3:

\n\n

覆盖Mage_Captcha_Model_Zend file _isUserAuth()函数\n在 中创建 Zend.php 文件app/code/local/Amit/Captchaown/Model/Zend.php。在此函数中,您只需注释函数代码。

\n\n
<?php\nclass Amit_Captchaown_Model_Zend extends Mage_Captcha_Model_Zend\n{\n\nprotected function _isUserAuth()\n{\n/* return Mage::app()->getStore()->isAdmin()\n? Mage::getSingleton(\xe2\x80\x98admin/session\xe2\x80\x99)->isLoggedIn()\n: Mage::getSingleton(\xe2\x80\x98customer/session\xe2\x80\x99)->isLoggedIn();*\n*/\n}\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤4:\n然后在contacts.xml路径app/design/frontend/our package/your template/layout中添加一些代码

\n\n

添加和修改代码为

\n\n
    <contacts_index_index translate="label">\n        <label>Contact Us Form</label>\n        <reference name="head">\n            <action method="setTitle" translate="title" module="contacts"><title>Contact Us</title></action>\n        </reference>\n        <reference name="root">\n            <action method="setTemplate"><template>page/2columns-right.phtml</template></action>\n            <action method="setHeaderTitle" translate="title" module="contacts"><title>Contact Us</title></action>\n        </reference>\n       <reference name="content">\n            <block type="core/template" name="contactForm" template="contacts/form.phtml">\n\n            <block type="core/text_list" name="form.additional.info">\n            <block type="captcha/captcha" name="captcha">\n            <reference name="head">\n            <action method="addJs"><file>mage/captcha.js</file></action>\n            </reference>\n            <action method="setFormId"><formId>contact_us</formId></action>\n            <action method="setImgWidth"><width>230</width></action>\n            <action method="setImgHeight"><width>50</width></action>\n            </block>\n            </block>\n\n</block>\n</reference>\n    </contacts_index_index>\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤5:

\n\n

然后将代码添加<?php echo $this->getChildHtml(\'form.additional.info\'); ?>form.phtml路径中app/design/frontend/our package/your template/tempate/contacts

\n\n

第6步:

\n\n

现在您需要覆盖 app/code/local/Amit/Captchaown/controllers/IndexController.php 中的联系我们控制器创建文件......

\n\n
<?php\nrequire_once(Mage::getModuleDir(\'controllers\',\'Mage_Contacts\').DS.\'IndexController.php\');\nclass Amit_Captchaown_IndexController extends Mage_Contacts_IndexController\n{\n\npublic function postAction()\n{\n$post = $this->getRequest()->getPost();\nif ( $post ) {\n$translate = Mage::getSingleton(\'core/translate\');\n/* @var $translate Mage_Core_Model_Translate */\n$translate->setTranslateInline(false);\ntry {\n$postObject = new Varien_Object();\n$postObject->setData($post);\n\n$error = false;\n\nif (!Zend_Validate::is(trim($post[\'name\']) , \'NotEmpty\')) {\n$error = true;\n}\n\nif (!Zend_Validate::is(trim($post[\'comment\']) , \'NotEmpty\')) {\n$error = true;\n}\n\nif (!Zend_Validate::is(trim($post[\'email\']), \'EmailAddress\')) {\n$error = true;\n}\n\nif (Zend_Validate::is(trim($post[\'hideit\']), \'NotEmpty\')) {\n$error = true;\n}\n\n$formId =\'contact_us\';\n$captchaModel = Mage::helper(\'captcha\')->getCaptcha($formId);\nif ($captchaModel->isRequired()) {\nif (!$captchaModel->isCorrect($this->_getCaptchaString($this->getRequest(), $formId))) {\nMage::getSingleton(\'customer/session\')->addError(Mage::helper(\'captcha\')->__(\'Incorrect CAPTCHA.\'));\n$this->setFlag(\'\', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);\n\nMage::getSingleton(\'customer/session\')->setCustomerFormData($this->getRequest()->getPost());\n$this->getResponse()->setRedirect(Mage::getUrl(\'*/*/\'));\nreturn;\n}\n}\n\nif ($error) {\nthrow new Exception();\n}\n$mailTemplate = Mage::getModel(\'core/email_template\');\n/* @var $mailTemplate Mage_Core_Model_Email_Template */\n$mailTemplate->setDesignConfig(array(\'area\' => \'frontend\'))\n->setReplyTo($post[\'email\'])\n->sendTransactional(\nMage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE),\nMage::getStoreConfig(self::XML_PATH_EMAIL_SENDER),\nMage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT),\nnull,\narray(\'data\' => $postObject)\n);\n\nif (!$mailTemplate->getSentSuccess()) {\nthrow new Exception();\n}\n\n$translate->setTranslateInline(true);\n\nMage::getSingleton(\'customer/session\')->addSuccess(Mage::helper(\'contacts\')->__(\'Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.\'));\n$this->_redirect(\'*/*/\');\n\nreturn;\n} catch (Exception $e) {\n$translate->setTranslateInline(true);\n\nMage::getSingleton(\'customer/session\')->addError(Mage::helper(\'contacts\')->__(\'Unable to submit your request. Please, try again later\'));\n$this->_redirect(\'*/*/\');\nreturn;\n}\n\n} else {\n$this->_redirect(\'*/*/\');\n}\n}\n\nprotected function _getCaptchaString($request, $formId)\n{\n$captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);\nreturn $captchaParams[$formId];\n}\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在只需captcha进入contact us form您的管理面板设置即可启用sytem->configuration->customer configuration->Captcha

\n