2011-12-20 27 views
11

Ürün sonuçları arasında geçiş yapıyorum ve ürün gruplandırılmış bir ürünse, o gruba tüm ürünleri almak istiyorum. Bunu yapmamın:Magento - Ürün Grubu ile ilişkili ürünleri nasıl alabilirim?

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

cevap

29

yılında: o phtml dosya türüne Mage_Catalog_Block_Product_View_Type_Grouped ait olduğu

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

, gidebiliriz:

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

Onların bu kullandığını göreceksiniz

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

ve bakın Ben,

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

tamamen kodunuzu optimize etmek olsaydı:

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

yüzden güvenle ürün nesnesi döndüren $this->getProduct() varsayabiliriz ve böylece gibi $product değişken ile değiştirin: Mage_Catalog_Block_Product_View_Type_Grouped::getAssociatedProducts() yapar d bu gibi yazmak':

<?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

sayesinde bu işe gidebilir ... Tüm ürünler üzerinde yinelemek istiyorum ve ilişkili ürünler üzerinde yinelenen gruplandırılırsa - sadece gruplanmış ürünle ilişkili ürünler değil, yalnızca tüm ürünleri istiyorum. 'Optimize' kodunuz normal tek ürünler içermez, doğru muyum? – Owen

+0

Doğru, yalnızca gruplandırılmış ürünlerden oluşan bir koleksiyon elde ederdi. Kullanmak istediğiniz şey $ product-> isGrouped(). Tüm ürünlerden oluşan koleksiyonunuz ile birlikte kullanın: foreach ($ ürün olarak $ ürün) {if ($ product-> isGrouped()) {/ * İlgili ürün koleksiyonunu alın * /}} –

0

türüne göre ürün koleksiyonunu almak için:

Eğer ilgili ürünlerin kimlikleri almak için sadece istiyorsanız
$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

Önemli Hata: Tanımlanmamış yönteme çağrı yapın Mage_Catalog_Model_Resource_Eav_Mysql4_Product: : 1355 satırında /var/www/vhosts/mysite.com/httpdocs/app/code/core/Mage/Catalog/Model/Product.php adresindeki getParentProductIds() öğesi – Owen

6

Veya, (o çok daha hızlıdır) aşağıdaki yöntemi kullanabilirsiniz:

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); 
} 
İlgili konular