我在Magento 1.6.2.0中有一个自定义观察器,在保存或删除CMS页面时调用它(事件cms_page_delete_before/cms_page_save_before).我已经验证(使用Mage :: log())观察者正在工作,但是当我尝试以下操作时:
public function getCmsUrl(Varien_Event_Observer $observer)
{
$url = $observer->getEvent()->getPage()->getIdentifier();
return $url;
}
Run Code Online (Sandbox Code Playgroud)
我没有得到任何回报(而不是"约 - 我们"或"启用cookie"或CMS页面具有的任何URL路径).但是,以下代码完全正常:
public function getProductUrl(Varien_Event_Observer $observer)
{
$baseUrl = $observer->getEvent()->getProduct()->getBaseUrl();
return $baseUrl;
}
Run Code Online (Sandbox Code Playgroud)
有人能通过观察者告诉我访问CMS页面的正确方法是什么吗?
在此先感谢任何帮助/提示/指示:-)
小智 7
事件cms_page_delete_before和cms_page_save_before在被解雇Mage_Core_Model_Abstract.这就是它在beforeSave函数中的样子:
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
Run Code Online (Sandbox Code Playgroud)
如您所见,它使用变量_eventPrefix来构造事件键.在CMS页面模型中,将其设置为cms_page.
另请注意该部分$this->_getEventData().这就是将模型(在本例中为CMS页面)传递给观察者的方式:
protected function _getEventData()
{
return array(
'data_object' => $this,
$this->_eventObject => $this,
);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,该对象有两个名称,data_object以及在变量中定义的名称_eventObject.在产品模型中,名称设置为product,但在CMS页面模型中,缺少变量.显然,Magento团队忘记了这个,因此,使用核心模型的默认名称:
protected $_eventObject = 'object';
Run Code Online (Sandbox Code Playgroud)
这意味着您可以使用getObject以下方法在观察者中获取CMS页面:
public function myObserver(Varien_Event_Observer $observer)
{
$page = $observer->getEvent()->getObject();
}
Run Code Online (Sandbox Code Playgroud)