2011-03-12 38 views
12

我有以下代码:Magento的 - 只装配置的产品

$_productCollection = $this->getLoadedProductCollection(); 

foreach ($_productCollection as $_product) 
{ 
    if ($_product->_data['type_id'] == 'configurable') 
    { 
    ... 
    } 
} 

虽然它做什么它应该做的,它极大地减慢页面加载时间。是否可以只加载可配置的产品并删除“可配置”检查?该商店有12000种产品,其中约700种可配置,其余为儿童简单产品。

我发现下面的代码返回所有可配置的产品。我需要在当前类别中唯一的产品:

$collectionConfigurable = Mage::getResourceModel('catalog/product_collection') 
       ->addAttributeToFilter('type_id', array('eq' => 'configurable')); 
+0

你可以缓存从这个代码中获得的输出或集合? – alex 2011-03-12 03:45:56

+0

我不确定你的意思,但我做了'fwrite($ f,print_r($ _ productCollection,true))',文件大小为54MB。 '$ _productCollection-> count()'返回5420.显然我不能在这里发布。 – Vincent 2011-03-12 03:56:58

回答

25

是它已经装载了getLoadedProductCollection()的问题 - 产品的数据已经从数据库中检索。仅仅使用当前类别的产品集合也不够好,会忽略“图层”(属性过滤器)。诀窍是首先从列表中删除加载的产品。

// First make a copy, otherwise the rest of the page might be affected! 
$_productCollection = clone $this->getLoadedProductCollection(); 
// Unset the current products and filter before loading the next. 
$_productCollection->clear() 
        ->addAttributeToFilter('type_id', 'configurable') 
        ->load(); 

print_r($_productCollection)有它的问题太多,你不只是输出的产品,而且是数据库连接,缓存值,产品的个性化资源等资源上的所有细节.. 。

在这种情况下,我想你会更开心:如果你改变单纯的产品的可见性,以“不可见独立”,Magento的将不会加载它在产品列表页面中显示

print_r($_productCollection->toArray()) 
+0

有没有办法从数据库中加载简单的产品? – Vincent 2011-03-12 21:23:49

+0

您可以将其可见性设置为“单独不可见”,这会将其从产品列表中排除。如果你的意思是这个场合,那么使用过滤器'addAttributeToFilter('type_id',array('neq'=>'simple'))''。 “neq”显然意味着“Not EQual”。 – clockworkgeek 2011-03-12 21:34:43

+0

+1这个方法。我喜欢克隆和清晰 - 非常简洁。 – philwinkle 2011-03-13 06:24:23

3

你这样做的方式要求所有的产品要加载您通过解析和筛选之前。这可能是更接近您要查找的内容:

$_productCollection = $this ->getLoadedProductCollection() 
          ->addAttributeToFilter('type_id','configurable'); 
+0

它不会改变任何东西。返回的产品数量仍然相同。 – Vincent 2011-03-12 19:08:41

+0

你正在运行什么版本? – philwinkle 2011-03-12 20:20:05

+0

版本1.5.0.1 – Vincent 2011-03-12 20:26:45

7

所有这些解决方案并没有为我工作,试试这个:

$_productCollection1 = Mage::getResourceModel('catalog/product_collection') 
      ->addAttributeToSelect('*') 
      ->addAttributeToFilter('type_id','configurable'); 

foreach ($_productCollection1 as $product1) { 
    echo $product1->getName(); 
    ... 
} 

它的工作原理,但不知道这是否是正确的(我是新来的Magento)。请让我知道。

+1

工作就像魅力非常感谢你:) – 2013-12-02 13:21:59

3

尝试以下

$collection = Mage::getModel('catalog/product')->getCollection(); 
    $collection->addAttributeToFilter('type_id','configurable'); 

    foreach($collection as $product) 
    { 

    } 

对于加载配置和简单的一试

$collection->addAttributeToFilter('type_id', array('in' => array('configurable','simple'))); 
0

这里是只获得配置的产品代码:

$Config_products = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToFilter('type_id','configurable');