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. price 函数getPriceHtml是在抽象类中定义的方法Mage_Catalog_Block_Product_Abstract。所以要使用它,你需要从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 回答