Где я ошибаюсь, используя шаблон наблюдателя Magento? - PullRequest
2 голосов
/ 26 января 2012

Я прочитал много документации о создании пользовательских модулей для Magento.

Для первой попытки я создал структуру модуля, используя Module Creator , и это код, который я добавил в /app/code/local/Test/MyModule/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Test_MyModule>
            <version>0.1.0</version>
        </Test_MyModule>
    </modules>
    <!-- frontend, admin, adminhtml -->
    <global>
        <!-- models, resources, blocks, helpers -->
        <events>
          <sales_order_place_before> <!-- event i need to catch -->
            <observers>
              <trigger_mymodule_placeorder> 
                <type>model</type>
                <class>test/mymodule/model_observer</class>
                <method>sendOrder</method>
              </trigger_mymodule_placeorder>
            </observers>
          </sales_order_place_before>
        </events>
    </global>
</config> 

Мой /app/etc/modules/Test_MyModule.xml файл:

<?xml version="1.0"?>
<config>
    <modules>
        <Test_MyModule>
            <active>true</active>
            <codePool>local</codePool>
        </Test_MyModule>
    </modules>
</config> 

А это мой /app/code/local/Test/MyModule/Model/Observer.php:

<?php
class Test_MyModule_Model_Observer
{
    public function sendOrder()
    {
        // do something.
    }
}

.. но функция Test_MyModule_Model_Observer :: sendOrder () никогда не запускается (я попытался поместить в нее фиктивный регистратор базы данных, чтобы увидеть, будет ли функция выполняться).

Я знаю, что сам модуль загружен правильно, потому что в файле config.xml модуля он объявляет новую ссылку в главном меню, и ссылка отображается правильно (после очистки кэша magento), поэтому я предполагаю, что проблема заключается в именовании функции конвенция, что я пропускаю где-то .. но где?

1 Ответ

3 голосов
/ 26 января 2012

У меня есть две проблемы, которые связаны между собой.Вы указываете класс для использования, используя синтаксис, который принимает Mage :: getModel, но вы a.) Немного ошибочны в синтаксисе, b.) На самом деле, фактически не объявляете, где содержатся ваши модели (если вы не вынули его, чтобыбыть более лаконичным).

Вам необходимо добавить свои модели в глобальный узел.

<models>
   <testmodule>
       <class>Test_MyModule_Model</class>
   </testmodule>
<models>

Часть тестового модуля может быть любой, что вам нравится, если она уникальна для вашего модуля.Значение класса, используемое в части наблюдателя, тогда станет ...

<class>testmodule/observer</class>
...