The block class Mage_Catalog_Block_Product_View_Attributes
expects to get a product object out of the registry:
function getProduct()
{
if (!$this->_product) {
$this->_product = Mage::registry('product');
}
return $this->_product;
}
A PLP doesn't register a product (since there are many), so the attributes block has no data to work with.
I tried setting a product in the createBlock call
, but it looks like Mage_Catalog_Block_Product_View_Attributes
is not written in a way that makes this possible. This is the code that does not work for me.
<?php
echo $this->getLayout()->createBlock('catalog/product_view_attributes')
->setProduct($_product->load($_product->getId()))
->setTemplate('catalog/product/view/attributes.phtml')
->toHtml();
?>
Note that $_product
here comes from the main loop in catalog/product/list.phtml. Since it is a member of a collection rather than a directly loaded product object, I had to load it explicitly. This comes with a significant performance hit.
You may be able to customize your Magento to make this work, but I don't think it is the best approach. It would be better to load the attributes that you want to see with the PLP product collection, i.e. via their "Used in Product Listing" setting. Then adapt the catalog/product/view/attributes.phtml template content for use in your PLP template, using the $_product
object that is available.