Magento - как получить сопутствующие товары группы товаров? - PullRequest
11 голосов
/ 20 декабря 2011

Я перебираю результаты по продуктам, и если продукт является сгруппированным продуктом, я хочу получить все продукты в этой группе.Я делаю это:

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

Ответы [ 3 ]

30 голосов
/ 21 декабря 2011

В:

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

Вы увидите, что они используют это:

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

Поскольку этот файл phtml имеет тип Mage_Catalog_Block_Product_View_Type_Grouped, мы можем перейти к:

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

и увидите, что Mage_Catalog_Block_Product_View_Type_Grouped::getAssociatedProducts() делает это:

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

Таким образом, мы можем с уверенностью предположить, что $this->getProduct() возвращает объект продукта, и заменить его переменной $product следующим образом:

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

Если бы я полностью оптимизировал ваш код, я бы написал так:

<?php
    $products = Mage::getModel('catalog/product')
        ->getCollection()
        ->addAttributeToFilter('type_id', array('eq' => 'grouped'));
    foreach ($products as $product) {
        $associatedProducts = $product->getTypeInstance()->getAssociatedProducts($product);
        // Do something with $associatedProducts
    }
6 голосов
/ 28 сентября 2012

Или, если вы хотите просто получить идентификаторы связанных продуктов, вы можете использовать следующий метод (это намного быстрее):

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);
}
0 голосов
/ 21 декабря 2011

Получить товар по типу:

$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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...