在客户将物品添加到购物车后,我正在寻找一种称为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