在发生编辑按钮单击事件之前,我已经创建了一个观察器。 使用这个我可以更改选择框的值
答案 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从来都不简单。