2009-11-10 15 views
25

Mam następujący kod, aby pobrać listę produktówSprawdzenie, czy produkt Magento jest dzieckiem konfigurowalnego produktu

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

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

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

Moje pytanie brzmi, jak mogę nie odzwierciedlają produkty, które są „proste”, ale należą do rodzica "konfigurowalnego" produktu. (na przykład nie pokazuj "Red Shirt Medium", ponieważ należy do "Red Shirt")

Dowiedziałem się, że to stowarzyszenie mieszka w "catalog_product_super_link", ale dopiero zacząłem od Magento i niestety nie wiesz jak to zrobić filtrowanie :)

Cheers guys,

Chris.

Odpowiedz

28

Nie znam bezpośredniego sposobu dodania tego warunku do kolekcji, ja też byłbym zainteresowany takim rozwiązaniem. Ale zawsze możesz sprawdzić wewnątrz pętli dla każdego produktu:

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

Idealne rozwiązanie do wyszukiwania identyfikatorów nadrzędnych prostych. Bardzo dziękuję –

+2

_ "Nie znam bezpośredniego sposobu dodania tego warunku do kolekcji" _ '$ collection-> getSelect()' i jesteśmy w stanie użyć [Zend_Db_Select] (http: //framework.zend .com/manual/1.12/pl/zend.db.select.html) w celu zbudowania niestandardowego wyboru. '$ Collection-> getTable (" katalog/product_super_link ");' może być pomocne przy łączeniach. –

5

W klasie produktów jest funkcja o nazwie isConfigurable.

To może być pomocne dla Ciebie.

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

Myślę, że to nie zadziała, jeśli produkt jest prostym produktem, zawsze zwróci false, ale produkt może być/nie być dzieckiem. – JuLy

2

Najszybszym sposobem może być sprawdzenie, czy widoczność produktu jest ustawiony na „niewidoczny Indywidualnie”, od prostych produktów związanych z produktami konfigurowalne są zazwyczaj ustawione na to. Niestety nie znam dokładnej składni, ale mam nadzieję, że zrobi to ktoś inny, kto chce dzwonić!

5

Zrobiłem coś podobnego w naszym kanale Google. Ten fragment kodu jest co używam do sprawdzenia dziedziczenie produkty:

$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

Rejestracja prostych produktów, które są częścią produktów konfigurowalnych zwykle mają wartość widoczność Not Visible Individually, to prawdopodobnie wystarczy dodać filtr widoczność do kolekcji że sprawdza widoczności produktów w katalogu:

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

w nieprawdopodobnym okoliczność, że otrzymane produkty są częścią konfigurowalnego produktu, można użyć metody Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild aby sprawdzić, czy dany produkt jest stosowany jako część konfigurowalny produkt.

Powiązane problemy