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 观察者执行 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 回答