Magento 1.3
我正在尝试过滤productCollection中的缺货商品。使用:
->addAttributeToFilter('status',array('neq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED))
我可以按状态过滤,但在此商店中,已启用的产品仍可以有0个数量。
使用:
->addAttributeToFilter('qty', array('gt' => 0))
返回'qty'不是属性错误。
$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);
答案 1 :(得分: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>
享受;)
答案 2 :(得分:1)
您可以在产品列表输出中使用if($ _ product-&gt; isSaleable()):