[英]Magento if product configurable show options
我需要在相关产品上显示产品选项:
在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();
}
}
因此,现在我将尝试向您解释为什么会这样。
magento中的所有模板都分配给了某些块。 例如,在您的案例中list.phtml
使用Belvg_ColorSwatchPro_Block_Product_List
块。 因此,如果在模板内部调用构造$this->getOptionsHtml($_product);
这意味着您将调用Belvg_ColorSwatchPro_Block_Product_List
块的方法。
但是,当您在Mage_Catalog_Block_Product_List_Related
中使用$this->getOptionsHtml($_product)
,该模板将无法工作,因为该模板已分配给没有方法getOptionsHtml
块Mage_Catalog_Block_Product_List_Related
。
为了使它可行,我可以建议您最简单的方法。 里面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();
}?>
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.