Magento product page : how to display other products from same category

Magento comes with a lot of product relationship features :  implemented as selective lists maintained for each product by the shop owner, related / cross selling and up selling backend features allow some sort of manual product linking that displays product associations on the front end. For example related products are displayed by default in the product page right column, while upsell / crosssell products are displayed on the shopping cart page. These 3 types of product associations are well explained on inchoo's blog, and  on magento 's knowledge base you'll find user instructions on how to setup   product relationship in the backend.

What we aim here is to setup an automatic  display of related products on a product view page, via the categories they belong to. We build two loops : one that gets categories the product belongs to, and another one inside that gets products of each category.

How to setup category related products in Product view :

  1. add the following code somewhere in default\template\catalog\product\view.phtml
  2. Configure the category query according to your catalog by uncommenting the following :
    • ->setPage(1, 1) : selects only one category
    • ->addFieldToFilter('level',"3") : selects only 3rd level categories
    • ->addFieldToFilter('parent_id',"3") : select only child categories of no 3
    • ->setOrder("level") : combined by setPage, returns the lowest level category
  3. please that the product loop uses the $_product variable, which can be dangerous because this name is widely used. We use it here for comodity reasons because I just took toe display code from Magento's product list view
if ($_product) {
  // get collection of categories this product is associated with
  $categories =$_product->getCategoryCollection()
  //  ->setPage(1, 1)
// if the product is associated with any category
if ($categories->count()) 
foreach ($categories as $_category)
  $cur_category = Mage::getModel('catalog/category')->load($_category->getId());

Dans la même collection :getName()?>

addCategoryFilter($_category) ->addAttributeToSelect('small_image'); foreach ( $products as $productModel ) { $_product = Mage::getModel('catalog/product')->load($productModel->getId()); $width=135; $height=135; $_imageUrl = $this->helper('catalog/image')->init($productModel, 'small_image')->resize($width, $height); ?>
width="" height=""/> getPriceHtml($_product, true) ?> isSaleable()): ?>
__('Out of stock') ?>
getShortDescription()) ?> __('Learn More') ?>
22 replies
  1. nancy
    nancy says:

    Great ...but one issue,,,how i can use this in my sidebar..? it is not working if i move the code from view.phtml

  2. Saurabh
    Saurabh says:

    Hello Paul,
    Can you help me…
    I need to display all enabled product in category view page in Magento.


  3. pankaj
    pankaj says:

    I want to show only "in stock" products on one page & both "in stock" and "out of stock" products on other page from same category. How can i do that...? Please help me on this. Its really an urgent. Waiting for your positive reply.

  4. Deter
    Deter says:

    If you want to get random products from same category, put at line 21 this code:


  5. admin
    admin says:

    hi nigel, common magento query limit statement : add the following to line 21, should do the job


  6. nigel
    nigel says:

    also to help anyone who may have issues - check the code for any errant formatting after pasting the code - specifically check where the ' are supposed to be in areas like
    __('Out of stock') ?>

  7. nigel
    nigel says:

    hi i have teh code installed and working, but i have a large number of products per category and as a result it takes a while to load. Do you know how to limit the query to say pick out 4 items and return those

  8. How?
    How? says:

    How shall this work out, when I only paste the code above into the view.phtml there is the opening tag <?php missing, so I would definitely cause a php error as the last on that page is a closing tag. So, I added the missing php tag before the code right after the last div of the page and the whole product page disappears. I do not know what version you worked with, this is still with and a custom template, but this should also work in any custom view phtml but sadly does not.

  9. Justin
    Justin says:

    This works great, except for the fact that it breaks the actual product page you're on. All the products now share the same name (But they all have their correct title tag and description...), and they all have the same add to cart link.

    Halfway there!

    • admin
      admin says:

      Well I don't experience that bug : are you sure you put the code at the bottom of category/product/view.phtml

      otherwise make sure you don't mix the $_product page variables with the new loop that also uses $_product variables : if you're not lazy like I am just change the variable name inside the loop and that might solve what looks like a variable name issue


Trackbacks & Pingbacks

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *