Моим первым предположением будет событие, к которому вы пытаетесь подключиться, это событие <frontend />
или <admin />
, потому что похоже, что только события <global />
запускаются при запуске сценария командной строки.
У Magento есть такая концепция, которая называется «области». Области похожи на отдельные приложения, которые живут в системе (но не совсем, я все еще немного не в своей концепции). Когда вы настраиваете config.xml со своими наблюдателями, вы либо помещаете их в * Тег 1006 *, тег <frontend />
или тег <admin />
.
Когда дело доходит до событий, Magento загружает только те области, с которыми ему приходится иметь дело, для конкретного запроса. Таким образом, область <global />
всегда загружается. Однако области <frontend />
или <admin />
загружаются, только если приложение попадает в диспетчерскую диспетчеризацию. В частности, в следующем файле / строке
File: app/code/core/Mage/Core/Controller/Varien/Action.php
Mage::app()->loadArea($this->getLayout()->getArea());
Этого никогда не происходит с приложением командной строки. Загружается только область <global />
.
Итак, как упоминалось в первом абзаце, я думаю, ваш наблюдатель не стреляет, потому что Magento никогда не загружает область приложения <frontend />
. Что касается решений, вы можете попробовать переместить наблюдателя в область <global />
. Вы также можете попробовать вручную позвонить
Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND);
хотя вы бы загружали ВСЕХ наблюдателей в область <frontend />
, многие из которых, вероятно, были созданы с использованием контекста веб-браузера.
Если ничего из этого не помогло, взгляните на метод dispatchEvent
класса Mage_Core_Model_App
. Вот где вызвали наблюдателей событий.