Подтвердить что ты не робот

Magento - используя $this-> getPriceHtml на настраиваемом шаблоне страницы

У меня есть скроллер, показывающий коллекцию продуктов, которые в настоящее время продаются, которые я вызываю, используя следующее:

$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?

4b9b3361

Ответ 1

Проблема заключается в том, что функция getPriceHtml() определена в блоке Mage_Catalog_Block_Product, а не в стандарте Mage_Core_Block_Template. Вы должны убедиться, что ваш блок расширяет блок Product, или вы можете достичь этого в своем макете, например:

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

Я не тестировал это, но он должен работать.

Ответ 2

Мой коллега рекомендовал использовать этот дружественный метод Magento для получения цены html в любом месте:

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

Если вы уже работаете с загруженным продуктом, вам не понадобится первая строка, однако мой продукт был из коллекции, поэтому это было необходимо.

Ответ 3

Вы также можете попробовать следующее:

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

Где $_product относится к объекту продукта.

Ответ 4

Чтобы функция getPriceHtml() работала правильно в вашем пользовательском блоке, вам нужно 2 вещи

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