繁体   English   中英

"Magento - 只加载可配置的产品"

[英]Magento - load only configurable products

我有以下代码:

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

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())

所有这些解决方案都不适合我,请尝试以下操作:

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

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

它可以工作,但不知道它是否正确(我是Magento的新手)。 请让我知道。

尝试跟随

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

    foreach($collection as $product)
    {

    }

对于加载可配置和简单的尝试

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

执行此操作的方式要求在解析和过滤产品之前先加载所有产品。 这可能更接近您要查找的内容:

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

以下是仅获取可配置产品的代码:

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

使用\\Magento\\Catalog\\Model\\ResourceModel\\Product\\Collection $_productcollection,

public function getConfigProducts() {
     $configproducts = $this->_productcollection;
     $configproducts->addAttributeToSelect('*');
     $configproducts->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
     $configproducts->addAttributeToFilter('show_in_price_page', array('eq' => 1));
     $configproducts->addAttributeToFilter('type_id', array('eq' => "configurable"));
     return $configproducts;
}

如果您将简单产品的“可见性”更改为“个别不可见”,Magento将不会加载它以显示在产品列表页面中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM