一尘不染

Magento-仅加载可配置产品

php

我有以下代码:

$_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'));

阅读 280

收藏
2020-05-29

共1个答案

一尘不染

问题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)
也有问题,您不仅要输出产品,而且要输出资源的所有详细信息,即数据库连接,缓存的值以及产品的单个资源,等等。

在这种情况下,我认为您会更满意:

print_r($_productCollection->toArray())
2020-05-29