Magento如果产品可配置显示选项

时间:2014-02-02 17:03:37

标签: php html magento e-commerce shopping-cart

我需要在相关产品上显示产品选项:

在每个可配置产品的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();
    }
}

1 个答案:

答案 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();
}?>

希望能帮助你。