我需要在我的相关产品上显示产品选项:
在每个可配置产品的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
块的方法。
但是当您在 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();
}?>
希望对您有帮助。
我创建了一个自定义主题,并且在 phtml 文件中列出了产品,我添加了此代码获取样本选项,但我没有使用此获得任何结果,还有什么我需要添加的吗 getTypeId() == \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE) { $swatchBlock = $this->getLayout()->createBlock(\Magento\Swatches\Block\Product\Renderer\Listing\Configurable::class); echo $swatchBlock->setProduct($product)->toHtml(); } ?>
</div>