gpt4 book ai didi

magento - 通过 Varien_Event_Observer 访问模型

转载 作者:行者123 更新时间:2023-12-01 10:07:34 25 4
gpt4 key购买 nike

我在 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;
}

我没有得到任何返回(而不是“about-us”或“enable-cookies”或 CMS 页面具有的任何 URL 路径)。但是,以下代码完全正常:
public function getProductUrl(Varien_Event_Observer $observer)
{
$baseUrl = $observer->getEvent()->getProduct()->getBaseUrl();
return $baseUrl;
}

有人可以让我知道通过观察者传递访问 CMS 页面的正确方法是什么吗?

在此先感谢您的任何帮助/提示/指示:-)

最佳答案

事件 cms_page_delete_beforecms_page_save_beforeMage_Core_Model_Abstract 中被解雇.这就是 beforeSave 中的样子功能:

Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());

如您所见,它使用了一个变量 _eventPrefix构造事件键。在 CMS 页面模型中,此项设置为 cms_page .

另请注意 $this->_getEventData() 部分.这是模型(在本例中为 CMS 页面)传递给观察者的方式:
protected function _getEventData()
{
return array(
'data_object' => $this,
$this->_eventObject => $this,
);
}

如您所见,该对象有两个名称, data_object以及在变量中定义的名称 _eventObject .在产品型号中,名称设置为 product ,但在 CMS 页面模型中,缺少该变量。显然 Magento 团队忘记把它放进去,因此使用了核心模型的默认名称:
protected $_eventObject = 'object';

这意味着您可以使用 getObject 在您的观察者中获取 CMS 页面。 :
public function myObserver(Varien_Event_Observer $observer)
{
$page = $observer->getEvent()->getObject();
}

关于magento - 通过 Varien_Event_Observer 访问模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8962853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com