2011-09-27 25 views
3

Magento的1.3Magento的(CE 1.3) - 過濾productCollection其中股票數量爲0

我試圖篩選出股票項目從productCollection的。使用:

->addAttributeToFilter('status',array('neq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED)) 

我可以按狀態過濾,但在此商店中,啓用的產品仍可以有0個數量。

使用:

->addAttributeToFilter('qty', array('gt' => 0)) 

返回 '數量' 不是一個屬性錯誤。

$this->_productCollection = $this->_productCollection->addAttributeToSelect('*') 
          ->setStoreId($storeId) 
          ->addStoreFilter($storeId) 
          ->addAttributeToFilter('status',array('neq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED))        
          ->setPageSize($this->getToolbarBlock()->getLimit()); 

任何想法?謝謝。

+0

您必須加入庫存項目集合才能實現這一點 –

回答

9

你可以使用這樣的事情:

$oCollection = Mage::getModel('catalog/product') 
->getCollection() 
->joinField(
    'qty', 
    'cataloginventory/stock_item', 
    'qty', 
    'product_id=entity_id', 
    '{{table}}.stock_id=1', 
    'left' 
) 
->addAttributeToFilter('qty', array('eq' => 0)); 

如果你需要在所有沒有catalog/product數據(除了產品ID),而只是想知道哪些產品ID一般具有零量,你也可以使用:

$oCollection = Mage::getModel('cataloginventory/stock_item') 
->getCollection() 
->addQtyFilter('=', 0); 
+0

所有關於加入! – BobFlemming

+0

這不總是工作,但取決於它是否被選中'管理股票' – WonderLand

2

如果你想在下面一個簡單的模塊的外觀拋出這樣的:

應用程序/代碼/本地/公司/ InStockOnly的/ etc/config.xml文件

<?xml version="1.0"?> 
<config> 

<global> 
    <models> 
    <company_instockonly> 
     <class>Company_InStockOnly_Model</class> 
    </company_instockonly> 
    </models> 
</global> 

<frontend> 
    <events> 
    <catalog_block_product_list_collection> 
     <observers> 
     <company_instockonly_list> 
      <type>singleton</type> 
      <class>company_instockonly/observer</class> 
      <method>addInStockOnlyFilter</method> 
     </company_instockonly_list> 
     </observers> 
    </catalog_block_product_list_collection> 
    </events> 
</frontend> 

</config> 

應用程序/代碼/本地/公司/ InStockOnly /型號/ Observer.php

<?php 

class Company_InStockOnly_Model_Observer { 

    /** 
    * Observes the catalog_block_product_list_collection event 
    */ 
    public function addInStockOnlyFilter($observer){ 
    $observer->getEvent()->getCollection() 
     ->joinField('stock_status','cataloginventory/stock_status','stock_status', 
     'product_id=entity_id', array(
      'stock_status' => Mage_CatalogInventory_Model_Stock_Status::STATUS_IN_STOCK, 
      'website_id' => Mage::app()->getWebsite()->getWebsiteId(), 
     )) 
    ; 
    } 
} 

然後使Magento的發現你的模塊:

應用程序的/ etc /模塊/ Company_InStockOnly.xml

<config> 
    <modules> 
    <Company_InStockOnly> 
     <active>true</active> 
     <codePool>local</codePool> 
    </Company_InStockOnly> 
    </modules> 
</config> 

享受;)

1

您可以使用if($ _ product-> isSaleable()):在您的產品列表中輸出