如何在Magento电子商务中获取特定类别的产品

10

我希望能够获得与当前产品相同类别的随机产品列表,以在产品视图中显示 - 到目前为止,我找到的全部是:

Magento按类别分类的产品

有谁知道如何做到这一点吗?

6个回答

23

你基本上需要加载类别,获取产品集合,然后进行适当的筛选。

$products = Mage::getModel('catalog/category')->load($category_id)
 ->getProductCollection()
 ->addAttributeToSelect('*')
 ->addAttributeToFilter('status', 1)
 ->addAttributeToFilter('visibility', 4)
 ->addAttributeToFilter('special_price', array('neq' => ""))
 ->setOrder('price', 'ASC')
 ;

1
也许这里最好的解决方案是,如果您能在此处包含完整的带代码答案,那将更好。以防万一URL停止工作。 - todd
这个解决方案可能比被接受的答案更有效,因为它不必遍历整个产品范围,只需要处理属于该类别的产品。 - dayuloli
1
链接未找到。你能检查一下吗? - Kailas

18

以下是从特定类别获取产品的代码:

$productCollection = Mage::getResourceModel('catalog/product_collection')
                           ->addCategoryFilter($category);

7
我最终所做的是在app/design/frontend/default/theme_name/template/catalog/product/list_random.phtml中执行以下操作:
<?php 
$_categories=$this->getCurrentChildCategories();

$_category = $this->getCurrentCategory();
$subs = $_category->getAllChildren(true);
$result = array();
foreach($subs as $cat_id) {
    $category = new Mage_Catalog_Model_Category();
    $category->load($cat_id);
    $collection = $category->getProductCollection();
    foreach ($collection as $product) {
        $result[] = $product->getId();
    }

}
shuffle($result);
?>

这将获得一个产品ID数组。您可以循环遍历它们并使用以下代码动态创建产品:

<?php 
$i=0; 
foreach ($result as $_product_id){ 
    $i++;
    $_product = new Mage_Catalog_Model_Product();
    $_product->load($_product_id);
    //do something with the product here
}?>

然后,在CMS中创建一个静态块,并使用以下内容。
{{block type="catalog/navigation" template="catalog/product/list_random.phtml"}} 

最后,在目录->管理分类部分,选择分类,然后选择显示设置选项卡。将显示模式切换为“静态块和产品”,然后从下拉列表中选择您的块。

就这样。


1
只是一个提示:上面的代码将获取当前类别和子类别中的所有产品。将其仅限于当前类别应该非常简单。 - Dan Klassen
请注意:模板文件中不应包含“复杂逻辑”。您应该创建具有特定方法的代码块,以检索过滤产品,并在模板中使用它。此外,您应该使用@chapagain方法或Mage_Catalog_Model_Category :: getProductCollection(),这两个方法基本上是相同的,但它们还会添加STORE VIEW过滤器。 - xyz

3
$products = Mage::getModel('catalog/category')->load(category_id); //put your category id here
       $productslist = $products->getProductCollection()->addAttributeToSelect('*');
       foreach($productslist as $product)
       {
        echo 'price: ' . $product->getPrice() . '<br/>';
       }

这是迄今为止最方便的代码,可以获取特定类别的产品详细信息。希望能对您有所帮助。


2
在这种情况下,您应该通过调用 Mage::getModel('catalog/product') 实例化模型,因为这样您将获得一个已配置的对象实例,它还扩展了任何已配置的模块。
如果您使用 new Mage_Catalog_Model_Product() 这样的方式,那么它将忽略模块并绕过 Magento API。

0
这段代码将帮助您从类别ID 2中获取产品。此外,它还使用了一个模板文件list_home.phtml来进行产品列表显示。
 echo $this->getLayout()->createBlock("catalog/product_list")
    ->setCategoryId(2)->setTemplate("catalog/product/list_home.phtml")->toHtml();

list_home.phtml

<?php
$this->getChild('toolbar')->setCurrentMode('list'); //uses list mode
$_productCollection = $this->getLoadedProductCollection();
$_helper = $this->helper('catalog/output');
    ?>

    <?php if (!$_productCollection->count()): ?>
        <p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
    <?php else: ?>

--use code for listing---

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接