Насколько я могу сказать, когда скрипт запущен за пределами Magento, наблюдатели не вызываются, когда событие запущено. Почему? Как я фиксирую его?
Ниже первичное размещение, которые приводят меня к этому вопросу. Проблема - то, что наблюдателя, который применил бы правило каталога, никогда не звонят. Огни события, но наблюдатель не берет его.
Я запускаю внешний скрипт, который загружает сессию Magento.
В рамках того сценария я загружаю продукты и захватываю набор свойств. Одна проблема - это getFinalPrice()
не применяет правила каталога, которые относятся к продукту.
Я делаю все, что я знаю для установки сессии, даже набор материала, что я думаю, является лишним. Ничто, кажется, не применяет эти правила.
Вот сценарий тестирования:
require_once "app/Mage.php";
umask(0);
$app = Mage::app("default");
$app->getTranslator()->init('frontend'); //Probably not needed
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton("customer/session");
$session->start(); //Probably not needed
$session->loginById(122);
$product = Mage::getModel('catalog/product')->load(1429);
echo $product->getFinalPrice();
Любое понимание ценится.
Сначала я предполагаю, что событие, к которому вы пытаетесь подключиться, - это
или
, поскольку похоже, что при запуске сценария командной строки срабатывают только события
.
В Magento есть понятие «области». Области похожи на отдельные приложения, которые живут в системе (но не совсем, я все еще немного не уверен в концепции). Когда вы настраиваете config.xml с вашими наблюдателями, вы либо помещаете их в
, тег
или
.
Когда дело доходит до событий, Magento загружает только те области, с которыми он должен иметь дело для конкретного запроса. Таким образом, всегда загружается область
. Однако области
или
загружаются только в том случае, если приложение попадает в диспетчерскую диспетчерскую. В частности, в следующем файле / строке
File: app/code/core/Mage/Core/Controller/Varien/Action.php
Mage::app()->loadArea($this->getLayout()->getArea());
Этого никогда не происходит с приложением командной строки. Загружается только область
.
Итак, как упоминалось в первом абзаце, я предполагаю, что ваш наблюдатель не работает, потому что Magento никогда не загружает область приложения
. Что касается решений, вы можете попробовать переместить своего наблюдателя в область
. Вы также можете попробовать вручную вызвать
Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND);
, хотя вы загрузили бы ВСЕХ наблюдателей в области
, многие из которых, вероятно, были созданы с учетом контекста веб-браузера.
Если ничего из этого не помогает, взгляните на метод dispatchEvent
в классе Mage_Core_Model_App
. Вот откуда вызываются наблюдатели за событиями.