Php 无法从Magento产品集合中检索价格信息
我试图以类似于list.phtml的网格格式的方式在任意页面上输出某个类别的产品 我有以下片段:Php 无法从Magento产品集合中检索价格信息,php,magento,magento-1.7,Php,Magento,Magento 1.7,我试图以类似于list.phtml的网格格式的方式在任意页面上输出某个类别的产品 我有以下片段: $category = Mage::getModel('catalog/category'); $category->load(17); $_productCollection = $category->getProductCollection() ->addAttributeToSelect('name'); $_he
$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;
foreach($\u产品集合作为$\u产品):
请在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);
}
因此,如果您想复制一些类似于基本Magento产品列表中的功能,那么您就走上了研究core的正确道路
price函数getPriceHtml
是在抽象类Mage\u Catalog\u Block\u Product\u abstract
中定义的方法。因此,要使用它,您需要从Mage\u Catalog\u block\u Product\u Abstract
one扩展块
isSaleable
返回false,因为您没有将某些属性加入到集合中
如果你想遵循Magento的逻辑,以下是你应该如何实现你的目标
创建自己的模块,或者只在local/Mage/Catalog/block/YourBlock.php
中阻塞。此块应扩展Mage\u Catalog\u block\u Product\u Abstract
。然后在此块中创建一个方法getCustomProductCollection()
:
现在,在phtml
文件中,您只需调用此方法:
$productCollection = $this->getCustomProductCollection();
代码的其余部分也可以工作
$productBlock=$this->getLayout()->createBlock("catalog/product");
echo $productBlock->getPriceHtml($_product,true);
试试这个Dude你有没有在没有addAttributeToSelect
方法的情况下试过。我认为ProductCollection提供了所有基本属性。如果没有,我恐怕你必须对你需要的每一个属性都做addAttributeToSelect
。@SAM是的,试过了->addAttributeToSelect('price')/>addAttributeToSelect('inventory')/>addAttributeToSelect('saleable'),但它们只是暗中捅了一刀。也找不到引用这些调用的文档…有一件事您可以交叉检查。您的Phtml必须是catalog/product\u list
类的实例&您必须使用$\u productCollection=$this->getLoadedProductCollection()代码>图像目录、模型、产品列表的方法。如果这也不起作用,那么我建议您在本地模块中模拟一个类,如Mage\u Catalog\u Model\u Product\u list
,然后您可以根据需要定制收藏加载。这是我过去做过的事情。所以它必须起作用。希望它能帮上忙只是一个建议-你不应该在循环中加载产品,特别是如果你已经有了产品集合;您应该只将所需的数据包含到集合中;另外,从Magento的角度实例化块实例时,新的Mage_目录_块_产品
也是错误的方法-Magento使用Factory模式创建模型、块和辅助对象objects@SlayerBirden谢谢,你能建议我如何包括定价数据吗?我的循环只是我主页上的from list.phtml中的标准代码。它必须存在于product collection list.phtml中,但我似乎无法在调用中重新创建相同的数据模型,以在代码顶部获取集合。@Slayer Birden..感谢您找出我的错误。我已经编辑了我的代码。嗨,这行得通。此解决方案是否存在@SlayerBirden指出的问题,即递归使用->createBlock(“目录/产品”)可能会有问题?感谢代码看起来不错,但是@RodgersandHammertime是正确的-最好只实例化一次块-在循环之外:
$catalogBlock=$this->getLayout()->createBlock(“目录/产品”)
,然后在循环中使用它的方法$catalogBlock->getPriceHtml()
感谢您发布此消息。我需要引用新创建的块吗?我已经创建了块并使其扩展了Mage\u Catalog\u block\u Product\u Abstract,但结果是相同的,当我对新创建的$productCollection执行var\u dump()时,它返回为null?
$productBlock=$this->getLayout()->createBlock("catalog/product");
echo $productBlock->getPriceHtml($_product,true);