Подтвердить что ты не робот

Проверка того, является ли продукт Magento дочерним по отношению к настраиваемому продукту

У меня есть следующий код, чтобы захватить список продуктов

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

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

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

Мой вопрос в том, как я могу НЕ отсылать продукты, которые являются "простыми", но относятся к родительскому "настраиваемому" продукту. (например, не показывать "Red Shirt Medium", поскольку он принадлежит к "Red Shirt" )

Я выяснил, что эта ассоциация живет в 'catalog_product_super_link', но я только что начал с Magento и, к сожалению, не знаю, как сделать фильтрацию:)

Приветствия ребята,

Крис.

4b9b3361

Ответ 1

Я не знаю прямого способа добавить это условие в коллекцию, мне тоже было бы интересно такое решение. Но вы всегда можете проверить внутри цикла для каждого продукта:

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

Ответ 2

В классе продукта есть функция isConfigurable.

Это может помочь вам.

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

Ответ 3

Я сделал что-то подобное для нашего фида Google. Этот фрагмент кода используется для проверки наследования продуктов:

$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());
}

Ответ 4

Самый быстрый способ - проверить, установлено ли значение видимости продукта "Не видно индивидуально", поскольку для этого обычно задаются простые продукты, связанные с настраиваемыми продуктами. К сожалению, я не знаю точного синтаксиса, но, надеюсь, кто-то, кто хочет перезвонить, делает это!

Ответ 5

Поскольку простые продукты, входящие в состав настраиваемых продуктов, обычно имеют значение видимости Not Visible Individually, вероятно, достаточно добавить фильтр видимости в коллекцию, который проверяет видимость продуктов в каталоге:

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

В маловероятном случае, когда результирующие продукты являются частью настраиваемого продукта, вы можете использовать метод Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild, чтобы проверить, используется ли продукт как часть настраиваемого продукта.