これは、ネイティブ キャプチャ モジュールを製品レビュー フォームに追加する小さなモジュールを作成することで実現できました。モジュールは、いくつかのファイルで構成されています。
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 は、製品ページの head セクションに必要な JavaScript を追加します。フォームが表示されるページにレイアウト ハンドル (catalog_product_view) を変更する必要があります。
すべてを十分に詳細に説明したので、誰かがこれを自分のニーズに合わせて調整できることを願っています.
このテーマに関するその他のリソース: