Magento: добавьте captcha в пользовательскую форму контакта

98
6

Я создал новую настраиваемую форму контакта на веб-сайте Magento, я пытаюсь добавить captcha в конце ее.


Я добавил в app/code/core/Mage/Captcha/etc/config.xml


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

И я добавил к 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>

И я добавил в свою форму этот код:


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


И я добавил этот код, чтобы показать Captcha:


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

Затем я включил Captcha в Конфигурации > Конфигурация клиентa > CAPTCHA, и я выбираю "Пользовательская форма контакта", а затем "Режим отображения" на "Всегда".


Но я еще не получил Captcha в моей пользовательской форме.


Надеюсь, я был чист.


Спасибо

спросил(а) 2021-01-25T15:09:24+03:00 5 месяцев назад
1
Решение
89

если вы хотите добавить magento own captcha to contact us form, затем следуйте ниже шага.....


Не писать код в файле кода create an extension


Шаг1: Создайте файл управления модулем


путь app/etc/modules/Amit_Captchaown.xml добавить ниже код


<?xml version="1.0" ?>
<config>
<modules>
<Amit_Captchaown>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Captcha/>
</depends>
</Amit_Captchaown>
</modules>
</config>

Шаг 2:


Создайте файл mod.xml модуля в app/code/local/Amit/Captchaown/etc/config.xml. Перезапишите модель zend and captcha controllers и здесь код


 <?xml version="1.0"?>
<config>
<modules>
<Amit_Captchaown>
<version>1.0.0</version>
</Amit_Captchaown>
</modules>
<global>
<models>
<captcha>
<rewrite>
<zend>Amit_Captchaown_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>
<amit_captchaown before="Mage_Contacts">Amit_Captchaown</amit_captchaown>
</modules>
</args>
</contacts>
</routers>
</frontend>
</config>


Шаг 3:


Заменить функцию Mage_Captcha_Model_Zend file _isUserAuth()
создайте файл Zend.php в app/code/local/Amit/Captchaown/Model/Zend.php. В этой функции вам нужно только прокомментировать код функции.

<?php
class Amit_Captchaown_Model_Zend extends Mage_Captcha_Model_Zend
{

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

}


Шаг 4:
Затем добавьте некоторый код в contacts.xml путь app/design/frontend/наш пакет/ваш шаблон/макет


добавить и изменить код


    <contacts_index_index translate="label">
<label>Contact Us Form</label>
<reference name="head">
<action method="setTitle" translate="title" module="contacts"><title>Contact Us</title></action>
</reference>
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
<action method="setHeaderTitle" translate="title" module="contacts"><title>Contact Us</title></action>
</reference>
<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>
</contacts_index_index>


Шаг 5:


Затем добавьте код <?php echo $this->getChildHtml('form.additional.info'); ?> в form.phtml path app/design/frontend/our package/your template/tempate/contacts.


Шаг 6:


Теперь вам нужно переопределить контакт с контроллером. Создайте файл в приложении /code/local/Amit/Captchaown/controller/IndexController.php....


<?php
require_once(Mage::getModuleDir('controllers','Mage_Contacts').DS.'IndexController.php');
class Amit_Captchaown_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];
}

}


Теперь просто включите captcha в contact us form перейдите к настройке панели администратора sytem->configuration->customer configuration->Captcha

ответил(а) 2021-01-25T15:09:24+03:00 5 месяцев назад
63

Я придумал вариант ответа Амита Беры, который прост в реализации: "Вы люди" написали вопрос и ответ.


В Admin -> System -> Custom Variables создайте две переменные:


enter image description here


Отредактируйте файл шаблона для контактной формы (может быть, где-то еще, если вы приобрели шаблон) app/design/frontend/base/default/template/contacts/form.phtml


В верхней части, прямо под заголовком, я добавил эти строки для получения информации о настраиваемых переменных, а затем в тегах script добавила пользовательскую функцию проверки в класс Validation, объявленный в прототипе JS. Имея javascript в файле шаблона, вы можете динамически задавать переменную ответа на вопрос с помощью php.

<?php 
$confirm_people_question = Mage::getModel('core/variable')
->setStoreId(Mage::app()->getStore()->getId())
->loadByCode('contact_people_question')
->getValue('text');
$confirm_people_answer = Mage::getModel('core/variable')
->setStoreId(Mage::app()->getStore()->getId())
->loadByCode('contact_people_answer')
->getValue('text');
?>
<script type="text/javascript">
Validation.add(
'validate-people','Incorrect answers prevent automated emails'
,function(v){
var m="<?php echo $confirm_people_answer ?>";
return Validation.get('IsEmpty').test(v) || (v==m);
});
</script>

Далее в том же файле template/contacts/form.phtml добавьте новое поле в форму:


<li>
<label for="people" class="required"><em>*</em>
<?php echo $confirm_people_question ?></label>
<div class="input-box">
<input name="people" id="people"
title="Please confirm you are people" value=""
class="required-entry input-text validate-people" type="text" />
</div>
</li>

Обратите внимание, что текст validate-people тот же, что и в атрибуте <input class="", а также в функции javascript, добавленной выше.


Конечный результат:
enter image description here

ответил(а) 2021-01-25T15:09:24+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема