I need to show product options on my related products:
In list.phtml for every configurable products i show its options (option means an attribute like colour) with this code:
<?php if($_product->getTypeId() == 'configurable'): ?>
<?php echo $this->getOptionsHtml($_product); ?>
<?php endif; ?>
Result: nothing!!!
What is wrong here? Why in related.phtml is not working?
getOptionsHtml - This function is from Belvg ColorSwatchPro extension.
<?php
class Belvg_ColorSwatchPro_Block_Product_List extends Mage_Catalog_Block_Product_List
{
public function getOptionsHtml($_product)
{ die('sss');
$block = $this->getLayout()->createBlock(
'Belvg_ColorSwatchPro_Block_Product_List_Options',
'product_list_options',
array('template' => 'colorswatch/product/list/options.phtml'
));
$block->setProduct($_product);
return $block->toHtml();
}
}
So now I will try to explain you why it is in this way.
All templates in magento are assigned to some blocks. For example in your case list.phtml
uses Belvg_ColorSwatchPro_Block_Product_List
block. So if inside template you call construction $this->getOptionsHtml($_product);
it means that you call the method of Belvg_ColorSwatchPro_Block_Product_List
block.
But when you use $this->getOptionsHtml($_product)
in related.phtml it doesn't work because this template is assigned to block Mage_Catalog_Block_Product_List_Related
which has no method getOptionsHtml
.
To make that workable, I can advise you the easiest way. Inside related.phtml template instead of
<?php if($_product->getTypeId() == 'configurable'): ?>
<?php echo $this->getOptionsHtml($_product); ?>
<?php endif; ?>
use
<?php if($_item->getTypeId() == 'configurable') {
$block = $this->getLayout()->createBlock(
'Belvg_ColorSwatchPro_Block_Product_List_Options',
'product_list_options',
array('template' => 'colorswatch/product/list/options.phtml'
));
$block->setProduct($_item);
echo $block->toHtml();
}?>
Hope that will help you.