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 ?

Solutions Collecting From Web of "Magento – используя $ this-> getPriceHtml на настраиваемом шаблоне страницы"

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

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

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

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

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

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

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

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

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

Чтобы функция 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) ?>