我已经延长了 Mage_Catalog_Model_Category_Attribute_Source_Mode (以及它的资源模型)添加两种新模式 display_mode 类别的值。现在我想在保存类别时验证该属性的值。具体来说,我想确保 is_anchor 当我选择两种新模式中的任何一种时,始终设置为“否”。

问题是两者都没有 Mage_Eav_Model_Entity_Attribute_Backend_Abstract::beforeSave 也不 Mage_Eav_Model_Entity_Attribute_Backend_Abstract::validate 调度我可以监听的任何事件。

Mage_Catalog_Model_Category 也没有 _beforeSave 方法。

如何在保存时验证类别属性?谢谢!

有帮助吗?

解决方案

实际上 Mage_Catalog_Model_Category 确实拥有该事件 _beforeSave(). 。为了看到这一点,你需要睁大眼睛看着那个班级:)

Mage_Catalog_Model_Category 直接不定义 _beforeSave. 。但是你可以看到,这个类继承自另一个类 Mage_Catalog_Model_Abstract 并且它确实拥有 _beforeSave. 。看起来像这样

 protected function _beforeSave()
{
    $this->unlockAttributes();
    return parent::_beforeSave();
}

可以看到,这个类又调用了它的父类。那个父类只不过是 Mage_Core_Model_Abstract. 。在那里你可以看到 _beforeSave 像这样定义。

protected function _beforeSave()
{
    if (!$this->getId()) {
        $this->isObjectNew(true);
    }
    Mage::dispatchEvent('model_save_before', array('object'=>$this));
    Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
    return $this;
}

该函数调度两个事件。第二个在这里很重要。你可以看到,它使用了一个 event prefix 在那次事件中。现在看一下 Mage_Catalog_Model_Category. 。你可以看到,它实际上在那里定义了一个事件前缀。

protected $_eventPrefix     = 'catalog_category';

这意味着, 每当类别部分尝试保存时, _beforeSave 方法生成一个具有名称的唯一事件 catalog_category_save_before. 我认为,您可以使用该事件来保存任何类别属性

希望有帮助

许可以下: CC-BY-SA归因
scroll top