繁体   English   中英

将项目添加到购物车后,Magento调用Modalbox的最佳方法

[英]Magento Best Way to Call Modalbox After Item is Added to Cart

我正在寻找一种在客户将商品添加到购物车后调用Modalbox的方法。

您如何在php中调用Modalbox? 我当时想在CartController.php中的成功消息后调用模式框,但是,我不知道如何从PHP做到这一点,只能从带有OnClick的HTML链接中做到。

显然,您无法完全做到这一点,因为PHP在服务器上运行,而Modalbox在客户端浏览器中的JavaScript中运行-可能在世界的相反方向,就像我们想忘记的物理障碍确实会对软件产生影响一样。 我们能做的最好的事情就是在适当的位置插入Javascript代码,以便浏览器最终执行它。

要添加的项目的第一个具体标志是checkout_cart_product_add_after事件。 创建一个模块并修改它的config.xml文件;

<config>
    <!-- ...usual blocks, helpers and models stuff here... -->
    <frontend>
        <!-- this is the safest way to catch items being added -->
        <events>
            <checkout_cart_product_add_after>
                <observers>
                    <yourmodule_product_add>
                        <class>yourmodule/observer</class>
                        <method>onProductAdd</method>
                    </yourmodule_product_add>
                </observers>
            </checkout_cart_product_add_after>
        </events>
        <!-- will need to insert a block later -->
        <layout>
            <updates>
                <yourmodule>
                    <file>yourmodule.xml</file>
                </yourmodule>
            </updates>
        </layout>
    </frontend>
</config>

那声明了一个期望在Your/Module/Model/Observer.php找到的Your/Module/Model/Observer.php

class Your_Module_Model_Observer
{
    public function onProductAdd()
    {
        // page might redirect immediately so make a flag for now
        Mage::getSingleton('checkout/session')->setShowModalbox(true);
    }
}

您应该能够看到接下来会发生什么。 先前app/design/frontend/base/default/layout/yourmodule.xml文件声明为app/design/frontend/base/default/layout/yourmodule.xml

<layout>
    <!-- hook this block for all pages because anything
         might be shown after adding a product -->
    <default>
        <reference name="before_body_end">
            <block type="yourmodule/modalbox" name="yourmodule_modalbox" />
        </reference>
    </default>
    <default>
</layout>

最后一步是制作Your/Module/Block/Modalbox.php ,它将在必要时实际插入相关的Javascript;

class Your_Module_Block_Modalbox extends Mage_Core_Block_Text_Tag_Js
{
    protected function _toHtml()
    {
        if (!Mage::getSingleton('checkout/session')->getShowModalbox())
            return $this;

        $url = 'URL to show in Modalbox';
        $this->setContents("Modalbox.show({$url}, {width: 600});");
        Mage::getSingleton('checkout/session')->unsShowModalBox();

        return parent::_toHtml();
    }
}

这是我能想到的唯一的最佳实践方法,但是我被刚刚发现的Mage_Core_Block_Text_Tag_Js所迷住。 俗话说“当你只有一把锤子时,所有问题都开始看起来像钉子”。 我可能缺少一些更简单,更明显的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM