我试图以类似于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')
,我是否需要在这些行中添加内容?
答案 0 :(得分: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);
}
答案 1 :(得分:2)
因此,如果你想复制一些类似于基本Magento产品列表的功能,那么你就是在寻找核心的正确途径。
getPriceHtml
是抽象类Mage_Catalog_Block_Product_Abstract
中定义的方法。因此,要使用它,您需要从Mage_Catalog_Block_Product_Abstract
一个扩展您的块。isSaleable
返回false,因为您没有将某些属性加入到您的收藏中。如果您想遵循Magento的逻辑,那么您应该如何实现目标。
创建您自己的模块,或者仅阻止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;
}
现在,在您的phtml
文件中,您只需要调用此方法:
$productCollection = $this->getCustomProductCollection();
其余的代码将起作用。
答案 2 :(得分:0)
$productBlock=$this->getLayout()->createBlock("catalog/product");
echo $productBlock->getPriceHtml($_product,true);
试试这个