Magento 按类别显示产品

Magento Show products by category

我的产品页面 list_single.phtml 上有此代码。该代码显示类别 ID 100 中的 15 种产品。但我想显示产品类别中的产品。 当我将 ->addCategoryFilter($_category) 更改为 ->addCategoryFilter(4) 时,它不起作用。有什么问题?

<div class="products_single newProductsContainer container">
    <?php           

 $_helper = $this->helper('catalog/output');
 $_category = Mage::getModel('catalog/category')->load(100);
 $_productCollection = Mage::getResourceModel('reports/product_collection')
                       ->addAttributeToSelect('*')
                       ->addCategoryFilter($_category)
                       ->setVisibility(array(2,3,4));
 $_productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));                  
 $_productCollection->setPage(1, 15);

        $i=0; $u=0; 
        foreach ($_productCollection as $_product): 
            $u++; 
            if ($u % 15 == 1) {echo '<div class="row productsrow">';}
    ?>
            <div class="item col-md-3 col-xs-12 col-sm-6">
                <?php $dynamicproductload = " "; ?>
                <a class="product-image visible-xs visible-sm" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>">
                    <img id="product-collection-image-<?php echo $_product->getId(); ?>" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(210,150); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
                </a>
                <a class="product-image visible-md visible-lg" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>">
                    <img id="product-collection-image-<?php echo $_product->getId(); ?>" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(210,150); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
                </a>
                <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2>
                <?php echo $this->getPriceHtml($_product, true) ?>

                   <?php
                        if ($this->getChild('name.after')) {
                            $_nameAfterChildren = $this->getChild('name.after')->getSortedChildren();
                            foreach ($_nameAfterChildren as $_nameAfterChildName) {
                                $_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
                                $_nameAfterChild->setProduct($_product);
                                echo $_nameAfterChild->toHtml();
                            }
                        }
                    ?>
        </div>
        
        <?php 
            $i++; 
            if ($i % 15 == 0) { echo "</div>";  } 
        ?>
                
        <?php endforeach; ?>
        </div>
        </div>
        <?php else: ?>
<?php endif; ?>
</div>
</div>

所以我很清楚你试图加载产品类别然后显示与该类别相关的产品?

请记住,产品可以是关系中许多类别的一部分,因此这将 return 一个数组。当您通过产品加载的类别时,您从 var_dump() 中得到什么?

$categories = $product->getCategoryIds();
foreach ($categories as $category_id) {
    $_category = Mage::getModel('catalog/category')->load(category_id);
    $_productCollection = Mage::getResourceModel('reports/product_collection')
                   ->addAttributeToSelect('*')
                   ->addCategoryFilter($_category)
                   ->setVisibility(array(2,3,4));

      // Now do enter code here what you need to do with this object
      foreach ($_productCollection as $_product){
        // Do your logic here
      }
} 

尝试使用 catalog/product 模型

    $_productCollection = Mage::getModel('catalog/product')
->getCollection()->addAttributeToSelect('*')
->addCategoryFilter($_category)->setVisibility(array(2,3,4));