Как отобразить сводку звездного рейтинга
Я удалил вкладку отзывов и поместил форму в модальное всплывающее окно .
Теперь я отобразил все отзывы, опубликованные клиентом о конкретном продукте, и я отобразил сводку оценок для продукта.
Теперь мне нужно получить рейтинг для каждого клиента и отобразить в следующем формате для каждого отзыва в интерфейсе. Пожалуйста, предоставьте мне решение для добавления звездного рейтинга для каждого отзывы.
Это мой класс коллекции, который я отобразил в интерфейсе, как показано ниже
Для справки
Файл блокировки
<?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>
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>
Попробуйте использовать приведенный ниже код в вашем файле 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 } ?>
Как я получаю звездный рейтинг продукта. Очень легко реализовать на всем сайте.
<?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 } ?>