0

有没有办法呼应每个相关产品的简短描述?

我尝试使用此代码,但它不显示每个产品的描述:

<?php echo nl2br($this->getProduct()->getDescription()) ?>

<?php echo $_helper->productAttribute($_item, nl2br($_item->getShortDescription()), 'short_description') ?>

有没有办法为相关产品做到这一点?如果有人知道,请指出我正确的方向。

<?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 add to your wishlist') ?>&nbsp;<br /></p>
        <div class="form-horizontal">
        <?php foreach($this->getItems() as $_item): ?>
             <div class="control-group">
                    <label for="related-checkbox<?php echo $_item->getId() ?>" class="control-label">
                        <a class="fancybox static-thumbs pull-left" href="<?php echo $this->helper('catalog/image')->init($_item, 'small_image')->resize(500, 450); ?>" title="<?php echo $this->htmlEscape($_item->getName()) ?>" ><img src="<?php echo $this->helper('catalog/image')->init($_item, 'small_image')->resize(135, 135) ?>" width="135" height="135" alt="<?php echo $this->htmlEscape($_item->getName()) ?>" /></a>
                    </label>
<div class="controls">
<label class="checkbox">
        <?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; ?>
<?php if ($this->helper('wishlist')->isAllow()) : ?>
    <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="pull-right" title="<?php echo $this->__('Add to Wishlist') ?>" rel="tooltip"><span class="icon-check"></span></a>

<p class="product-name span6">
 <a href="<?php echo $_item->getProductUrl() ?>" class="product-title"><?php echo $this->htmlEscape($_item->getName()) ?></a>
 <br />
<?php echo nl2br($this->getProduct($_item)->getDescription()) ?>
</p>
<form action="<?php echo $this->getAddToCartUrl($_item) ?>" method="post">
<fieldset>
  <label class="product-name"><?php echo $this->__('Quantity:'); ?></label>
  <select name="qty" class="span1">
  <?php $i = 1 ?>
  <?php do { ?>
    <option value="<?php echo $i?>">
      <?php echo $i?>
      <?php $i++ ?>
    </option>
    <?php } while ($i <= (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($_item)->getMaxSaleQty()) ?>
</select>
<div class="clearfix"></div>
<button class="btn btn-danger" data-loading-text="PLease wait..."><span><?php echo $this->__('Add to Cart') ?></span></button>
<span id='ajax_loader' style='display:none'><img src='<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif')?>'/></span>            
</fieldset>
</form>
<?php endif; ?>
<?php echo $this->getPriceHtml($_item, true, '-related') ?>
</label>
</div>
    </div>
    <hr />
        <?php endforeach ?>
        </div>
    </div>
4

2 回答 2

1

你试过nl2br($this->getProduct($_item)->getShortDescription())吗?

可能是默认情况下不为相关产品加载简短描述的值。您可以尝试执行 a$_item->load($_item->getId())然后使用$_item->getShortDescription().

于 2012-12-28T13:51:06.753 回答
0

$_item->load($_item->getId())尝试并回显 shortDescription 之后,您应该查找加载相关产品的集合。在此集合中,short_description未加载该属性。

如果您加载每个产品,您会对数据库进行大量查询,这将消耗大量性能。这不是必需的。替代方案是:

$relatedProductCollection->addAttributeToSelect('short_description');

问题是要找到$relatedProductCollection.

更新:我深入研究了代码(参考是 v. 1.7.0.2):

// app/code/core/Mage/Catalog/Block/Product/List/Related.php:61
$this->_addProductAttributesAndPrices($this->_itemCollection);

// app/code/core/Mage/Catalog/Block/Product/Abstract.php:410
$collection
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())

// app/code/core/Mage/Catalog/Model/Config.php:260
$this->getAttributesUsedInProductListing()

这应该解释为:当加载“相关产品”时,所有属性都被加载,这些属性也被用于产品列表。问题可能是:默认情况下会加载 short_desciption。因此,删除load()调用并检查该属性short_description是否为“用于产品列表”。如果设置为是,我的解释是错误的。

尽管如此,加载每个产品的解决方案都是废话。

编辑:我在 Related.php 中添加了以下行

$this->_itemCollection = $product->getRelatedProductCollection()
->addAttributeToSelect('required_options') 
->addAttributeToSelect('short_description') 
->setPositionOrder() 
->addStoreFilter() 

并且使用这一行确实会回显每个产品的描述,但它是相同的描述 getProduct()->getDescription()) ?>

你需要<?php echo ($this->getProduct()->getShortDescription()) ?>

但是编辑核心代码也是改变magento行为的坏方法。这里描述了如何重写一个块,但我认为这不是必需的。http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/

于 2012-12-28T14:03:11.143 回答