Как получить сгруппированные продукты в коллекцию - PullRequest
2 голосов
/ 23 марта 2011

У меня видны только сгруппированные продукты. В моей конкретной коллекции продуктов я фильтрую простые продукты. Результаты показаны в list.phtml, но в виде простых продуктов. Что мне нужно, так это сгруппированные продукты, связанные с простым продуктом, а не с простым, показанным в списке. Я не мог понять, как каталог Magento справляется с этим.

PHP:

public function getMySpecialProducts($maxlength=null,$minlength=null,$maxwidth=null,$minwidth=null,$maxheight=null,$minheight=null){

        $products = Mage::getModel('catalog/product');
        $_collection = $products->getCollection();
        $_collection->addAttributeToSelect('*')
        ->addAttributeToFilter('size_length', array('lteq' => ''.$maxlength.''))
        ->addAttributeToFilter('size_length', array('gteq' => ''.$minlength.''))
        ->addAttributeToFilter('size_width', array('lteq' => ''.$maxwidth.''))
        ->addAttributeToFilter('size_width', array('gteq' => ''.$minwidth.''))
        ->addAttributeToFilter('size_height', array('lteq' => ''.$maxheight.''))
        ->addAttributeToFilter('size_height', array('gteq' => ''.$minheight.''))
        ->setPage(1, 10)
        ->addCategoryFilter($this->getMySpecialCategory())
        ->load();

        return $_collection;
    }

вывод phtml:

$_productCollection = $this->getMySpecialProducts(
    $range["length"]["max"],$range["length"]["min"],
    $range["width"]["max"],$range["width"]["min"],
    $range["height"]["max"],$range["height"]["min"]
);

$listView = $this->getLayout()->createBlock('catalog/product_list')
            ->setTemplate('catalog/product/list.phtml')
            ->setCollection($_productCollection);
$this->getLayout()->getBlock('content')->append($listView);
echo $listView->toHTML();

Любая помощь оценена. Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

решение: 2 отдельные коллекции, 1-е простые продукты -> получить родительские идентификаторы, 2-е - сгруппировать в зависимости от идентификатора.

добавлено следующее к коду выше. PHP:

public function getGroupCollection($groupId){
    $str = array();
    foreach($groupId as $value){
        foreach($value as $id){
            array_push($str, array('attribute'=>'entity_id', 'eq' => ''.$id.''));
        }
    }

    $products = Mage::getModel('catalog/product');
    $_groupCollection = $products->getCollection();
    $_groupCollection->addAttributeToSelect('*');
    $_groupCollection->addAttributeToFilter('type_id', array('eq' => 'grouped'));
    $_groupCollection->addAttributeToFilter($str);
    $_groupCollection->addCategoryFilter($this->getFormatfinderCategory())
    ->load();

    return $_groupCollection;
}

интерфейс:

// get ID's of Parent Product (grouped products) from 1st collection
$parentProductIds = array();
foreach($_productCollection as $product){
    $product->loadParentProductIds();
    array_push($parentProductIds, $product->getParentProductIds());
}

создать HTML-блок:

$listView = $this->getLayout()->createBlock('catalog/product_list')
            ->setTemplate('catalog/product/list.phtml');

$_group = $this->getGroupCollection($parentProductIds);
$listView->setCollection($_group);

$this->getLayout()->getBlock('content')->append($listView);
echo $listView->toHTML();

Конечно, это не лучшее решение, так как у меня оно работает нормально.

2 голосов
/ 23 марта 2011

Не могли бы вы попробовать следующие коды:

$collectionGrouped = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter('type_id', array('eq' => 'grouped'));

или

// Get the grouped product a simple product belongs to
$simpleProduct->loadParentProductIds();
$parentProductIds = $simpleProduct->getParentProductIds();

или

$productCollection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('type_id', array('eq' => 'grouped'))
->addAttributeToFilter('size_length', array('lteq' => ''.$maxlength.''))
->setPage(1, 10)
->addCategoryFilter($this->getMySpecialCategory())
->load();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...