2012-01-11 65 views
0

在客戶將物品添加到購物車後,我正在尋找一種稱爲Modalbox的方法。Magento將物品添加到購物車後調用Modalbox的最佳方式

如何從PHP內部調用Modalbox?我想在CartController.php中的成功消息之後調用modalbox,但是,我不知道如何從PHP執行此操作,只能從與OnClick的HTML鏈接執行此操作。

+0

谷歌對於「Magento Ajax加入購物車」。當客戶添加到購物車(不更改頁面)時,您將能夠返回javascript函數(創建模式框)的唯一方法是使用Ajax,並且Magento不提供通過通過購物車添加到購物車的本地支持阿賈克斯。 – 2012-01-11 03:00:05

回答

1

顯然你不能這樣做,因爲PHP在服務器上運行,Modalbox在客戶端的瀏覽器中運行在JavaScript中 - 可能位於世界的另一邊,儘管我們想忘記物理障礙確實有效在軟件上。我們能做的最好的事情是在合適的地方插入Javascript代碼,以便瀏覽器最終執行它。

添加項目的第一個具體標誌是checkout_cart_product_add_after事件。創建一個模塊並修改它的​​3210文件;

<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找到一個觀察者;

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;

<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只是發現了它。正如俗話所說,「當你擁有的只是一把錘子,所有的問題都會像釘子一樣」。我可能會錯過更簡單,更明顯的事情。

+0

我打算給clockworkgeek的解決方案一個嘗試,但是,我相信我只是將CartController.php複製到本地代碼文件夾中,並更改產品成功消息以在會話變量上設置一點。檢查該位和產品頁面上設置的另一個變量,看看它是否應該在頁面模板的主體中回顯onload以用於激活Modalbox ...髒但它確實有效! – TravelingAdMan 2012-01-13 17:32:27