我有以下代码:
$_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 :(得分:26)
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())
答案 1 :(得分:7)
所有这些解决方案对我都不起作用,试试这个:
$_productCollection1 = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('type_id','configurable');
foreach ($_productCollection1 as $product1) {
echo $product1->getName();
...
}
它有效,但不知道它是否正确(我是Magento的新手)。请告诉我。
答案 2 :(得分:3)
您执行此操作的方式要求在解析和过滤所有产品之前加载所有产品。这可能更接近你想要的东西:
$_productCollection = $this ->getLoadedProductCollection()
->addAttributeToFilter('type_id','configurable');
答案 3 :(得分: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')));
答案 4 :(得分:0)
以下是仅获取可配置产品的代码:
$Config_products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('type_id','configurable');
答案 5 :(得分:-1)
如果您将简单产品的可见性更改为“单独不可见”,Magento将不会加载它以显示在产品列表页面中。