2

list.phtmlのグリッド形式と同様の方法で、任意のページにあるカテゴリの商品を出力しようとしています。

私は次のスニペットを持っています:

$category = Mage::getModel('catalog/category');
$category->load(17);
$_productCollection = $category->getProductCollection()
                               ->addAttributeToSelect('name');
$_helper = Mage::helper('catalog/output');

それは私に製品コレクションを与え、それを繰り返します:

foreach ($_productCollection as $_product): 

<!-- This works -->
<h2 class="product-name">
    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>">
        <?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?>
    </a>
</h2>

<!-- This does not -->
<?php echo $this->getPriceHtml($_product, true) ?>

<!-- This just returns out of stock -->
<div class="actions">
    <?php if($_product->isSaleable()): ?>
        <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')">
            <span><span><?php echo $this->__('Add to Cart') ?></span></span>
        </button>
    <?php else: ?>
        <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
    <?php endif; ?>                                                    
</div>

endforeach;

一番上にある製品コレクションを取得するための呼び出しを除いて、上記のコードはlist.phtmlから借用したものです。

価格と販売可能な情報が利用できない理由を誰かに教えてもらえますか?それで、なぜアイテムが在庫切れに見えるのですか?以前は製品名が利用できなかったときに追加->addAttributeToSelect('name')する必要がありましたが、それらの線に沿って何かを追加する必要がありますか?

4

3 に答える 3

4

phtmlファイルで以下のコードを試してください。

$category = Mage::getModel('catalog/category')->load(3);
$_productCollection = $category->getProductCollection()->addAttributeToSelect('*'); 
$productBlock=$this->getLayout()->createBlock("catalog/product");
foreach($_productCollection  as $_product)
{
    //for get the price of product 
    if($_product->isSaleable()) //this will check if product is in stock
       echo $productBlock->getPriceHtml($_product,true);
}
于 2012-09-27T11:01:23.997 に答える
2

したがって、製品リストのように、基本的なMagentoのものと同様の機能をコピーしたい場合は、コアを調べる正しい道を進んでいます。

  1. 価格関数getPriceHtmlは、抽象クラスで定義されたメソッドMage_Catalog_Block_Product_Abstractです。したがって、それを使用するには、ブロックを1つから拡張する必要がありますMage_Catalog_Block_Product_Abstract
  2. isSaleableコレクションに結合された属性の一部がなかったため、falseが返されました。

Magentoのロジックに従いたい場合は、次のようにして目標を達成する必要があります。

  1. 独自のモジュールを作成するか、でブロックしlocal/Mage/Catalog/Block/YourBlock.phpます。このブロックは拡張する必要がありMage_Catalog_Block_Product_Abstractます。その後、このブロックにメソッドを作成しますgetCustomProductCollection()

    pubcli funciton getCustomProductCollection()
    {
        if (is_null($this->_productCollection)) {
            $category = Mage::getModel('catalog/category')->load(17);
            $layer = $this->getLayer();
            $layer->setCurrentCategory($category);
            $this->_productCollection = $layer->getProductCollection();
        }
        return $this->_productCollection;
    }
    
  2. これで、phtmlファイルで次のメソッドを呼び出すだけです。

    $productCollection = $this->getCustomProductCollection();
    

そして、残りのコードは機能します。

于 2012-09-27T12:30:38.000 に答える
0
$productBlock=$this->getLayout()->createBlock("catalog/product");
echo $productBlock->getPriceHtml($_product,true);

これを試して

于 2012-10-10T19:10:53.567 に答える