Xin lưu ý, câu hỏi này liên quan đến chi phí vận chuyển chứ không phải giá. Có một sự khác biệt quan trọng, nghĩa là $$ tính phí cho phương thức giao hàng đối với chủ sở hữu cửa hàng, trái với khoản phí $$ được khách hàng thanh toán.Truy cập chi phí vận chuyển trong giỏ hàng của Magento và/hoặc thanh toán
Bảng cơ sở dữ liệu shipping_tablerate
bao gồm trường cost
, được điền trong đối tượng Mage_Shipping_Model_Carrier_Tablerate
trong phương thức collectRates
. Tuy nhiên, trường đó không thể truy cập được ở bất kỳ nơi nào khác trong ngăn xếp, ví dụ: từ địa chỉ của một trích dẫn.
Tôi cần truy cập vào giá trị đó trên trang giỏ hàng và tôi không thể tìm thấy bất kỳ giá trị nào để đạt được nó, ngoài việc khởi tạo đối tượng Mage_Shipping_Model_Rate_Request
để chuyển vào collectRates()
. Điều đó có vẻ không hiệu quả không cần thiết vì dữ liệu đã được tải từ bảng và có thể truy cập được.
Tôi đã thử Quan sát sự kiện <shipping_carrier_tablerate_load/>
, nhưng có vẻ như sự kiện _load
không được ném cho mô hình đó.
Tôi cũng đã cố gắng truy cập vào các tỷ lệ từ quote:
$quote = Mage::getSingleton('checkout/cart')->getQuote();
$address = $quote->getShippingAddress();
$rate = $address->getShippingRateByCode($code ='tablerate_bestway');
tôi có thể thấy tính price
, tuy nhiên cost
là không có mặt trong mô hình đó.
Ở giai đoạn này, tôi hết ý tưởng. Bất cứ lời đề nghị nào cũng biết ơn!
Cảm ơn, Jonathan
Cảm ơn Alan, câu trả lời hay.Mối quan tâm của tôi về việc quay trở lại cơ sở dữ liệu là vì mô hình này dường như không trải qua quá trình tự động tải tiêu chuẩn, do đó tại sao sự kiện '$ model_load' không được ném ra. Tôi thích ý tưởng sử dụng 'Mage :: register' để lưu trữ giá trị. Liệu 'Mage :: register' lưu trữ trên toàn cầu hay chỉ cho' checkout/Session'? Nếu nó là toàn cục, thì tôi cần phải kiểm tra xem tỷ lệ được lưu bao gồm 'dest_zip' được sử dụng để tính toán nó hay không. Nhưng đó là một chi tiết thực hiện. –
P.S. Tải cơ sở dữ liệu cho 'tablerate' được thực hiện trong' Mage_Shipping_Model_Mysql4_Carrier_Tablerate_Collection :: __ construct() 'và phức tạp một cách hợp lý vì nó liên quan đến ba bảng trong phép nối. –
Ah, tôi hiểu nhầm câu hỏi. Tôi nghĩ bạn muốn lấy nó để sử dụng trong cùng một yêu cầu. Tôi khá chắc chắn Mage :: đăng ký là một điều yêu cầu mỗi .. biến toàn cầu mà không vi phạm phạm vi toàn cầu. Ngoài ra, FWIW, tôi vừa tìm kiếm mã cơ sở 1.4 và 1.4.1 cục bộ của mình và không tìm thấy sự kiện shipping_carrier_tablerate_load ở bất kỳ đâu. –