События cms_page_delete_before
и cms_page_save_before
запускаются в Mage_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';
Это означает, что вы можете получить страницу CMS в своем наблюдателе, используя getObject
:
public function myObserver(Varien_Event_Observer $observer)
{
$page = $observer->getEvent()->getObject();
}