Показывать цену товара в пользовательском блоке


Я разрабатываю пользовательский модуль с пользовательским блоком, который отображает список продуктов.

Мой класс блоков:

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, если эти присутствуют и т.д.

Как я могу этого добиться?

Author: Jai, 2017-07-27

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); ?>
 2
Author: Pankaj Pareek, 2017-07-27 08:48:02