Я пытаюсь заставить простого наблюдателя событий работать, но я не знаю, возможно ли это даже в этих обстоятельствах.В конечном счете, я хотел бы вызвать событие, когда Shipworks выдвигает обновления заказа.Я думаю, потому что Shipworks сделан полностью в их сценарии shipworks3.php
и не вызывает Mage::run()
для инициализации полного хранилища (он использует Mage::app('')
, наблюдатели не привязаны к событиям ... по крайней мере, это моя цельтеория в данный момент. Однако я не могу заставить его работать.
Ниже приведен пример кода, который я собрал, чтобы проверить это. Пожалуйста, дайте мне знать, если у вас есть какие-либо мысли по этому поводу
ПРИМЕР
Сначала я создал простой модуль с наблюдателем и контроллером внешнего интерфейса для тестирования:
config.xml
<config>
<modules>
<VPS_Test>
<version>0.1.0</version>
</VPS_Test>
</modules>
<global>
<models>
<vps_test>
<class>VPS_Test_Model</class>
</vps_test>
</models>
</global>
<events>
<test_event_one>
<observers>
<test_event_one>
<type>singleton</type>
<class>VPS_Test_Model_Observer</class>
<method>foo_test_global</method>
</test_event_one>
</observers>
</test_event_one>
</events>
<frontend>
<events>
<test_event_one>
<observers>
<test_event_one>
<type>singleton</type>
<class>VPS_Test_Model_Observer</class>
<method>foo_test_front</method>
</test_event_one>
</observers>
</test_event_one>
</events>
<routers>
<vps_test>
<use>standard</use>
<args>
<module>VPS_Test</module>
<frontName>vpstest</frontName>
</args>
</vps_test>
</routers>
</frontend>
</config>
Observer.php
class VPS_Test_Model_Observer extends Mage_Core_Model_Abstract
{
public function foo_test_front(Varien_Event_Observer $observer)
{
echo "foo_test event caught in observer FRONT";
}
public function foo_test_global(Varien_Event_Observer $observer)
{
echo "foo_test event caught in observer GLOBAL";
}
}
Модуль Config XML
<config>
<modules>
<VPS_Test>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Core />
</depends>
</VPS_Test>
</modules>
</config>
Далее, чтобы проверить это, я загрузил http://my_domain/vpstest
в свой браузер и увидел ожидаемый результат (т. Е. Он отправил событие и мойнаблюдатель поймал его)
Затем я создал eventtest.php
в корне моего сайта и нажал на него из моего браузера. В этом случае Magento запустил событие, но мой наблюдатель не поймал его.
eventtest.php
require 'app/Mage.php';
error_reporting(E_ALL | E_STRICT);
ini_set('html_errors', 1);
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
try {
Mage::app('');
echo "event test<br/>";
$foo = Mage::getModel('vps_test/observer');
echo get_class($foo) . '<br />';
Mage::dispatchEvent('test_event_one', array('object' => ''));
}
catch(Exception $e)
{
echo "exception<br/>$e";
}
Итак ... что я НЕ Дйти?Можно ли даже использовать систему событий Magento без полного приложения Magento?
Спасибо!