Wenn Sie die Kernfunktion von Captcha im Kontaktformular verwenden möchten, müssen Sie ein Modul in Ihrem lokalen Verzeichnis entwickeln. Hier ist "Compny" mein Namespace und "Captcha" ist der Modulname
Erstellen Sie zunächst die Modulkonfigurationsdatei Compny_Captcha.xml in app / etc / modules /
<?xml version=”1.0″?>
<config>
<modules>
<Compny_Captcha>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Captcha/>
</depends>
</Compny_Captcha>
</modules>
</config>
Erstellen Sie die Datei module config.xml in 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>
Hier können Sie das Kern-Captcha-Modell überschreiben, da Captcha nach der Kundenanmeldung nicht angezeigt wird, wenn Sie Captcha nach der Kundenanmeldung anzeigen möchten. Daher müssen Sie die Funktion Mage_Captcha_Model_Zend überschreiben. Die Funktion _isUserAuth () erstellt die Datei Zend.php in app / code / local / Compny / Captcha /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();*/
}
}
In dieser Funktion müssen Sie nur den Funktionscode kommentieren.
Erstellen Sie nun das Frontend-Layout, das Sie benötigen, um contacts.xml in app / design / frontend / default / default / layout / contacts.xml zu bearbeiten. Hier müssen Sie den Captcha-Block unter hinzufügen
<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>
Danach müssen Sie den Block in der Datei frontend form.phtml in app / design / frontend / default / default / template / kontakt / form.phtml aufrufen. Geben Sie einfach die folgende Zeile ein, bevor Sie das </ul>
Tag abschließen
<?php echo $this->getChildHtml(‘form.additional.info’); ?>
Jetzt müssen Sie die Kontakt-Controller-Erstellungsdatei in app / code / local / Compny / Captcha / controller / IndexController.php überschreiben
<?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];
}
}
Jetzt ist das Captcha-Modul zum Testen bereit.
Um Captcha im Kontaktformular anzuwenden, gehen Sie zu Ihrem Admin-Panel-Einstellungssystem- > Konfiguration-> Kundenkonfiguration-> Captcha.
Aktivieren Sie Captcha. Wenn es deaktiviert ist, sehen Sie "Kontaktformular" im Formularbereich für Mehrfachauswahl. Wählen Sie es aus und speichern Sie die Konfiguration. Sehen Sie Ihr Captcha im Frontend.