繁体   English   中英

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

[英]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) ,该模板将无法工作,因为该模板已分配给没有方法getOptionsHtmlMage_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM