Magento负载产品系列,包括残疾产品

Mar*_*ace 7 magento

我需要按禁用状态过滤magento产品集合.默认情况下,Magento在加载集合时会忽略禁用的产品.

所以我的问题分为两部分:

1 - 如何在仅包含禁用产品的magento中加载集合?2 - 为什么magento不会在集合中加载禁用的产品?

我使用标准代码加载集合:

$collction = Mage::getModel('catalog/product')->getCollection()
Run Code Online (Sandbox Code Playgroud)

这永远不会加载残疾产品.

Pét*_*yás 8

如果您使用产品扁平结构,那么

$col = Mage::getModel('catalog/product')->getCollection();
Run Code Online (Sandbox Code Playgroud)

将使用平台(例如catalog_product_flat_1),disabled产品不是该表的一部分.

将配置更改Use Flat Catalog Product为"NO",您将拥有集合中的所有产品: 目录平

它将以这种方式加载所有产品.


adr*_*n54 5

如果您不想在后台更改配置(为了保持良好的性能),我发现这个解决方案会在处理请求时更改值,因为我希望禁用的产品仅用于特定功能:

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0);
Run Code Online (Sandbox Code Playgroud)

你必须在第一次打电话之前设置它:

Mage::getModel('catalog/product')->getCollection()
Run Code Online (Sandbox Code Playgroud)

我注意到你不能在同一个请求中将它设置回1,可能是因为集合模型存储将此标志保留在内存中.

这样,我的数据库中的配置没有改变.