Чтобы наблюдатель был вызван, должны существовать две вещи: событие и $observer
, который слушает это событие. Чтобы установить наблюдателя на событие просто Google, вы узнаете, как.
Если вы хотите отладить своего наблюдателя, есть два важных метода, которые вы можете посмотреть, чтобы понять, что происходит. Первый - Mage_Core_Model_App#dispatchEvent
при app/code/core/Mage/Core/Model/App.php:1271
public function dispatchEvent($eventName, $args)
{
$eventName = strtolower($eventName);
foreach ($this->_events as $area=>$events) {
// (...)
Здесь все события останавливаются на своем пути. Во время разработки вы можете проверить $eventName
, установив точку останова (моя любимая), записав значение в файл, или даже испачкаться и просто echo
увидеть под капотом.
public function dispatchEvent($eventName, $args)
echo "BlaBlaBla"; // just used to find the printed lines in view source code of browser
print_r($eventName);
$eventName = strtolower($eventName);
foreach ($this->_events as $area=>$events) {
// (...)
Помните , вы редактируете основные файлы, и это просто для того, чтобы изучить и найти имя события, а затем избавиться от этих строк.
Второй метод, который фактически выполняет эту работу: Mage_Core_Model_App#_callObserverMethod
при app/code/core/Mage/Core/Model/App.php:1338
/**
* @param object $object
* @param string $method
* @param Varien_Event_Observer $observer
* @return Mage_Core_Model_App
* @throws Mage_Core_Exception
*/
protected function _callObserverMethod($object, $method, $observer)
{
if (method_exists($object, $method)) {
$object->$method($observer);
} elseif (Mage::getIsDeveloperMode()) {
Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
}
return $this;
}
$object->$method($observer)
вызовет метод наблюдателя для объекта, как и прежде, чем вы сможете установить точку останова, войти в файл или даже echo
, чтобы увидеть, что происходит под капотом.
Сначала найдите интересующее вас событие, затем попробуйте добавить привязку события к наблюдателю, затем, если не работает, вы можете использовать второй метод для отладки.
И, да ... Magento никогда не бывает простым.