0
votes

I have this code on list_single.phtml, on my product page. The code shows 15 products from the category id 100. But I want show the products from the category of the product. When I change ->addCategoryFilter($_category) to ->addCategoryFilter(4), it doesn't work. Whats the problem?

<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>
2
$_category is resource and in second condition you are only passing integer value . First load the data of category and then pass category objectmjdevloper

2 Answers

0
votes

Just so I'm clear your trying to load the category of a product and then show products relating to that category?

Remember a product can be part of many categories in the relationship so this will return an array. What do you get from var_dump() when you pass the categories loaded by product?

$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
      }
} 
0
votes

Try using catalog/product model

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