我有以下代码来获取产品列表
$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并且不知道如何进行过滤:)
干杯,
克里斯。
答案 0 :(得分:30)
我不知道将这个条件添加到集合中的直接方法,我也对这样的解决方案感兴趣。但是你可以随时检查每个产品的循环内容:
if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId())))
{
echo $product->getName();
}
答案 1 :(得分:5)
产品类中有一个名为isConfigurable
的函数。
这可能对你有所帮助。
$product->isConfigurable();
// if its the parent object it'll be true, if its the child it'll be false.
答案 2 :(得分:5)
我为谷歌Feed做了类似的事情。 这段代码是我用来检查产品继承的代码:
$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());
}
答案 3 :(得分:2)
最快的方法可能是检查产品的可见性是否设置为“单独不可见”,因为与可配置产品关联的简单产品通常设置为此。不幸的是,我不知道确切的语法,但希望其他愿意插入的人呢!
答案 4 :(得分:1)
由于属于可配置产品的简单产品通常具有Not Visible Individually
的可见性值,因此可能只需在集合中添加可见性过滤器,以检查目录中产品的可见性:
$collection->setVisibility(Mage::getModel('catalog/product_visibility')->getVisibleInCatalogIds());
在不太可能出现的产品属于可配置产品的情况下,您可以使用Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild
方法检查产品是否用作可配置产品的一部分。