2010-04-23 17 views
13

Tôi muốn kiểm tra xem một số sản phẩm có trong kho hay không nhưng bất cứ điều gì tôi làm phương pháp isInStock() luôn trả về TRUE. Sản phẩm của tôi là các sản phẩm có thể định cấu hình không có sản phẩm liên quan và trong tab "Khoảng không quảng cáo" "Tính khả dụng của hàng" được đặt thành "Hết hàng". Tôi đang làm gì sai? Cảm ơn!Vấn đề Magento với cách gọi isInStock() trên một sản phẩm

+1

Vui lòng đăng dòng mã bạn đang sử dụng để kiểm tra điều này. –

Trả lời

51

Magento có rất nhiều lịch sử tại thời điểm này, vì vậy tốt nhất không nên luôn luôn tin tưởng rằng tên phương pháp sẽ làm những gì "có vẻ hiển nhiên". Rõ ràng bây giờ không rõ ràng một vài năm trước đây.

Nếu bạn nhìn vào hai phương pháp sau đây trên lớp Mage_Catalog_Model_Product

public function isInStock() 
{ 
    return $this->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED; 
} 
public function getStatus() 
{ 
    return $this->_getData('status'); 
} 

Bạn có thể thấy rằng isInStock kiểm tra tình trạng thuộc tính, thiết lập trong "General" của quản trị sản phẩm.

Hãy thử điều này thay vì

$stockItem = $product->getStockItem(); 
if($stockItem->getIsInStock()) 
{ 
    //in stock! 
} 
else 
{ 
    //not in stock! 
} 
+0

Đó là nó! Cảm ơn Alan! –

+0

Câu trả lời hay. Cảm ơn rất nhiều! :) – zuzuleinen

+0

không hoạt động.aa – ahnbizcad

0
$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty(); 
+3

Điều này sẽ chỉ kiểm tra số lượng. Tuy nhiên, tính khả dụng của Cổ phiếu có thể được đặt thành "Hết hàng" trong Magento. Điều này sẽ không kiểm tra điều đó. – nkobber

+0

câu trả lời đúng cho câu hỏi sai – ahnbizcad

0
<?php if ((int) Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty()>0) { ?> 

<?php } else {} ?> 

Nó làm việc cho xem loại sản phẩm đơn giản.

+0

Có câu trả lời nào mới trong câu trả lời của bạn không? – Hulk1991

+0

Vâng, tôi chỉ cần đặt chúng lại với nhau. Hóa ra là nó vô ích. –

+0

Hãy thử phân tích câu trả lời của người khác cho dù câu trả lời của bạn là giống nhau hay không – Hulk1991

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