2011-03-12 70 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');