У меня есть следующий код, чтобы получить список продуктов
$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 и, к сожалению, не знаю, как сделать фильтрацию 🙂
Привет, ребята,
Крис.
Я не знаю прямого способа добавить это условие в коллекцию, меня тоже будет интересовать такое решение. Но вы всегда можете проверить внутри цикла для каждого продукта:
if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()))) { echo $product->getName(); }
В классе продукта есть функция, называемая isConfigurable
.
Это может помочь вам.
$product->isConfigurable(); // if its the parent object it'll be true, if its the child it'll be false.
Я сделал что-то подобное для нашего фида 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()); }
Самый быстрый способ может состоять в том, чтобы проверить, установлено ли видимость продукта «Не видимо индивидуально», поскольку для этого обычно задаются простые продукты, связанные с настраиваемыми продуктами. К сожалению, я не знаю точного синтаксиса, но, надеюсь, кто-то, кто хочет звонить, делает это!
Поскольку простые продукты, входящие в состав настраиваемых продуктов, обычно имеют видимость « Not Visible Individually
, вероятно, достаточно добавить фильтр видимости в коллекцию, который проверяет видимость продуктов в каталоге:
$collection->setVisibility(Mage::getModel('catalog/product_visibility')->getVisibleInCatalogIds());
В маловероятном случае, когда результирующие продукты являются частью настраиваемого продукта, вы можете использовать метод Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild
чтобы проверить, используется ли продукт как часть настраиваемого продукта.