Как отобразить сводку звездного рейтинга


Я удалил вкладку отзывов и поместил форму в модальное всплывающее окно .

Теперь я отобразил все отзывы, опубликованные клиентом о конкретном продукте, и я отобразил сводку оценок для продукта.

Теперь мне нужно получить рейтинг для каждого клиента и отобразить в следующем формате для каждого отзыва в интерфейсе. Пожалуйста, предоставьте мне решение для добавления звездного рейтинга для каждого отзывы.

enter image description here

Это мой класс коллекции, который я отобразил в интерфейсе, как показано ниже

enter image description here

Для справки

Файл блокировки

<?php

namespace XXX\YYY\Block;

use Magento\Framework\View\Element\Template;

class Collection extends Template
{


    protected $_coreRegistry;

    protected $_reviewsColFactory;


    protected $_reviewFactory;
    protected $_voteFactory;

    public function __construct(\Magento\Framework\View\Element\Template\Context $context,\Magento\Review\Model\Rating\Option\VoteFactory $voteFactory, \Magento\Review\Model\ReviewFactory $reviewFactory, \Magento\Framework\Registry $registry, \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory, array $data = [])
    {
        $this->_coreRegistry = $registry;
        $this->_reviewsColFactory = $collectionFactory;
        $this->_reviewFactory = $reviewFactory;
         $this->_voteFactory = $voteFactory;
        parent::__construct($context, $data);
    }


    public function getProductId()
    {

        $product = $this->_coreRegistry->registry('product');
        return $product ? $product->getId() : null;
    }


    public function getCollectionSize()
    {
        $collection = $this->_reviewsColFactory->create()->addStoreFilter(
                        $this->_storeManager->getStore()->getId()
                )->addStatusFilter(
                        \Magento\Review\Model\Review::STATUS_APPROVED
                )->addEntityFilter(
                'product', $this->getProductId()
        );

        return $collection->getSize();
    }

    public function getAllreviews()
    {
        $collection = $this->_reviewsColFactory->create()->addStoreFilter(
                        $this->_storeManager->getStore()->getId()
                )->addStatusFilter(
                        \Magento\Review\Model\Review::STATUS_APPROVED
                )->addEntityFilter(
                'product', $this->getProductId()
        );

        return $collection;
    }

    public function getRatingSummary()
    {
        $product = $this->_coreRegistry->registry('product');
        $this->_reviewFactory->create()->getEntitySummary($product, $this->_storeManager->getStore()->getId());
        $ratingSummary = $product->getRatingSummary()->getRatingSummary();
        return $ratingSummary;
    }

}

Abc.пхтмл

<div id="customer-reviews" class="customer-reviews">
    <?php $reviews = $block->getAllreviews(); ?>

    <span><b><?= /* @escapeNotVerified */ __('Rating summary : ') ?></b></span><?php echo $rating = $block->getRatingSummary(); ?><br>

    <div id ="reviews" class="reviews"> <span><b><?= /* @escapeNotVerified */ __('Customer Reviews') ?></b></span><br>
        <?php foreach ($reviews as $review): ?>           
            <span><?= /* @escapeNotVerified */ __('Customer Name : ') ?></span><?php echo $review->getNickname(); ?><br>
            <span><?= /* @escapeNotVerified */ __('Review : ') ?></span><?php echo $review->getDetail(); ?><br>
            <span><?= /* @escapeNotVerified */ __('Date : ') ?></span><?php echo $review->getCreatedAt(); ?><br>

        <?php endforeach; ?>
    </div>
</div> 
Author: Jaisa, 2017-12-13

3 answers

Для обзоров отображается сводная оценка звезд на основе процента рейтингового голосования, предоставленного в конкретном обзоре. Используя этот рейтинг-процент голосов, символ звезды выделяется с помощью свойства width элемента span.

Чтобы получить процент голосов, зациклите свою коллекцию отзывов и для каждого отзыва получите процент голосов следующим образом.

