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())か?

デフォルトでは、関連製品の簡単な説明の値が読み込まれていない可能性があります。$_item->load($_item->getId())を実行してから、を使用することができます$_item->getShortDescription()

于 2012-12-28T13:51:06.753 に答える
0

試してshortDescriptionをエコーし​​た後$_item->load($_item->getId())、関連する製品がロードされているコレクションを探す必要があります。このコレクションでは、属性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が「製品リストで使用されている」かどうかを確認します。これがyesに設定されている場合、私の解釈は間違っています。

それでも、すべての製品をロードすることによる解決策はがらくたです。

編集:私は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 に答える