单击magento购物车上的“编辑”按钮时,会召集哪些观察员?

时间:2018-08-29 06:57:21

标签: magento

在发生编辑按钮单击事件之前,我已经创建了一个观察器。 使用这个我可以更改选择框的值

1 个答案:

答案 0 :(得分:2)

要调用一个观察者,应该有两件事:一个事件和一个监听该事件的$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从来都不简单。