Magento Лучший способ позвонить в Modalbox после добавления товара в корзину - PullRequest
0 голосов
/ 11 января 2012

Я ищу способ позвонить на Modalbox после того, как клиент добавил товар в корзину.

Как вы вызываете Modalbox из php?Я думал о вызове modalbox после сообщения об успехе в CartController.php, однако я не знаю, как это сделать из PHP, только из ссылки HTML с OnClick.

1 Ответ

1 голос
/ 11 января 2012

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

...