Создание Hello World диспетчера событий (наблюдателя) в Magento? - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь создать диспетчер событий в Magento (который должен вызываться после добавления товара в корзину).

Что я сделал до сих пор:

Я прогуглил это и нашел эту ссылку.Я следовал инструкциям, указанным в этой ссылке.Я настроил файл config.xml и создал файл Observer.php в папке mymodule / model.Но я не вижу никаких результатов из этого.

(код для файла config.xml и Observer.php, который я использовал в моем примере, можно найти в http://goo.gl/O7dBy, имени моего пользовательского модулятакое Crossdata, а имя пакета - MyModule - я делаю это неправильно?)

Любая другая ссылка с примером простого диспетчера событий helloworld будет полезна.

Ответы [ 3 ]

1 голос
/ 23 апреля 2011

Глядя на ваш код, загруженный с http://goo.gl/O7dBy, вы определяете:

<events>
    <add_to_cart_after>
        <observers>
            <add_to_cart_after>
                <class>dispatcher/observer</class>
                <method>hookToAddToCartAfter</method>
            </add_to_cart_after>
        </observers>
    </add_to_cart_after>
</events>

и определите псевдоним модели dispatcher как:

<models>
    <dispatcher>
        <class>MyPackage_Crossdata_Dispatcher_Model</class>
    </dispatcher>
</models>

Полученное имя класса будет MyPackage_Crossdata_Model_Dispatcher_Model_Observer, но вашему классу-наблюдателю будет присвоено имя MyPackage_Crossdata_Dispatcher_Model_Observer, при этом отсутствует Model между Crossdata и Dispatcher.

Я бы порекомендовал отбросить полное определение dispatcher моделей выше и использовать только псевдоним другой модели crossdata, который вы уже определили в config.xml:

<crossdata>
    <class>MyPackage_Crossdata_Model</class>
    <resourceModel>crossdata_mysql4</resourceModel>
</crossdata>   

Затем измените определение события на:

<add_to_cart_after>
    <class>crossdata/observer</class>
    <method>hookToAddToCartAfter</method>
</add_to_cart_after>

Создайте файл /app/code/local/MyPackage/Crossdata/Model/Observer.php и определите в нем свой класс наблюдателя:

class MyPackage_Crossdata_Model_Observer
{
    public function hookToAddToCartAfter($observer)
    {
        // your observer code
    }
}
0 голосов
/ 22 апреля 2011
  1. В вашем config.xml короткое имя, данное вашим блокам и моделям, - crossdata. Тем не менее, событие использует псевдоним dispatcher/observer, вы не определили имя dispatcher. Это, вероятно, должно быть crossdata/observer.

  2. Пример Inchoo называет его модулем Inchoo_Dispatcher, а модель - Inchoo_Dispatcher_Model_Observer. Ваш модуль MyPackage_Crossdata, что означает, что псевдоним crossdata/observer будет пытаться загрузить MyPackage_Crossdata_Model_Observer. Но вашего наблюдателя ошибочно называют MyPackage_Crossdata_Dispatcher_Model_Observer.

  3. Если ваш вставленный код не отображается здесь в переполнении стека, либо сделайте отступ в четыре пробела, либо используйте кнопку {} для его форматирования. Это предпочтительный способ показать код.

0 голосов
/ 20 апреля 2011

Вы добавили папку для Observer.php или файл?Можете ли вы опубликовать код, который вы написали для этого, чтобы мы могли лучше помочь вам отладить?Этот учебник настолько прост и понятен, насколько это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...