我正在尝试获取所有启用和禁用的产品,我正在使用此代码:
/*$categoryId = 3; // a category id that you can get from admin
$category = Mage::getModel('catalog/category')->load($categoryId);
$collection = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('*')
->addAttributeToFilter('status', array('gt' => 0))
->load();
$categoryId = 3; // a category id that you can get from admin
$category = Mage::getModel('catalog/category')->load($categoryId);*/
以上代码仅提供启用的产品。
通过评论状态过滤器,它仍会带来相同的结果,即仅启用产品。
/*$collection = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('*')
//->addAttributeToFilter('status', array('gt' => 0))
->load();*/
它仍然只带来Enabled产品。 但是,当我评论类别检查时,它会带来所有产品 :(任何人都可以帮助PLZ吗?
注意:
对于那些不清楚此查询的人,请告诉您状态已启用= 1 且状态已停用= 2 。
因此大于零的状态应该为我带来启用和禁用的产品,但它没有这样做。 所以任何想法???
我编辑代码
$collection = Mage::getModel('catalog/category')->load(3)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToSort('entity_id', 'ASC');
die((string) $collection->getSelect());
这引入了这个问题:
SELECT `e`.*, `cat_index`.`position` AS `cat_index_position` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.category_id='3' ORDER BY `e`.`entity_id` ASC
答案 0 :(得分:8)
我发现为什么会这样。
这是因为当您想使用$productCollection->addCategoryFilter()
或使用$category->getProductCollection()
查询从类别中获取产品时,请使用产品到类别连接INDEX表。当您运行重新索引时,产品类别连接INDEX表仅使用已启用的产品填充,并且您无法以此方式获得禁用的产品。这是Magento中的错误,我不知道,您可以使用Raw SQL查询从特定类别中获取您的产品。
答案 1 :(得分:3)
您在集合中使用->addAttributeToFilter('status', array('gt' => 0))
,过滤了已启用的产品,因此您可以删除此行以获取所有产品
答案 2 :(得分:3)
使用您的示例,稍加更改以反映我的类别ID。
在类别233中,我有44个产品,全部启用。
$categoryId = 233; // a category id that you can get from admin
$category = Mage::getModel('catalog/category')->load($categoryId);
$collection = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('*')
// ->addAttributeToFilter('status', array('gt' => 0)) //filter commented, show all products
->load();
echo $collection->count(); // 44 products
$category = Mage::getModel('catalog/category')->load($categoryId);
$collection = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('*')
->addAttributeToFilter('status', array('eq' => 1)) //show only enabled
->load();
echo $collection->count(); // 44 products
$collection = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('*')
->addAttributeToFilter('status', array('eq' => 2)) //only disabled
->load();
echo $collection->count(); // 0 products
正如我在评论中所说,如果你想获得两种可能的状态,我不明白你为什么要过滤状态。
答案 3 :(得分:2)
您可以使用Magento的常量Mage_Catalog_Model_Product_Status::STATUS_DISABLED
仅返回在类别中禁用的产品
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
'status',
array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED)
);