Magento 通过Varien_事件_观察者访问模型
我在Magento 1.6.2.0中有一个自定义观察者,在保存或删除CMS页面时调用它(事件CMS\u page\u delete\u before/CMS\u page\u save\u before)。我已经验证(使用Mage::log())观测者正在工作,但是当我尝试以下操作时:Magento 通过Varien_事件_观察者访问模型,magento,Magento,我在Magento 1.6.2.0中有一个自定义观察者,在保存或删除CMS页面时调用它(事件CMS\u page\u delete\u before/CMS\u page\u save\u before)。我已经验证(使用Mage::log())观测者正在工作,但是当我尝试以下操作时: public function getCmsUrl(Varien_Event_Observer $observer) { $url = $observer->getEvent()->getPa
public function getCmsUrl(Varien_Event_Observer $observer)
{
$url = $observer->getEvent()->getPage()->getIdentifier();
return $url;
}
我没有得到任何返回(而不是“关于我们”或“启用cookies”或CMS页面的任何URL路径)。但是,以下代码工作得非常好:
public function getProductUrl(Varien_Event_Observer $observer)
{
$baseUrl = $observer->getEvent()->getProduct()->getBaseUrl();
return $baseUrl;
}
有人能告诉我当通过观察者时访问CMS页面的正确方式是什么吗
提前感谢您的帮助/提示/提示:-)事件
cms\u page\u delete\u before
和cms\u page\u save\u before
在Mage\u Core\u Model\u Abstract
中启动。这是它在beforeSave
功能中的外观:
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
如您所见,它使用变量\u eventPrefix
来构造事件键。在CMS页面模型中,这被设置为CMS\u页面
还要注意部分$this->\u getEventData()
。这就是模型(在本例中为CMS页面)传递给观察者的方式:
protected function _getEventData()
{
return array(
'data_object' => $this,
$this->_eventObject => $this,
);
}
如您所见,对象有两个名称,data\u object
和一个在变量中定义的名称,\u eventObject
。在产品模型中,名称设置为product
,但在CMS页面模型中,变量缺失。显然,Magento团队忘记将其放入,因此,使用了core模型中的默认名称:
protected $_eventObject = 'object';
这意味着您可以通过使用getObject
,在observer中获取CMS页面:
public function myObserver(Varien_Event_Observer $observer)
{
$page = $observer->getEvent()->getObject();
}
谢谢你的帮助!从那以后,我学会了在其他活动中运用你的技巧。我还发现get_uclass_umethods()也帮助我解决了发生的事情。