У меня есть скроллер, показывающий коллекцию продуктов, которые в настоящее время продаются, которые я вызываю, используя следующее:
$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 ?
Проблема в том, что 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) ?>