我需要通过禁用状态来过滤magento产品集合。 Magento在加载集合时似乎默认忽略禁用的产品。Magento加载包括禁用产品的产品集合
因此有两个部分,我的问题:
1 - 我如何可以加载在只含禁用产品Magento的收藏? 2 - 为什么magento无法在集合中加载禁用的产品?
我使用标准的代码加载集合:
$collction = Mage::getModel('catalog/product')->getCollection()
这永远不会加载禁用的产品。
我需要通过禁用状态来过滤magento产品集合。 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
为“否”,你将拥有所有产品的集合:
它将这种方式加载的所有产品。
这应该加载您的收藏过滤被禁用的产品。
$products = Mage::getModel('catalog/product')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToFilter('status', '0');
首先,禁用状态是'2'。其次,残疾人产品不在集合中,因此过滤不起作用。 – 2014-07-18 21:00:58
残疾产品stauts是“2”而不是“0” – Mohamed23gharbi 2015-02-26 17:40:14
如果你不想改变你的配置在后台(保持良好的性能),我发现这个解决方案,改变只是当你的请求被处理的价值,因为我只想要禁用产品特定功能:
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('status',array('eq'=> 1))...这个表将仅加载AVAILABLE ..如果要禁用更改状态加载到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));
的残疾人收集这引起了我一半。它停止使用扁平表,但它仍然连接到表mage_catalog_category_product_index而不是'mage_catalog_category_product',所以我仍然无法获得禁用的产品。 – 2014-07-18 21:53:49
我通过应用' - > setStoreId(Mage_Core_Model_App :: ADMIN_STORE_ID)'得到了它。这将是你需要做的所有事情,但除非你关闭使用平面目录产品,否则Magento会尝试在不应该出现错误时使用它。所以我必须一起使用它们 – 2014-07-18 22:10:40