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

Magento-使用$this->;自定义页面模板上的getPriceHtml,magento,php,Magento,Php,我有一个滚动条,显示当前正在销售的一系列产品,我使用以下方式称之为: $todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); $_productCollection = Mage::getResourceModel('reports/product_collection') ->addAttributeToSelect('*')

我有一个滚动条,显示当前正在销售的一系列产品,我使用以下方式称之为:

$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_转储,我可以看到原始价格和特殊价格都是可用的,那么为什么这不起作用呢?我在我的主页模板上使用了完全相同的代码,我通过主页CMS调用了该模板,价格显示良好(划掉常规价格,显示特殊价格)

使用$\u product->getFinalPrice()可以很好地工作,但只会给我最终的“特殊”价格,而不会显示原始价格


我的xml布局中是否缺少使用getPriceHtml显示价格所需的某些内容?

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

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


我还没有测试过,但它应该可以工作。

您也可以尝试以下方法:

<?php echo Mage_Catalog_Block_Product::getPriceHtml($_product, true) ?>

其中,
$\u product
与产品对象相关。

要使getPriceHtml()函数在自定义块中正常工作,需要两件事

1) 制作块类型目录/产品

<block type="catalog/product" name="home_page_product" after="default_home_page" template="custom/home_page_product.phtml"/>

2) 将产品对象传递给getPriceHtml()函数


我的同事建议使用此Magento友好方法在任何地方获取价格:

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


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

所指的块是什么?宾果。我使用的是核心/模板,所以改成了目录/产品列表,现在可以使用了。新的,就这么简单。干杯是否使用$\u product引用产品对象?是。Magento不喜欢我直接访问Mage_Catalog_Block_产品(我忘记了确切的错误,但这就是它的意思),在第63行的D:\wamp\www\magentocustmod\app\code\core\Mage\Catalog\Block\Product.php中不在对象上下文中时使用$this可以完美地工作,您不需要更改块类型!tanx edit:使用magento 1.7Lol,无论是
Mage\u Catalog\u Block\u Product
还是
getPriceHtml
都不是静态的-无论如何都不能工作,这对我来说比公认的答案工作得更好。这是正确的方法,公认的答案,但不推荐,因为它使用了路径。
<?php $_product = Mage::getModel('catalog/product')->load($product->getId());
      $productBlock = $this->getLayout()->createBlock('catalog/product_price');
      echo $productBlock->getPriceHtml($_product); ?>