2009-11-10 48 views
25

我有以下代碼獲取產品檢查是否Magento的產品是一個可配置的產品的一個子

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

$collection->addAttributeToSelect('name') 
    ->addAttributeToFilter("category_ids", array('finset'=>$this->category_id)); 

foreach($collection as $product) { 
    echo $product->getName(); 
} 

我的問題是列表,我怎麼能不回是「簡單」,但屬於產品到父母的「可配置」產品。 (例如不顯示「紅襯衫中等」,因爲它屬於「紅襯衫」)

我已經發現這個協會住在'catalog_product_super_link',但我只是剛剛開始與Magento,不幸的是不知道如何做過濾:)

乾杯球員,

克里斯。

回答

28

我不知道一個直接的方法來此條件添加到收藏,我很想在這樣的解決方案了。但是您可以隨時在每個產品的內部循環中檢查:

if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()))) 
{ 
    echo $product->getName(); 
} 
+1

尋找一個簡單的父母ids的完美解決方案。非常感謝 – 2011-12-02 12:29:48

+2

_「我不知道一個直接的方法來此條件添加到收藏」 _ '$收藏 - > getSelect()',我們可以使用[Zend_Db_Select對象(HTTP://framework.zend .com/manual/1.12/en/zend.db.select.html)來構建自定義選擇。 '$ collection-> getTable('catalog/product_super_link');'可以對連接有幫助。 – 2014-02-16 15:24:01

5

產品類中有一個稱爲isConfigurable的功能。

這可能是對你有所幫助。

$product->isConfigurable(); 
// if its the parent object it'll be true, if its the child it'll be false. 
+6

我認爲這是行不通的,如果產品是一個簡單的產品,這將永遠返回假,但產品可以/不是孩子。 – JuLy 2013-04-02 11:08:20

2

最快的辦法可能是,要檢查產品的可見性設置爲「不可見獨立」,因爲與配置的產品相關的簡單的產品通常設置了這一點。不幸的是,我不知道確切的語法,但希望其他人願意參與進來!

5

我已經做了我們的谷歌飼料類似的東西。 這個代碼片段是我用它來檢查產品繼承:

$products = Mage::getModel('catalog/product')->getCollection(); 
$products->addAttributeToSelect('*'); 
$products->addAttributeToFilter('status', 1);//enabled 
$products->addAttributeToFilter('price', array('gt' => 0));//price not 0 
//$products->addAttributeToFilter('visibility', 4); //catalog, search - comment out to show all items (configurable products simple product breakdowns) 

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 

$prodIds=$products->getAllIds(); 
try { 
foreach($prodIds as $productId) { 
    $product = Mage::getModel('catalog/product'); 
    $product->load($productId); 

    // SIMPLE PRODUCTS 
    if($product->getTypeId() == 'simple') { 
     $prodName = trim($product->getName()); 

     $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($productId); 
     if(!$parentIds) 
      $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($productId); 

     if($parentIds) {  
      $parentProd = Mage::getModel('catalog/product')->load($parentIds[0]);   
      /* 
      * do something if this product has a parent or do some checks against $parentProd 
      */ 
     } // end parent check 
    }//if SIMPLE 
} // foreach 

} catch(Exception $e) { 
    die($e->getMessage()); 
} 
1

由於可配置部分產品簡單的產品通常有Not Visible Individually能見度值,它可能足以可見性過濾器添加到收藏對於在目錄中的產品的可視性檢查:

$collection->setVisibility(Mage::getModel('catalog/product_visibility')->getVisibleInCatalogIds()); 

在不可能的情況所得到的產品是一個可配置的產品的一部分,你可以使用的方法Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild來檢查產品用作一部分可配置產品。

相關問題