Magento -仅加载可配置产品

sy5wg1nm  于 2022-11-12  发布在  其他
关注(0)|答案(7)|浏览(193)

下面的代码:

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

nom7f22z1#

使用\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;
}
gkl3eglg

gkl3eglg2#

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

v440hwme

v440hwme3#

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

6jjcrrmo4#

所有这些解决方案对我都不起作用,试试这个:

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

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

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

jogvjijk

jogvjijk5#

你这样做的方式要求在你解析和过滤它们之前加载所有的产品。这可能更接近你所寻找的:

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

fnatzsnv6#

尝试以下

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

    foreach($collection as $product)
    {

    }

要加载可配置且简单的内容,请尝试

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

2guxujil7#

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

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

相关问题