foreach ($reviews as $review) {
if (count($review->getRatingVotes())) { 
    foreach ($review->getRatingVotes() as $_vote) { 
        $rating_vote[] =  $_vote->getPercent();
    }
}
else
    $rating_vote = null;
}

Используя значение $rating_vote_percentage, вы должны применить стили по-своему, чтобы указать звезду рейтинг.

Используйте этот код в своем файле abc.phtml соответствующим образом.

Чтобы отобразить рейтинг звезд для каждого отзыва, просто замените весь код в вашем файле abc.phtml на приведенный ниже код.

<div id="customer-reviews" class="customer-reviews">
<?php $reviews = $block->getAllreviews(); ?>

<span><b><?= /* @escapeNotVerified */ __('Rating summary : ') ?></b></span><?php echo $rating = $block->getRatingSummary(); ?><br>

<div id ="reviews" class="reviews"> <span><b><?= /* @escapeNotVerified */ __('Customer Reviews') ?></b></span><br>
    <?php foreach ($reviews as $review): ?>  
    <?php
        if (count($review->getRatingVotes())) { 
            foreach ($review->getRatingVotes() as $_vote) { 
                $rating_vote =  $_vote->getPercent();
            }
        }
        else
            $rating_vote = 0;

    ?>      
        <span><?= /* @escapeNotVerified */ __('Customer Name : ') ?></span><?php echo $review->getNickname(); ?><br>
        <span><?= /* @escapeNotVerified */ __('Review : ') ?></span><?php echo $review->getDetail(); ?><br>
        <span><?= /* @escapeNotVerified */ __('Date : ') ?></span><?php echo $review->getCreatedAt(); ?><br>

        <span><?= /* @escapeNotVerified */ __('Rating : ') ?></span>
        <div class="rating-result" >
            <meta itemprop="worstRating" content = "1"/>
            <meta itemprop="bestRating" content = "100"/>
            <span style="width:<?php echo $rating_vote; ?>%">
                <span itemprop="ratingValue"><?php echo $rating_vote; ?>%</span>
            </span>
        </div>

    <?php endforeach; ?>
</div>

 2
Author: MGento, 2017-12-13 12:06:24

Попробуйте использовать приведенный ниже код в вашем файле phtml Вы не должны использовать ObjectManager напрямую!

<?php
$productId = 'your_product_id';
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$reviewFactory = $objectManager->create('Magento\Review\Model\Review');
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$storeManager  = $objectManager->create('\Magento\Store\Model\StoreManagerInterface');
$storeId = $storeManager->getStore()->getStoreId();
$reviewFactory->getEntitySummary($product, $storeId);

$ratingSummary = $product->getRatingSummary()->getRatingSummary();
$reviewCount = $product->getRatingSummary()->getReviewsCount();
?>
<?php if($ratingSummary){ ?>
<div class="product-reviews-summary short">
    <div class="rating-summary">
        <div title="<?php echo (int)$ratingSummary; ?>%" class="rating-result">
            <span style="width:<?php echo (int)$ratingSummary; ?>%"><span><?php echo (int)$ratingSummary; ?>%</span></span>
        </div>
    </div>
    <div class="reviews-actions">
        <?php echo __('('.$reviewCount.') Reviews'); ?>
    </div>
</div>
<?php } ?>
 0
Author: Chander Shekhar, 2017-12-13 11:48:19

Как я получаю звездный рейтинг продукта. Очень легко реализовать на всем сайте.

<?php $_rating = Mage::getModel('review/review_summary')->load($_product->getId()); ?>

<?php if ($_rating['rating_summary']) {?>
  <div class="ratings">
      <div class="rating-box">
         <div class="rating" style="width:<?php echo $_rating['rating_summary']; ?>%"></div>
      </div>
  </div>
<?php } ?>
 0
Author: TheRealJAG, 2018-01-12 17:28:22