1、代碼流程:
一、Mage_Sales_Model_Quote::collectTotals();
圖1-001 Mage_Sale模塊的Mage_Sales_Model_Quote::collectTotals()方法
二、循環 Mage_Sales_Model_Quote::getAllAddress()地址信息
三、調用 Mage_Sales_Model_Quote_Address::collectTotals();
圖1-002 Mage_Sale模塊的Mage_Sales_Model_Quote_Address::collectTotals()方法
四、循環 Mage_Sales_Model_Quote_Address::getTotalCollector()->getCollectors()
五、調用 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()方法
六、至此,就獲得了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、案例分析
如今,咱們抽出最關鍵一個促銷折扣的計價類作爲示例來看一下他是怎麼實現促銷匹配及價格計算的
圖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()方法【關鍵】