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

问题描述 投票:0回答:2

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

在每个可配置产品的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();
    }
}
php html magento e-commerce shopping-cart
2个回答
0
投票

所以现在我将尝试向您解释为什么会这样。

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

希望对您有帮助。


0
投票

我创建了一个自定义主题,并且在 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>
© www.soinside.com 2019 - 2024. All rights reserved.