Magento - использование $ this-> getPriceHtml в шаблоне пользовательской страницы - PullRequest
17 голосов
/ 11 января 2011

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

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

32 голосов
/ 05 февраля 2015

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

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

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

21 голосов
/ 11 января 2011

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

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

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

6 голосов
/ 31 июля 2012

Вы также можете попробовать это:

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

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

3 голосов
/ 04 мая 2013

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

1) Создайте свой тип блока каталог / товар

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

2) Передать объект product в функцию getPriceHtml ()

<?php $productObject = Mage::getModel('catalog/product')->load($_product->getId());?>
<?php echo $this->getPriceHtml($productObject, true) ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...