在客戶將物品添加到購物車後,我正在尋找一種稱爲Modalbox的方法。Magento將物品添加到購物車後調用Modalbox的最佳方式
如何從PHP內部調用Modalbox?我想在CartController.php中的成功消息之後調用modalbox,但是,我不知道如何從PHP執行此操作,只能從與OnClick的HTML鏈接執行此操作。
在客戶將物品添加到購物車後,我正在尋找一種稱爲Modalbox的方法。Magento將物品添加到購物車後調用Modalbox的最佳方式
如何從PHP內部調用Modalbox?我想在CartController.php中的成功消息之後調用modalbox,但是,我不知道如何從PHP執行此操作,只能從與OnClick的HTML鏈接執行此操作。
顯然你不能這樣做,因爲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
只是發現了它。正如俗話所說,「當你擁有的只是一把錘子,所有的問題都會像釘子一樣」。我可能會錯過更簡單,更明顯的事情。
我打算給clockworkgeek的解決方案一個嘗試,但是,我相信我只是將CartController.php複製到本地代碼文件夾中,並更改產品成功消息以在會話變量上設置一點。檢查該位和產品頁面上設置的另一個變量,看看它是否應該在頁面模板的主體中回顯onload以用於激活Modalbox ...髒但它確實有效! – TravelingAdMan 2012-01-13 17:32:27
谷歌對於「Magento Ajax加入購物車」。當客戶添加到購物車(不更改頁面)時,您將能夠返回javascript函數(創建模式框)的唯一方法是使用Ajax,並且Magento不提供通過通過購物車添加到購物車的本地支持阿賈克斯。 – 2012-01-11 03:00:05