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

时间:2013-02-26 17:01:02

标签: magento

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

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

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

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

$collction = Mage::getModel('catalog/product')->getCollection()

这永远不会加载禁用的产品。

5 个答案:

答案 0 :(得分:8)

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

$col = Mage::getModel('catalog/product')->getCollection();

将使用平面表(例如catalog_product_flat_1),而disabled产品不属于该表。

将配置Use Flat Catalog Product更改为“否”,您将拥有该集合中的所有产品: catalog-flat

它会以这种方式加载所有产品。

答案 1 :(得分:5)

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

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0);

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

Mage::getModel('catalog/product')->getCollection()

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

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

答案 2 :(得分:0)

启用平板产品后,最好使用

$collection = Mage::getResourceModel('catalog/product_collection')

您将能够检索已禁用和已启用的产品。

有关更好的解释,请参阅此答案: https://magento.stackexchange.com/a/40001/32179

答案 3 :(得分:0)

收到你的收藏后,你可以使用 - > joinTable('cayaloginventory / stock_item','product_id = entity_id',数组('stock_status'=>'is_in_stock'))加入表格。

只需添加 - > addAttributeToFilter('status',array('eq'=> 1)),这将加载您需要的产品库,只需加载 - 这将只加载AVAILABLE。 。如果要将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 ) );

答案 4 :(得分:-5)

这应加载由已停用产品过滤的收藏品。

    $products = Mage::getModel('catalog/product')->getCollection()
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addAttributeToFilter('status', '0');