2011-05-17 37 views
0

我試圖擴展核心以改變magento如何設置產品的狀態。從本質上講,當管理員用戶試圖將產品狀態更改爲禁用時,我希望它檢查產品是否在EPOS系統中有貨,如果是,則拋出錯誤。魔法核心在哪裏是產品的狀態集?

爲此,我打算擴展設置產品狀態並重寫該功能的模型。問題是,我無法在任何地方找到它。 magento_core_model_product中沒有任何內容。我在mage_catalog_model_product_status中找到了一個名爲updateProductStatus的函數,但這看起來並不正確。

有誰知道我需要尋找這個功能嗎?

回答

1

經過一番研究,我發現Magento通過大量使用__call()函數實際生成所有getter和setter,函數在調用未定義的函數時調用。

若要修改getter或setter的功能,只需在重寫類時定義要修改的函數,並在迂迴方式之前在__call()之前調用該函數,基本上重寫默認功能。

+0

另一種方法是[觀察事件]('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

+0

這是一個更簡單的解決方案。我希望我一天前想到這一點。感謝您的建議。根據經驗,在可能的情況下使用擴展核心對象的事件會更好嗎? – Geoff 2011-05-18 16:45:08

+0

是的事件是可取的。幾個不同的聽衆可以一次觀察一個事件(或許與不相關的開發者分開的模塊),而不會相互干擾。但是隻有一個可以一次擴展一個核心對象,其他任何模塊都必須覆蓋這個不必要的複雜的覆蓋。 – clockworkgeek 2011-05-18 17:35:25