Показывать цену товара в пользовательском блоке
Я разрабатываю пользовательский модуль с пользовательским блоком, который отображает список продуктов.
Мой класс блоков:
use \Magento\Framework\View\Element\Template;
class Products extends Template
{
protected $_productCollectionFactory;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
array $data = []
)
{
$this->_productCollectionFactory = $productCollectionFactory;
parent::__construct($context, $data);
}
public function getHomeProducts()
{
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->setPageSize(6);
return $collection;
}
}
.файл phtml:
<?php
$productCollection = $block->getHomeProducts();
?>
<?php if($productCollection->count() > 0) : ?>
<div class="lrnt_hp_products">
<ul>
<?php foreach ($productCollection as $product) : ?>
<li>
<a href="<?php echo $product->getProductUrl(); ?>">
<img src="<?php echo $block->getUrl('pub/media/catalog') . 'product' . $product->getImage(); ?>" alt="<?php echo $product->getName(); ?>" />
</a>
<h2><a href="<?php echo $product->getProductUrl(); ?>"><?php echo $product->getName(); ?></a></h2>
// here I would like to print the price
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
Я пытаюсь показать цену продукта в файле phtml, но не смог найти правильный способ показать цену.
Теперь я могу распечатать его с помощью:
$продукт->getPrice()->getPrice('окончательная цена')->GetValue()
И поиск, который автоматически выводит final_price
, special-price
, если эти присутствуют и т.д.
Как я могу этого добиться?
1 answers
Чтобы получить цену продукта в пользовательском модуле так же, как на странице списка, используя блок отображения цены. Добавьте приведенную ниже функцию в свой пользовательский класс блоков.
/**
* @param \Magento\Catalog\Model\Product $product
* @return string
*/
public function getProductPrice($product)
{
$priceRender = $this->getLayout()->getBlock('product.price.render.default')
->setData('is_product_list', true);
$price = '';
if ($priceRender) {
$price = $priceRender->render(
\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE,
$product,
[
'include_container' => true,
'display_minimal_price' => true,
'zone' => \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST,
'list_category_page' => true
]
);
}
return $price;
}
И вызовите функцию в шаблоне, как показано ниже, и передайте объект продукта в качестве аргумента:
<?php echo $block->getProductPrice($product); ?>