Tôi đang làm việc trên màn hình hiển thị của sự sẵn có cổ phiếu trên trang sản phẩm (cá nhân) của chủ đề Magento của tôi, và có một cái gì đó tôi không hoàn toàn hiểu về điều này.Sự khác nhau giữa isSaleable() và isAvailable() là gì?
tôi thấy hai phương pháp được sử dụng trong các mẫu để kiểm tra xem một sản phẩm có sẵn để bán:
Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
phát hiện riêng của tôi:
Tôi thấy rằng isSalable()
(mà lần lượt được gọi bởi isSaleable()
) gọi isAvailable()
nhưng cũng gửi hai sự kiện (catalog_product_is_salable_before
và catalog_product_is_salable_after
).
Trên mặt trước, tôi nhận thấy rằng trong mẫu cơ sở của Magento isAvailable()
được sử dụng để quyết định có hiển thị sản phẩm là "trong kho" hoặc "hết hàng" hay không; isSaleable()
được sử dụng để quyết định điều gì đó giống như có hiển thị nút "Thêm vào giỏ hàng" hay không.
Trên chương trình phụ trợ, tôi nhận thấy rằng khi số lượng cổ phiếu trở thành 0 và quay lại là không phải là cho phép, tính sẵn có của sản phẩm được chuyển sang "hết hàng". Khi số lượng hàng tồn kho bằng 0 và ngược lại là cho phép, tính sẵn có của một sản phẩm không thay đổi.
Câu hỏi:
Thuộc tính "tính sẵn có" và "số lượng cổ phiếu" rõ ràng được liên kết với nhau và các phương pháp PHP đã đề cập. Tôi muốn biết:
gì ngữ nghĩa sự khác biệt giữa các phương pháp PHP
isAvailable()
vàisSaleable()
là gì và tại sao tôi sẽ sử dụng một trong khác;những gì tôi xuất hiện chưa biết về mối quan hệ của họ với những thuộc tính này và hành vi của Magento.
Cảm ơn bạn.
EDIT:
Tôi đã thử mọi sự kết hợp có liên quan của số lượng cổ phiếu (-1,0,1), cổ phiếu sẵn có (in/out của) và backorders (on/off) cho một sản phẩm, và điều này là kết quả:
St.Qu BckOrd St.Av isSalable() isSaleable() isAvailable() -1 0 0 0 0 0 -1 0 1 N/A N/A N/A -1 1 0 0 0 0 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 N/A N/A N/A 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1
Chỉ vì lợi ích của sự hoàn chỉnh:
St.Av 0 = out of stock St.Av 1 = in stock BckOrd 0 = no backorders allowed BckOrd 1 = backorders are allowed
đó là việc chuyển đổi cổ phiếu sẵn có trong Magento điều khiển giá trị trả về của tất cả các phương pháp PHP, nhưng khi backorders một tắt và số lượng cổ phiếu giảm xuống dưới 1, khả năng sẵn có của cổ phiếu sẽ tự động được đặt lại thành 'hết hàng' (do đó là N/A
hàng).
Tôi hiểu sự khác biệt ngữ nghĩa giữa việc có thứ gì đó trong kho và có thể bán thứ gì đó, nhưng tôi vẫn không biết sự khác biệt ngữ nghĩa giữa isSaleable()/isSalable() và isAvailable(). Tại sao lại sử dụng cái này qua cái kia, khi trong mọi tình huống mà tôi có thể nghĩ họ làm điều tương tự (xem câu hỏi đã chỉnh sửa)? Tôi nói "mà tôi có thể nghĩ đến" bởi vì tôi muốn biết nếu có những tình huống mà tôi chưa nghĩ đến có thể phân biệt giữa những phương pháp này, bởi vì bây giờ tôi có cảm giác một trong số đó là vô dụng, tôi nghĩ là một chút nhanh chóng để phán xét. – pancake
Trong câu hỏi đã chỉnh sửa, bạn đã viết khi quay số bị tắt và số lượng cổ phiếu giảm xuống dưới 1, tính khả dụng của cổ phiếu sẽ tự động được đặt lại thành 'hết hàng' Ngoài ra còn có cờ 'stock_is_changed_automatically' các mục (về mặt kỹ thuật) không được kiểm kê, và rõ ràng là trong kho, backorders off, và qty = 0 – elcash
Đó là thông tin hữu ích, cảm ơn bạn vì điều đó. Tôi không muốn có vẻ vô ơn, nhưng tôi vẫn không biết khi nào nên sử dụng isSaleable và khi nào thì sử dụng isAvailable, khi họ * dường như * làm điều tương tự. Tôi hiện đang xây dựng một chủ đề, vì vậy tôi muốn làm cho nó đúng. – pancake