Ignacio Correia
Ignacio Correia

Reputation: 3668

Magento - Get product items attribute in view.phtml

I am trying to load a custom category in the catalog/category/view.phtml to archive this I use:

<?php
$_category = Mage::getModel('catalog/category')->load(47);
$_productCollection = $_category->getProductCollection();
if($_productCollection->count()) {
    foreach( $_productCollection as $_product ):
        echo $_product->getProductUrl();
        echo $this->getPriceHtml($_product, true);
        echo $this->htmlEscape($_product->getName());
    endforeach;
}
?>

I can load the URL for example, now I want to load a custom attribute for example color:

$_product->getResource()->getAttribute('color')->getFrontend()->getValue($_product)

This code does not work, I am 100% sure the color attribute is set to show in the category listing and also that the items in this category have this fields fill. I know this because this code works on list.html.

What I am doing wrong? I am working with 1.7.0.2.

The expected result is to show all COLOR attibutes from a custom cateogory in

catalog/category/view.phtml

Upvotes: 3

Views: 17104

Answers (3)

Ignacio Correia
Ignacio Correia

Reputation: 3668

I can't believe I just found the answer. Because we are not in a regular category listing we need to add the custom attributes to the collection.

Here is the code:

$_productCollection = $_category->getProductCollection()
->addAttributeToSelect('color');

Upvotes: 3

Oscprofessionals
Oscprofessionals

Reputation: 2174

  1. Make this attribute visible in listing/frontend

  2. Run Reindexing

  3. foreach( $_productCollection as $_product ): echo $_product->getProductUrl();

in this code var_dump $_product->getData(); check if this var_dump results in that specific attribute value getting displayed.

Note:

$_product->getResource()->getAttribute('color')->getFrontend()->getValue($_product)

is not a very efficient way of calling.

Upvotes: 1

Steve Robbins
Steve Robbins

Reputation: 13812

If "color" is in the flat table you should be able to

$_product->getColor();

If this attribute is not in the collection, you can either add it to the flat table by making the attribute filterable, add it in the PHP collection call

$_productCollection = $_category->getProductCollection()
    ->addAttributeToSelect('color');

Or load the product model to get all of the attributes

$_product = Mage::getModel('catalog/product')->load($_product->getId());
echo $_product->getColor();

Upvotes: 2

Related Questions