【问题标题】:Magento if product configurable show optionsMagento 如果产品可配置显示选项
【发布时间】:2014-02-02 17:03:36
【问题描述】:

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

在每个可配置产品的 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 中没有定义像 getOptionsHtml 这样的函数(检查 Magento 1.8)。这个函数是在哪里定义的?
  • @oleksii.svarychevskyi 。我知道,但为什么要在其他页面上工作? homelist.phtml 和目录类别页面?
  • 也许这些模板被分配给了一些第三方扩展提供的块。只需在您的代码中搜索function getOptionsHtml(,您应该会找到定义它的块。
  • @oleksii.svarychevskyi 。是的,我找到了那个功能。 getLayout()->createBlock('Belvg_ColorSwatchPro_Block_Product_List_Options', 'product_list_options', array('template' => 'colorswatch/product/list/options.phtml' )); $block->setProduct($_product);返回 $block->toHtml(); } }
  • @oleksii.svarychevskyi 该功能来自 Belvg ColorSwatchPro 扩展

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


【解决方案1】:

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

magento 中的所有模板都分配给一些块。例如,在您的情况下,list.phtml 使用 Belvg_ColorSwatchPro_Block_Product_List 块。因此,如果在模板内部调用构造$this-&gt;getOptionsHtml($_product);,则意味着调用Belvg_ColorSwatchPro_Block_Product_List 块的方法。

但是当您在related.phtml 中使用$this-&gt;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();
}?>

希望对你有所帮助。

【讨论】:

  • 现在我了解了如何使用来自第三方扩展程序(如 ColorSwatchPro)的块的方式。
  • 你的回答太棒了。它就像一个魅力。再次感谢您。
  • 我现在有另一个问题。你知道,我在产品页面上有色板,下面我使用你的 sn-p 添加了带有色板的相关产品。两种颜色样本现在都可见。但主要产品的色板没有切换。知道为什么吗?如果我在同一页面中两次使用 colorswatch/product/list/options.phtml 有什么问题吗?我没有任何控制台错误。
  • 是的,即使没有控制台错误,由于两次使用colorswatch/product/list/options.phtml 可能是一些javascript 问题。我没有使用这个扩展,所以我不能说你 100% 肯定。所以最好的方法是调查模板中的 javascript 代码。
  • 我发现的只是这个 js 这是在 view.phtml 中。(产品页面。)如果我删除它,可配置产品不再有色板。但是相关产品的样本正在工作......非常奇怪。在 options.phtml 中我没有找到这个 js。
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多