Magento - 在自定义页面模板上使用$this->getPriceHtml

2022-08-30 22:37:23

我有一个滚动条,显示当前在售的产品集合,我使用以下方式调用它:

$todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->setPageSize(4) // Only return 4 products
    ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
    ->addAttributeToFilter('special_to_date', array('or'=> array(
           0 => array('date' => true, 'from' => $todayDate),
           1 => array('is' => new Zend_Db_Expr('null')))
           ), 'left')
    ->addAttributeToSort('special_from_date', 'desc');
$_productCollection->load();

然后,我运行一个 foreach 来获取各个产品:

foreach ($_productCollection as $_product)

一切都很好,除了价格,我通常会打电话使用

$this->getPriceHtml($_product, true)

然而,这给了我一个空白。如果我做一个var_dump我可以看到原价和特价都可用,那么为什么这不起作用呢?我在主页模板上使用完全相同的代码,我通过主页CMS调用,并且价格显示正常(划掉常规价格并显示特殊价格)。

使用 $_product->getFinalPrice() 工作正常,但只给我最终的“特价”价格,不显示原始价格。

我是否可能在我的xml布局中遗漏了使用getPriceHtml显示价格所需的内容?


答案 1

我的同事建议使用这种Magento友好的方法来获取任何地方的价格html:

<?php $_product = Mage::getModel('catalog/product')->load($product->getId());
      $productBlock = $this->getLayout()->createBlock('catalog/product_price');
      echo $productBlock->getPriceHtml($_product); ?>

如果您已经在使用已加载的产品,那么您不需要第一行,但是我的产品来自集合,因此这是必要的。


答案 2

问题是函数是在块中定义的,而不是在标准中定义的。您需要确保您的块扩展了 Product 块,或者您可以通过以下方式在布局中实现该块:getPriceHtml()Mage_Catalog_Block_ProductMage_Core_Block_Template

<block type="catalog/product" name="blockname" template="path/to/template.phtml">

我还没有测试过,但它应该有效。


推荐