/app/code/core/Mage/Sales/Model/Quote.php
là lớp Trích dẫn cho đối tượng trích dẫn
/app/code/core/Mage/Sales/Model/Quote/Address.php
là lớp Địa chỉ trích dẫn cho bất kỳ đối tượng địa chỉ trích dẫn
Một đối tượng trích dẫn thường chứa 2 đối tượng địa chỉ, nhưng có thể chứa nhiều hơn nếu có nhiều địa chỉ phân phối.
Liên quan đến (các) phương pháp 'colltotals': Trước tiên hãy hiểu từng phương thức và mục đích của nó:
Phương thức trong Mage_Sales_Model_Quote
, là điểm nhập ban đầu cho Totals Collector
hệ thống con và được bắt đầu bằng lưu giỏ hàng,
(điều này cho phép bạn đưa các phương thức lớp vào tính toán giỏ hàng, để ảnh hưởng đến kết quả của tổng số giỏ hàng - ví dụ: tính toán giảm giá giỏ hàng)
Dòng mã như sau:
Mage_Checkout_Model_Cart::save()
Mage_Sales_Model_Quote::collectTotals()
<--- điểm vào của hệ thống con collector
Mage_Sales_Model_Quote_Address::collectTotals()
<- mỗi địa chỉ được gắn vào đối tượng trích dẫn được gọi, thông qua một vòng lặp trong đối tượng tổng hợp trích dẫn.
Bây giờ, trong phương thức colltotals địa chỉ, một vòng lặp được thực hiện, sử dụng tất cả các hệ thống 'collector' được định nghĩa, gọi từng lớp / phương thức, do đó cho phép tổng số thứ tự được điều chỉnh bằng các phép tính bổ sung (hãy nhớ rằng tất cả các tổng đều treo địa chỉ (các) đối tượng, không phải đối tượng trích dẫn thực tế, cho phép magento thực hiện kiểm tra đến nhiều địa chỉ)
foreach ($this->getTotalCollector()->getCollectors() as $model) {
$model->collect($this);
}
Một danh sách các 'nhà sưu tập' có thể sẽ là:
Bạn có thể thêm trình thu thập tổng của riêng bạn thông qua cấu hình mô-đun như vậy và phải có một collect
phương thức làm điểm vào.
<sales>
<quote>
<totals>
<giftpromo>
<class>giftpromo/promo_gift</class>
<after>discount</after>
<before>tax,grand_total</before>
<sort_order>12410</sort_order>
</giftpromo>
</totals>
</quote>
</sales>
Bây giờ, xem xét tất cả thông tin đó, và các sự kiện đã nổ ra:
sales_quote_collect_totals_b Before : Được kích hoạt trước khi bất kỳ đối tượng địa chỉ nào được tải và trình thu thập tổng được hành động
sales_quote_address_collect_totals_b Before : Được kích hoạt bên trong (các) đối tượng địa chỉ trích dẫn, trước khi mỗi đối tượng địa chỉ chạy danh sách các đối tượng thu thập tiềm năng.
Không biết trò chơi cuối của bạn, tôi sẽ không thể xác định cái nào phù hợp với bạn, tuy nhiên, tôi cũng đề nghị xem xét xem có đúng không và bạn có phù hợp nhất với việc thêm vào một bộ sưu tập mới cho hệ thống thu gom tổng
Tôi hy vọng thông tin này giúp bạn xác định đúng cách để mở rộng chức năng và cung cấp giải pháp ổn định.