我需要禁用状态筛选Magento的产品集合。 Magento的似乎加载集合时默认禁用忽略产品。
因此,有两个部分,我的问题:
1 - 我如何可以加载在Magento只含有禁用产品的集合? 2 - 为什么Magento的不加载禁用的产品集合中开始?
我使用标准的代码加载集合:
$collction = Mage::getModel('catalog/product')->getCollection()
这永远不会加载禁用的产品。
我需要禁用状态筛选Magento的产品集合。 Magento的似乎加载集合时默认禁用忽略产品。
因此,有两个部分,我的问题:
1 - 我如何可以加载在Magento只含有禁用产品的集合? 2 - 为什么Magento的不加载禁用的产品集合中开始?
我使用标准的代码加载集合:
$collction = Mage::getModel('catalog/product')->getCollection()
这永远不会加载禁用的产品。
如果您使用的产品扁平结构,然后
$col = Mage::getModel('catalog/product')->getCollection();
将使用平坦的表(例如。 catalog_product_flat_1
),并disabled
产品不是该表的一部分。
更改配置Use Flat Catalog Product
为“否”,你将不得不集合中的所有产品:
它将这种方式加载的所有产品。
如果你不想改变你的配置在后台(保持良好的性能),我发现这个解决办法,因为我想禁用的产品只针对特定功能的改变只是当你的请求被处理的值,:
Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0);
你必须在第一时间打电话之前设置这样的:
Mage::getModel('catalog/product')->getCollection()
我注意到了同样的要求时,你不能将其设置回1,可能是因为收集示范店保留此标记在内存中。
这样一来,我的数据库中的配置没有改变。
启用平板产品,你最好使用
$collection = Mage::getResourceModel('catalog/product_collection')
您将能够检索残疾人和功能的产品。
看到一个更好的解释这个答案: https://magento.stackexchange.com/a/40001/32179
> joinTable( 'cayaloginventory / stock_item', '的product_id = ENTITY_ID',阵列( 'stock_status'=> 'is_in_stock')) - 一旦你得到你的收藏,你可以使用连接表
这将加载,你需要的是有库存产品表,只需添加后 - > addAttributeToFilter(“状态”,阵列(“情商” => 1))...如果你想这将仅加载可利用的。加载DISABLE改变状态至2
要获得所有产品的残疾人收藏
$collection = Mage::getModel('catalog/product')
->getCollection()
->joinTable( 'cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock") )
->addAttributeToFilter('status', array('eq' => 2 ) );
这应该载入您的收藏通过禁用产品过滤。
$products = Mage::getModel('catalog/product')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToFilter('status', '0');