【问题标题】:Magento - using $this->getPriceHtml on custom page templateMagento - 在自定义页面模板上使用 $this->getPriceHtml
【发布时间】:2016-10-06 18:03:37
【问题描述】:

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

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

【问题讨论】:

  • $this 指的是什么块?

标签: magento php


【解决方案1】:

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

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

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

【讨论】:

  • 这比我接受的答案更好。
  • 这是正确的方法,接受的答案但不推荐,因为它使用路径。
【解决方案2】:

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

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

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

【讨论】:

  • 宾果游戏。我正在使用核心/模板,因此更改为目录/产品列表,现在它可以工作了。新它会像那样简单。干杯!
【解决方案3】:

你也可以试试这个:

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

$_product 与产品对象相关。

【讨论】:

  • 您指的是带有 $_product 的产品对象吗?
  • 是的。 Magento 不喜欢我直接访问 Mage_Catalog_Block_Product(我忘记了确切的错误,但这就是它的意思)
  • 在 D:\wamp\www\magentocustmod\app\code\core\Mage\Catalog\Block\Product.php 第 63 行的对象上下文中使用 $this
  • 完美运行,您无需更改块类型! tanx 编辑:使用 magento 1.7
  • 大声笑,Mage_Catalog_Block_Product 和 getPriceHtml 都不是静态的 - 无论如何都无法工作
【解决方案4】:

要让 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) ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多