魔法核心在哪里是产品的状态集?
问题描述:
我试图扩展核心以改变magento如何设置产品的状态。从本质上讲,当管理员用户试图将产品状态更改为禁用时,我希望它检查产品是否在EPOS系统中有货,如果是,则抛出错误。魔法核心在哪里是产品的状态集?
为此,我打算扩展设置产品状态并重写该功能的模型。问题是,我无法在任何地方找到它。 magento_core_model_product中没有任何内容。我在mage_catalog_model_product_status中找到了一个名为updateProductStatus的函数,但这看起来并不正确。
有谁知道我需要寻找这个功能吗?
答
经过一番研究,我发现Magento通过大量使用__call()
函数实际生成所有getter和setter,函数在调用未定义的函数时调用。
若要修改getter或setter的功能,只需在重写类时定义要修改的函数,并在迂回方式之前在__call()
之前调用该函数,基本上重写默认功能。
另一种方法是[观察事件]('http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method)'catalog_product_save_before'。如果状态值没有改变,但是EPOS状态已经为您提供了更正差异的额外机会。 – clockworkgeek 2011-05-18 14:10:05
这是一个更简单的解决方案。我希望我一天前想到这一点。感谢您的建议。根据经验,在可能的情况下使用扩展核心对象的事件会更好吗? – Geoff 2011-05-18 16:45:08
是的事件是可取的。几个不同的听众可以一次观察一个事件(或许与不相关的开发者分开的模块),而不会相互干扰。但是只有一个可以一次扩展一个核心对象,其他任何模块都必须覆盖这个不必要的复杂的覆盖。 – clockworkgeek 2011-05-18 17:35:25