簡體   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