一、代码流程:
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()方法【关键】