我需要在相关产品上显示产品选项:
在每个可配置产品的list.phtml中,我使用以下代码显示其选项(选项表示颜色等属性):
<?php if($_product->getTypeId() == 'configurable'): ?>
<?php echo $this->getOptionsHtml($_product); ?>
<?php endif; ?>
结果:没什么!!!
这里有什么问题?为什么在related.phtml中不起作用?
getOptionsHtml - 此功能来自Belvg ColorSwatchPro扩展程序。
<?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();
}
}
答案 0 :(得分:1)
所以现在我将尝试以这种方式解释你为什么会这样做。
magento中的所有模板都分配给某些块。例如,在您的情况下list.phtml
使用Belvg_ColorSwatchPro_Block_Product_List
块。因此,如果在模板内部调用构造$this->getOptionsHtml($_product);
,则意味着您调用Belvg_ColorSwatchPro_Block_Product_List
块的方法。
但是当您在related.phtml中使用$this->getOptionsHtml($_product)
时,它不起作用,因为此模板已分配给没有方法Mage_Catalog_Block_Product_List_Related
的块getOptionsHtml
。
为了使这个可行,我可以告诉你最简单的方法。在related.phtml模板内部而不是
<?php if($_product->getTypeId() == 'configurable'): ?>
<?php echo $this->getOptionsHtml($_product); ?>
<?php endif; ?>
使用
<?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();
}?>
希望能帮助你。