2013-01-21 33 views
7

Tôi đang học cho kỳ thi Chứng nhận Magento và tôi đang cố gắng xác định trong trường hợp nào giá sản phẩm được đọc từ các bảng chỉ mục trong Magento.
Tôi đang cố gắng theo dòng chảy của phương pháp Magento tuy nhiên tôi đã bị mắc kẹt sau khi đi theo một vài con đường mòn thỏ.
Có thể ai cũng đã tìm thấy nó tại bất kỳ thời điểm nào trong quá khứ?Trong trường hợp nào giá sản phẩm được đọc từ các bảng chỉ mục trong Magento?

Trả lời

10

Giá sản phẩm chỉ được đọc từ các bảng chỉ mục khi bạn đang sử dụng bộ sưu tập sản phẩm, tức là khi bạn xử lý nhiều sản phẩm cùng một lúc. Khi bạn nhận được một sản phẩm, ví dụ trên trang xem sản phẩm, giá được tạo khi đang di chuyển.

Và bây giờ giải thích với một số tài liệu tham khảo mã:

Khi bạn xem xét các Mage_Catalog_Model_Product, bạn sẽ thấy rằng phương pháp getFinalPrice() gọi $this->getPriceModel()->getFinalPrice($qty, $this); Đổi lại, mô hình giá mặc định (Mage_Catalog_Model_Product_Type_Price) tính toán giá cả trong phương pháp getFinalPrice() và cũng kích hoạt sự kiện catalog_product_get_final_price được một số mô-đun sử dụng (tôi nghĩ đó là quy tắc về danh mục hoặc giá giỏ hàng) để điều chỉnh giá. Phương pháp này là một phép tính "on-the-fly" do đó không có chỉ mục.

Trong bộ sưu tập (Mage_Catalog_Model_Resource_Product_Collection) trình chỉ mục giá được sử dụng để giảm quy trình phức tạp của việc tính giá cho từng sản phẩm. Nó định nghĩa một bản đồ để gán các lĩnh vực để các trường thích hợp lập chỉ mục:

protected $_map = array('fields' => array(
    'price'   => 'price_index.price', 
    'final_price' => 'price_index.final_price', 
    'min_price'  => 'price_index.min_price', 
    'max_price'  => 'price_index.max_price', 
    'tier_price' => 'price_index.tier_price', 
    'special_price' => 'price_index.special_price', 
)); 

Các indexer mà không làm việc là lớp Mage_Catalog_Model_Product_Indexer_Price.

Các vấn đề liên quan