Magento购物车价格计算的功能实现之代码理解

一、代码流程:

1、Mage_Sales_Model_Quote::collectTotals();
    图1-001 Mage_Sale模块的Mage_Sales_Model_Quote::collectTotals()方法
     Magento购物车价格计算的功能实现之代码理解_第1张图片
2、循环 Mage_Sales_Model_Quote::getAllAddress()地址信息
3、调用 Mage_Sales_Model_Quote_Address::collectTotals();
    图1-002 Mage_Sale模块的Mage_Sales_Model_Quote_Address::collectTotals()方法
     Magento购物车价格计算的功能实现之代码理解_第2张图片
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()方法 【排序前】
     Magento购物车价格计算的功能实现之代码理解_第3张图片
    图1-005-02 DEBUG调试Mage_Sales_Model_Config_Ordered::_getSortedCollectorCodes()方法 【排序后】
     Magento购物车价格计算的功能实现之代码理解_第4张图片

二、案例分析
    现在,我们抽出最关键一个促销折扣的计价类做为示例来看一下他是怎么实现促销匹配及价格计算的
    图2-001 Mage_SalesRule模块的config.xml
     Magento购物车价格计算的功能实现之代码理解_第5张图片
     图2-002 Mage_SalesRule模块的Mage_SalesRule_Model_Quote_Discount::__construct()方法
     Magento购物车价格计算的功能实现之代码理解_第6张图片
     图2-002-01 Mage_SalesRule模块的Mage_SalesRule_Model_Quote_Discount::collect()方法
     Magento购物车价格计算的功能实现之代码理解_第7张图片
     图2-002-02 Mage_SalesRule模块的Mage_SalesRule_Model_Quote_Discount::collect()方法
     Magento购物车价格计算的功能实现之代码理解_第8张图片
     图2-003 Mage_SalesRule模块的Mage_SalesRule_Model_Validator::init()方法
     Magento购物车价格计算的功能实现之代码理解_第9张图片
     图2-004 Mage_SalesRule模块的Mage_SalesRule_Model_Validator::initTotals()方法
     Magento购物车价格计算的功能实现之代码理解_第10张图片
     图2-005 Mage_SalesRule模块的Mage_SalesRule_Model_Validator::process()方法【关键】
     Magento购物车价格计算的功能实现之代码理解_第11张图片 

你可能感兴趣的:(Magento购物车价格计算的功能实现之代码理解)