Magento: Thêm captcha vào mẫu liên hệ tùy chỉnh


7

Tôi đã tạo một biểu mẫu liên hệ tùy chỉnh mới trong trang web Magento, tôi đang cố gắng thêm captcha vào cuối của nó.

Tôi đã thêm vào ứng dụng / code / core / Mage / Captcha / etc / config.xml

                <customcontacts>
                    <label>Custom Contact Form</label>
                </customcontacts>

Và tôi đã thêm vào 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>

Và tôi đã thêm vào mẫu của mình mã này:

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

Và tôi đã thêm mã này để hiển thị Captcha:

<div><?php echo $this->getChildHtml('captcha'); ?></div>

Sau đó, tôi đã bật Captcha trong Cấu hình> Cấu hình khách hàng> CAPTCHA và tôi chọn "Biểu mẫu liên hệ tùy chỉnh" rồi "Chế độ hiển thị" thành "Luôn luôn".

Nhưng tôi vẫn chưa nhận được Captcha ở dạng tùy chỉnh của mình.

Tôi hy vọng tôi đã rõ ràng

Cảm ơn


Tiện ích mở rộng miễn phí magecomp.com/magento-new-recaptcha.html
Gaurav Jain

Câu trả lời:


13

NameSpace: MyPackage và Module: MyModule

Cấu hình mô-đun

vị trí: ứng dụng / etc / mô-đun / MyPackage_MyModule.xml

<config>
<modules>
    <MyPackage_MyModule>
        <active>true</active>
        <codePool>local</codePool>
    </MyPackage_MyModule>
</modules>

Tạo tập tin cấu hình cho mô-đun này

vị trí: ứng dụng / mã / cục bộ / 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>

Tạo một người quan sát cho điều đó

vị trí: ứng dụng / mã / cục bộ / 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];
    }
}

Tạo một tệp localDB cho chủ đề hoạt động của bạn trong thư mục bố trí.

<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>

Bây giờ sao chép danh bạ / form.phtml vào mymodule / contact / form.phtml, thêm <?php echo $this->getChildHtml('form.additional.info'); ?>yêu cầu của bạn. thí dụ...

<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>

Xóa bộ nhớ cache. Bây giờ, hãy chuyển đến Hệ thống -> Cấu hình -> Cấu hình khách hàng -> Captcha . Chọn Trang liên hệ và lưu.


Phiên bản của Magento giải pháp này được tạo ra để làm gì? ... là cho Magento 1.9. *
Jonathan Marzullo

Thật sự cảm ơn. Làm việc cho tôi vào ngày 1.8.1.0
Erfan

điều này không hiệu quả với tôi, vì bạn cần mở rộng khối captcha của pháp sư để đưa html về dạng của bạn .. liên kết này đã giúp tôi: atwix.com/magento/captcha-in-magento
Kresimir Pendic 17/05/2015

3

Không phải là một câu trả lời cho câu hỏi của bạn, nhưng bạn nên có một cái nhìn về HoneySpam . Nó sử dụng các kỹ thuật tránh spam khác mà không gây khó chịu cho khách hàng.


Tôi thứ hai. Tôi đã sử dụng HoneySpam và hài lòng với kết quả.
Marius

1

theo tôi đã làm như dưới đây. nó làm việc cho tôi

layout.xml

<reference name="content">
    <block type="customer/form_register" name="multivendor_customer_form_register" template="multivendor/form/register.phtml">
        <action method="setShowAddressFields"><value>true</value></action>
        <block type="page/html_wrapper" name="multivendor.customer.form.register.fields.before" as="multivendor_form_fields_before" translate="label">
            <label>Form Fields Before</label>
        </block>


        <!-- Code Start For Display Captcha on Register page -->
        <block type="captcha/captcha" name="captcha">
                <reference name="head">
                    <action method="addJs"><file>mage/captcha.js</file></action>
                </reference>
                <action method="setFormId"><formId>vendor_form</formId></action>
                <action method="setImgWidth"><width>230</width></action>
                <action method="setImgHeight"><width>50</width></action>
        </block> 
        <!-- Code End For Display Captcha on Register page-->


    </block>
</reference>

form.phtml

<div class="field">
    <?php echo $this->getChildHtml('captcha'); ?>
</div>

control.php trong hành động gửi (nơi biểu mẫu của bạn được gửi)

