Magento購物車價格計算的功能實現之程式碼理解
阿新 • • 發佈:2020-10-20
一、程式碼流程:
1、Mage_Sales_Model_Quote::collectTotals(); 圖1-001 Mage_Sale模組的Mage_Sales_Model_Quote::collectTotals()方法 2、迴圈Mage_Sales_Model_Quote::getAllAddress()地址資訊 3、呼叫 Mage_Sales_Model_Quote_Address::collectTotals(); 圖1-002 Mage_Sale模組的Mage_Sales_Model_Quote_Address::collectTotals()方法
4、迴圈Mage_Sales_Model_Quote_Address::getTotalCollector()->getCollectors()
5、呼叫 Mage_Sales_Model_Quote_Address_Total_Collector::getCollectors();
圖1-003 Mage_Sale模組的Mage_Sales_Model_Quote_Address_Total_Collector::_initModels()方法
圖1-004 Mage_Sale模組的Mage_Sales_Model_Config_Ordered::_initCollectors()方法
圖1-005 Mage_Sale模組的Mage_Sales_Model_Config_Ordered::_getSortedCollectorCodes()方法
6、至此,就得到了config.xml裡配置得各計價用的total類,他們均繼承與Mage_Sales_Model_Quote_Address_Total_Abstract類,並分別實現各自的collect方法
注:尤其注意理解config.xml的global/sales/quote/total/{code}的before與after兩個配置項對價格計算的影響及作用
圖1-005-01 DEBUG除錯Mage_Sales_Model_Config_Ordered::_getSortedCollectorCodes()方法 【排序前】
圖1-005-02 DEBUG除錯Mage_Sales_Model_Config_Ordered::_getSortedCollectorCodes()方法 【排序後】
二、案例分析 現在,我們抽出最關鍵一個促銷折扣的計價類做為示例來看一下他是怎麼實現促銷匹配及價格計算的 圖2-001 Mage_SalesRule模組的config.xml 圖2-002 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::__construct()方法 圖2-002-01 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::collect()方法 圖2-002-02 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::collect()方法 圖2-003 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::init()方法 圖2-004 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::initTotals()方法 圖2-005 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::process()方法【關鍵】
1、Mage_Sales_Model_Quote::collectTotals(); 圖1-001 Mage_Sale模組的Mage_Sales_Model_Quote::collectTotals()方法 2、迴圈Mage_Sales_Model_Quote::getAllAddress()地址資訊 3、呼叫 Mage_Sales_Model_Quote_Address::collectTotals(); 圖1-002 Mage_Sale模組的Mage_Sales_Model_Quote_Address::collectTotals()方法
二、案例分析 現在,我們抽出最關鍵一個促銷折扣的計價類做為示例來看一下他是怎麼實現促銷匹配及價格計算的 圖2-001 Mage_SalesRule模組的config.xml 圖2-002 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::__construct()方法 圖2-002-01 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::collect()方法 圖2-002-02 Mage_SalesRule模組的Mage_SalesRule_Model_Quote_Discount::collect()方法 圖2-003 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::init()方法 圖2-004 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::initTotals()方法 圖2-005 Mage_SalesRule模組的Mage_SalesRule_Model_Validator::process()方法【關鍵】
轉載於:https://my.oschina.net/stream/blog/646945