2011-12-20 10 views
11

Sto collegando i risultati dei prodotti e se il prodotto è un prodotto raggruppato, desidero ottenere tutti i prodotti in tale gruppo. Sto facendo questo:Magento: come si ottengono prodotti associati del gruppo di prodotti?

$products = Mage::getModel('catalog/product') 
        ->getCollection() 
        ->addAttributeToSelect('*'); 
foreach ($products as $product) { 
    if ($product->getTypeId() == 'grouped'){ 
     // how do I now get associated products of $product? 
    } 
} 

risposta

29

In:

/magento/app/design/frontend/base/default/template/catalog/product/view/type/grouped.phtml 

Vedrai che usano questo:

<?php 
    $_associatedProducts = $this->getAssociatedProducts(); 

Dal momento che il file è di tipo phtml Mage_Catalog_Block_Product_View_Type_Grouped, possiamo andare a:

/magento/app/code/core/Mage/Catalog/Block/Product/View/Type/Grouped.php 

e vedere che Mage_Catalog_Block_Product_View_Type_Grouped::getAssociatedProducts() fa questo:

<?php 
    $this->getProduct()->getTypeInstance(true)->getAssociatedProducts($this->getProduct()); 

Quindi possiamo tranquillamente assumere che $this->getProduct() restituisce un oggetto prodotto, e sostituirlo con la variabile $product in questo modo:

<?php 
    if ($product->getTypeId() == 'grouped'){ 
     // how do I now get associated products of $product? 
     $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product); 
    } 

Se fossi per ottimizzare completamente il vostro codice, ho 'd scrivere in questo modo:

<?php 
    $products = Mage::getModel('catalog/product') 
     ->getCollection() 
     ->addAttributeToFilter('type_id', array('eq' => 'grouped')); 
    foreach ($products as $product) { 
     $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product); 
     // Do something with $associatedProducts 
    } 
+0

Grazie potrei arrivare a questo lavoro ... Voglio eseguire un'iterazione su tutti i prodotti, e SE è raggruppato su iterate sui prodotti associati: voglio ancora tutti i singoli prodotti, non solo i prodotti associati dei prodotti raggruppati. Il tuo codice "ottimizzato" non includerebbe singoli prodotti regolari, ho ragione? – Owen

+0

Corretto, otterrebbe solo una raccolta di prodotti raggruppati. Quello che vuoi usare è $ product-> isGrouped(). Quindi con la raccolta di tutti i prodotti, utilizzare: foreach ($ prodotti come $ prodotto) {if ($ product-> isGrouped()) {/ * Ottieni raccolta prodotti associati * /}} –

0

per ottenere risultati di raccolta prodotto per tipo:

$product = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addAttributeToFilter('type_id', array('eq' => 'grouped')) 
    ->load(); 

$parentProductId = array(); 

foreach($product as $simpleProducts) { 
    $simpleProducts->loadParentProductIds(); 
    array_push($parentProductId,$simpleProducts->getParentProductIds(); 
} 
+0

Errore irreversibile: chiamata a un metodo non definito Mage_Catalog_Model_Resource_Eav_Mysql4_Product: : getParentProductIds() in /var/www/vhosts/mysite.com/httpdocs/app/code/core/Mage/Catalog/Model/Product.php nella riga 1355 – Owen

6

Oppure, se si desidera ottenere ID di prodotti associati, è possibile utilizzare il seguente metodo (che è molto più veloce):

public function getAssociatedProductIds($groupedProductId) 
{ 
    $coreResource = Mage::getSingleton('core/resource'); 
    $conn = $coreResource->getConnection('core_read'); 
    $select = $conn->select() 
     ->from($coreResource->getTableName('catalog/product_relation'), array('child_id')) 
     ->where('parent_id = ?', $groupedProductId); 

    return $conn->fetchCol($select); 
} 
Problemi correlati