3

新しい Magento リリースでは、"System->Configurations->Customer Configuration->Captcha" の captcha オプションで "Signmeup" という新しいフォームを作成しましたが、機能していないようです。表示に問題があります:

<?php echo Mage::getSingleton('core/layout')
->createBlock('captcha/captcha_zend')
->setFormId('signmeup')
->setImgWidth(230)
->setImgHeight(50)
->setTemplate('captcha/zend.phtml')
->toHtml();?>

現在、そのブロックはページに表示されていません。(動的ページではありません... コア Mage Bootup を含む静的ページ) これが私が話していることのスクリーンショットです:

4

2 に答える 2

2

captcha.xml コードをオンラインで見つけた後 (何らかの理由で私の会社にはありませんでした)、captcha.xmlそのコードを作成してレイアウト フォルダーに貼り付けました。

次に、これがすべてオンになっていることを確認しましたadmin > Config > Customer config..

Captcha に表示させたい phtml ファイルを追加する必要がありました。

echo $this->getChildHtml('form.additional.info');  (in php brackets.)

それをしたら、すべてが表示され、機能しました。

于 2012-09-28T15:10:21.293 に答える
0

これは、ネイティブ キャプチャ モジュールを製品レビュー フォームに追加する小さなモジュールを作成することで実現できました。モジュールは、いくつかのファイルで構成されています。

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) を変更する必要があります。
すべてを十分に詳細に説明したので、誰かがこれを自分のニーズに合わせて調整できることを願っています.

このテーマに関するその他のリソース:

于 2014-02-08T04:26:52.347 に答える