Ваше утверждение "Пользовательский наблюдатель не вызван" оставляет много места для интерпретации.Вот что вы хотите проверить.
Кажется, ваш наблюдатель настроен правильно (хотя тег модулей находится вне глобального тега, но в данном случае это не имеет значения).Вы можете проверить свою настройку, выполнив следующий код самостоятельно из пустого действия контроллера (или другого загрузчика, загруженного события, сценария Magento)
Mage::dispatchEvent('sales_order_shipment_track_save_after');
, а затем заменив sendTrackEmail
на
* 1008.*
Если выполнение остановится с текстом
WR_TrackingEmail_Model_Observer::sendTrackEmail
, вы будете знать, что ваше событие настроено правильно.
Если ваше событие настроено правильно, следующий шаг - убедиться, что событие действительно запускается при выполнении указанных выше действий.Вы можете зарегистрировать эти события в app/Mage.php
, добавив этот временный код регистрации
public static function dispatchEvent($name, array $data = array())
{
//brain dead logging
file_put_contents('/tmp/events.log',"$name\n",FILE_APPEND);
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
#$result = self::registry('events')->dispatch($name, $data);
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
Кроме того, есть хороший шанс, что выход из вашего выхода выше все равно приведет к остановке выполнения, если ваше событие запускается.
Если вы определили, что ваш наблюдатель настроен правильно, и ваше событие запускается, то проблема не в том, что событие инициируется, а в том, что ваш код наблюдателя не выполняет то, что, по вашему мнению, делает.Повторно добавьте свой код, но оставьте свой выход на месте
class WR_TrackingEmail_Model_Observer
{
public function sendTrackEmail($observer)
{
$track = $observer->getEvent()->getTrack();
$shipment = $track->getShipment(true);
$shipment->sendEmail();
exit(__METHOD__);
}
}
Это позволит вам снова и снова загружать браузер для проверки кода наблюдателя.Удачи!