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

时间:2011-01-10 23:43:01

标签: magento php

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

$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 显示价格所需的内容吗?

4 个答案:

答案 0 :(得分:32)

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

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

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

答案 1 :(得分:21)

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

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

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

答案 2 :(得分:6)

你也可以试试这个:

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

$_product与产品对象相关的位置。

答案 3 :(得分:3)

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

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

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

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

<?php $productObject = Mage::getModel('catalog/product')->load($_product->getId());?>
<?php echo $this->getPriceHtml($productObject, true) ?>