Очевидно, что вы не можете сделать именно это, поскольку 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
;
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
, только что обнаружившим это. Как говорится, «когда все, что у вас есть, это молоток, все проблемы начинают выглядеть как гвозди». Возможно, мне не хватает чего-то более простого и очевидного.