1

私はさまざまなチュートリアルに従って、顧客がカートに製品を追加した後、Magentoイベントオブザーバーを使用してカスタムJavascriptアラートを表示しようとしましたが、何も得られないようです。私は正しい道を進むことにさえ近づいていますか?

私のモジュール:

<?xml version="1.0"?>
<config>
    <modules>
        <Shoplio_XS>
            <active>true</active>
            <codePool>local</codePool>
        </Shoplio_XS>
    </modules>
</config>

私のconfig.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Shoplio_XS>
            <version>0.1.0</version>
        </Shoplio_XS>
    </modules>
    <frontend>
        <events>
            <sales_quote_product_add_after>
                <observers>
                    <Shoplio_XS_Model_Observer>
                        <type>singleton</type>
                        <class>Shoplio_XS_Model_Observer</class>
                        <method>Mytestmethod</method>
                    </Shoplio_XS_Model_Observer>
                </observers>
            </sales_quote_product_add_after>
        </events>
    </frontend>
</config>

私のobserver.php:

<?php class Shoplio_XS_Model_Observer
{
    public function Mytestmethod($observer) {
        $event = $observer->getEvent();

        // Javascript Alert Here

    } 
}

私は主にこのチュートリアルに従っています:http://goo.gl/DRwd5

唯一の違いは、商品がカートに追加された後も顧客を商品ページに表示したままにするため、ショッピングカートページには何も表示したくないということです。商品がカートに追加された後、商品ページにカスタムJavascriptアラートを表示したいだけです。

4

2 に答える 2

0

結果をブラウザに送り返す前に、オブザーバーコードがサーバー側で「実行」されるため、Magento ObserverでJavascriptを実行することはできません(JSはブラウザ内のクライアント側で実行されます)

あなたにできることは

app / design / frontend / default /[theme]/template/catalog/product/view.phtmlにあります

 var productAddToCartForm = new VarienForm('product_addtocart_form');
 productAddToCartForm.submit = function(button, url) {
        if (this.validator.validate()) {

            alert('here');

            var form = this.form;
            var oldUrl = form.action;

            if (url) {
               form.action = url;
            }
            var e = null;
            try {
                this.form.submit();
            } catch (e) {
            }
            this.form.action = oldUrl;
            if (e) {
                throw e;
            }

            if (button && button != 'undefined') {
                button.disabled = true;
            }

        }

 }.bind(productAddToCartForm);
于 2012-12-06T17:26:56.620 に答える
0

私はMagentoのコアメッセージを便乗することにしました。コアメッセージブロックをローカルフォルダーに移動し、255行目に次のコードを追加することから始めました。

/app/code/local/Mage/Core/Block/Messages.php

if(strstr($html, 'was added to your shopping cart')) {
    $html.= '<script type="text/javascript">setTimeout("myFunction()",1000);</script>';
}

上記のスニペットは、コアのカートへの追加成功メッセージが表示された場合にのみ、カスタムJavascript関数が遅延して実行されることを保証します。

直後に追加しました:

$html.= ($this->_escapeMessageFlag) ? $this->htmlEscape($message->getText()) : $message->getText();

次に、view.phtmlファイルに、次のJavascript関数を追加して、カスタムメッセージを含むモーダルボックスを開きます。

function xsModal() {
    Modalbox.show($('modal-id'), {title: 'My Custom Message', width: 600});
}

チャームのように機能します!

于 2012-12-06T22:26:58.703 に答える