Ответ 1
Мое первое предположение - это событие, которое вы пытаетесь подключить, - это событие <frontend />
или <admin />
, потому что при запуске командной строки script возникает только событие <global />
.
Magento имеет это понятие под названием "области". Области - это как отдельные приложения, которые живут в системе (но не совсем, я все еще немного нечеткий по концепции). Когда вы настраиваете config.xml со своими наблюдателями, вы либо помещаете их в <global />
, тег <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
. Это, когда вызываются наблюдатели за событиями.