【问题标题】:Magento Related Product don't show upMagento 相关产品不显示
【发布时间】:2012-11-05 15:24:33
【问题描述】:

我正在尝试让相关产品块显示在我的产品详细信息页面上。 我在相应的 .phtml 文件中有以下代码

<?php

<?php echo "Related product block"?>
<?php if($this->getItems()->getSize()): ?>
<div class="block block-related">
<div class="block-title">
    <strong><span><?php echo $this->__('Related Products') ?></span></strong>
</div>
<div class="block-content">
    <p class="block-subtitle"><?php echo $this->__('Check items to add to the cart or')  ?>&nbsp;<a href="#" onclick="selectAllRelated(this); return false;"><?php echo $this->__('select all') ?></a></p>
    <ol class="mini-products-list" id="block-related">
    <?php foreach($this->getItems() as $_item): ?>
        <li class="item">
            <?php if(!$_item->isComposite() && $_item->isSaleable()): ?>
                <?php if (!$_item->getRequiredOptions()): ?>
                    <input type="checkbox" class="checkbox related-checkbox" id="related-checkbox<?php echo $_item->getId() ?>" name="related_products[]" value="<?php echo $_item->getId() ?>" />
                <?php endif; ?>
            <?php endif; ?>
            <div class="product">
                <a href="<?php echo $_item->getProductUrl() ?>" title="<?php echo     $this->htmlEscape($_item->getName()) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(50) ?>" width="50" height="50" alt="<?php echo $this->htmlEscape($_item->getName()) ?>" /></a>
                <div class="product-details">
                    <p class="product-name"><a href="<?php echo $_item->getProductUrl() ?>"><?php echo $this->htmlEscape($_item->getName()) ?></a></p>
                    <?php echo $this->getPriceHtml($_item, true, '-related') ?>
                    <?php if ($this->helper('wishlist')->isAllow()) : ?>
                        <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a>
                    <?php endif; ?>
                </div>
            </div>
        </li>
    <?php endforeach ?>
    </ol>
    <script type="text/javascript">decorateList('block-related', 'none-recursive')</script>
</div>
<script type="text/javascript">
//<![CDATA[
$$('.related-checkbox').each(function(elem){
    Event.observe(elem, 'click', addRelatedToProduct)
});

var relatedProductsCheckFlag = false;
function selectAllRelated(txt){
    if (relatedProductsCheckFlag == false) {
        $$('.related-checkbox').each(function(elem){
            elem.checked = true;
        });
        relatedProductsCheckFlag = true;
        txt.innerHTML="<?php echo $this->__('unselect all') ?>";
    } else {
        $$('.related-checkbox').each(function(elem){
            elem.checked = false;
        });
        relatedProductsCheckFlag = false;
        txt.innerHTML="<?php echo $this->__('select all') ?>";
    }
    addRelatedToProduct();
}

function addRelatedToProduct(){
    var checkboxes = $$('.related-checkbox');
    var values = [];
    for(var i=0;i<checkboxes.length;i++){
        if(checkboxes[i].checked) values.push(checkboxes[i].value);
    }
    if($('related-products-field')){
        $('related-products-field').value = values.join(',');
    }
}
//]]>
</script>

代码上方的回声显示在我的页面上。这当然证明我正确地实现了这个块。

只是 if 语句中的所有内容都没有显示。

我花了一些时间寻找解决方案,并尝试重建索引,我的相关产品在前端可见。

有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: php magento


    【解决方案1】:

    Magento 将始终为条件返回一个低数字或 0:

    $this->getItems()->getSize()
    

    如果部分/所有相关产品都在用户的购物车中,则项目将显示为好像丢失了。

    为了防止这种行为,复制核心 Magento 'Related' 类:

    /app/code/core/Mage/Catalog/Block/Product/List/Related.php
    

    到本地:

    /app/code/local/Mage/Catalog/Block/Product/List/Related.php
    

    然后注释掉 if 语句中的以下几行:

    if (Mage::helper('catalog')->isModuleEnabled('Mage_Checkout')) {
        //mod - show all related products, even if they have been added to the cart
        //Mage::getResourceSingleton('checkout/cart')->addExcludeProductFilter($this->_itemCollection,
        //    Mage::getSingleton('checkout/session')->getQuoteId()
        //);
        $this->_addProductAttributesAndPrices($this->_itemCollection);
    }
    

    【讨论】:

    • 虽然不推荐这种覆盖,而且值得花时间在自定义模块中创建覆盖,但这个答案确实解决了我的问题。所以谢谢!
    【解决方案2】:

    在你的 4 行:

    <?php if($this->getItems()->getSize() > 0 ? true : false) ?>
    

    试试看。

    【讨论】:

    • 太棒了,它正在工作,但我没有选择产品的复选框。你知道为什么复选框没有出现在相关产品中吗?
    • 此复选框代码对我不起作用。请检查这个 isComposite() && $_item->isSaleable()): ?> getRequiredOptions()): ?>
    【解决方案3】:

    在代码类型的顶部

    var_dump($this->getItems()->getSize()) // does this print NUll, False or > 0
    

    如果上面的代码打印NULL或false或小于1,那么做

    print_r($this->getItems());
    

    如果以上都没有打印出你期望的信息,那么检查你的块 getItems() 方法

    if($this-&gt;getItems()-&gt;getSize()): 的结束 IF 在哪里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多