//Captcha Checking Start
$formId = 'vendor_form';
$captchaModel = Mage::helper('captcha')->getCaptcha($formId);
if ($captchaModel->isRequired()) {
    $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
    if ($captchaModel->isRequired()) {
        if (!$captchaModel->isCorrect($this->_getCaptchaString($this->getRequest(), $formId))) {
            Mage::getSingleton('core/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
            $this->_redirectReferer('');
            return;
        }
    }
}
//Captcha Checking End

Thưởng thức nó hoạt động tuyệt vời.


1

Giải pháp của Sohel Rana đã hoạt động, ngoại trừ XML đầu tiên thiếu thẻ </ config>.

Những điều khác cần lưu ý là Captcha cũng cần được bật trong cấu hình hệ thống.

Biểu mẫu liên hệ phải được truy cập qua / URL liên hệ chứ không phải thông qua nội dung trang CMS với {{block}} được thiết lập. Nội dung CMS {{block}} không thể được cập nhật với bố cục XML để chèn captcha.


0

Nếu bạn muốn sử dụng chức năng captcha lõi trong mẫu liên hệ với chúng tôi, bạn cần phát triển một mô-đun trong thư mục địa phương của bạn. Ở đây, Compny, đây là không gian tên của tôi và Cap Cap Capcha là tên mô-đun

Trước hết hãy tạo tệp cấu hình mô-đun Compny_Captcha.xml trong ứng dụng / etc / mô-đun /

<?xml version=”1.0″?>
<config>
<modules>
<Compny_Captcha>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Captcha/>
</depends>
</Compny_Captcha>
</modules>
</config>

tạo tập tin cấu hình mô-đun trong app / code / local / Compny / Captcha / etc / config.xml

<?xml version=”1.0″?>

<config>
<modules>
<Compny_Captcha>
<version>1.8.0.0.0</version>
</Compny_Captcha>
</modules>
<global>
<models>
<captcha>
<rewrite>
<zend>Compny_Captcha_Model_Zend</zend>
</rewrite>
</captcha>
</models>
</global>
<default>
<captcha  translate=”label”>
<frontend>
<areas>
<contact_us>
<label>Contact us Form</label>
</contact_us>
</areas>
</frontend>
</captcha>

<customer>
<captcha>
<always_for>
<contact_us>1</contact_us>
</always_for>
</captcha>
</customer>
</default>
<frontend>
<routers>
<contacts>
<args>
<modules>
<Compny_captcha before=”Mage_Contacts”>Compny_Captcha</Compny_captcha>
</modules>
</args>
</contacts>
</routers>
</frontend>
</config>

Tại đây Bạn có thể ghi đè mô hình captcha lõi vì captcha không xuất hiện sau khi đăng nhập của khách hàng nếu bạn muốn hiển thị captcha sau khi đăng nhập của khách hàng, do đó bạn cần ghi đè chức năng Mage_Captcha_Model_Zend _isUserAuth () tạo tệp Zend.php trong ứng dụng / code / local / Compny /Model/Zend.php

<?php

class Compny_Captcha_Model_Zend extends Mage_Captcha_Model_Zend
{

protected function _isUserAuth()
{
//die(‘function called’);
/* return Mage::app()->getStore()->isAdmin()
? Mage::getSingleton(‘admin/session’)->isLoggedIn()
: Mage::getSingleton(‘customer/session’)->isLoggedIn();*/
}

}

Trong chức năng này, bạn chỉ cần nhận xét mã chức năng.

Bây giờ, hãy tạo bố cục lối vào, bạn cần chỉnh sửa contact.xml trong app / design / frontend / default / default / layout / contact.xml Ở đây bạn cần thêm khối captcha bên dưới

<reference name=”content”>
<block type=”core/template” name=”contactForm” template=”contacts/form.phtml”>

<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>contact_us</formId></action>
<action method=”setImgWidth”><width>230</width></action>
<action method=”setImgHeight”><width>50</width></action>
</block>
</block>

</block>
</reference>

Sau đó, bạn cần gọi khối trong tệp form.phtml trong ứng dụng / thiết kế / frontend / default / default / template / contact / form.phtml bạn chỉ cần đặt dòng dưới đây trước khi hoàn thành </ul>thẻ

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

Bây giờ bạn cần ghi đè liên hệ với chúng tôi, bộ điều khiển tạo tập tin trong app / code / local / Compny / Captcha / controls / IndexContoder.php

<?php
require_once(Mage::getModuleDir(‘controllers’,’Mage_Contacts’).DS.’IndexController.php’);
class Compny_Captcha_IndexController extends Mage_Contacts_IndexController
{

public function postAction()
{
$post = $this->getRequest()->getPost();
if ( $post ) {
$translate = Mage::getSingleton(‘core/translate’);
/* @var $translate Mage_Core_Model_Translate */
$translate->setTranslateInline(false);
try {
$postObject = new Varien_Object();
$postObject->setData($post);

$error = false;

if (!Zend_Validate::is(trim($post['name']) , NotEmpty’)) {
$error = true;
}

if (!Zend_Validate::is(trim($post['comment']) , NotEmpty’)) {
$error = true;
}

if (!Zend_Validate::is(trim($post['email']), EmailAddress’)) {
$error = true;
}

if (Zend_Validate::is(trim($post['hideit']), NotEmpty’)) {
$error = true;
}

$formId =’contact_us’;
$captchaModel = Mage::helper(‘captcha’)->getCaptcha($formId);
if ($captchaModel->isRequired()) {
if (!$captchaModel->isCorrect($this->_getCaptchaString($this->getRequest(), $formId))) {
Mage::getSingleton(‘customer/session’)->addError(Mage::helper(‘captcha’)->__(‘Incorrect CAPTCHA.’));
$this->setFlag(”, Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
Mage::getSingleton(‘customer/session’)->setCustomerFormData($this->getRequest()->getPost());
$this->getResponse()->setRedirect(Mage::getUrl(‘*/*/’));
return;
}
}

if ($error) {
throw new Exception();
}
$mailTemplate = Mage::getModel(‘core/email_template’);
/* @var $mailTemplate Mage_Core_Model_Email_Template */
$mailTemplate->setDesignConfig(array(‘area => frontend’))
->setReplyTo($post['email'])
->sendTransactional(
Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE),
Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER),
Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT),
null,
array(‘data => $postObject)
);

if (!$mailTemplate->getSentSuccess()) {
throw new Exception();
}

$translate->setTranslateInline(true);

Mage::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.’));
$this->_redirect(‘*/*/’);

return;
} catch (Exception $e) {
$translate->setTranslateInline(true);

Mage::getSingleton(‘customer/session’)->addError(Mage::helper(‘contacts’)->__(‘Unable to submit your request. Please, try again later’));
$this->_redirect(‘*/*/’);
return;
}

} else {
$this->_redirect(‘*/*/’);
}
}

protected function _getCaptchaString($request, $formId)
{
$captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
return $captchaParams[$formId];
}

}

Bây giờ mô-đun captcha đã sẵn sàng để thử nghiệm ..

Để áp dụng captcha trong biểu mẫu liên hệ với chúng tôi, hãy truy cập hệ thống cài đặt bảng quản trị của bạn-> cấu hình-> cấu hình khách hàng-> Captcha Kích hoạt captcha nếu nó vô hiệu hóa, bạn có thể nhìn thấy Liên hệ với chúng tôi Form hình trong vùng đa dạng chọn nó và lưu cấu hình. xem hình ảnh xác thực của bạn trên front-end.


@SINHI S, tôi đã làm đúng như đã nói nhưng thật không may, nó thậm chí không hiển thị trong cấu hình, tôi chắc chắn rằng tôi đã làm gì đó không đúng để giải thích, tôi hy vọng tôi có thể chỉ cho bạn cách tôi đã làm điều đó, Cảm ơn bạn
Khalil

Bạn có thể xác minh, bạn đã tạo tất cả các thư mục với đúng tên.
SIBHI S

Sau đó đăng xuất khỏi quản trị viên và đăng nhập lại vào quản trị viên, thử xóa bộ nhớ cache và xóa bộ nhớ cache ...
SIBHI S

Tôi đã thực hiện chính xác cùng tên thư mục và tôi đăng xuất và đăng nhập từ quản trị viên và tôi vẫn thấy các tùy chọn tương tự: Tạo Người dùng, đăng nhập, Quên mật khẩu, Thanh toán với tư cách khách và Đăng ký trong Checkout và cái mới không hiển thị
Khalil

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.