ReviewRenderer.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. /**
  3. * Review renderer
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Review\Block\Product;
  9. use Magento\Catalog\Block\Product\ReviewRendererInterface;
  10. use Magento\Catalog\Model\Product;
  11. use Magento\Review\Observer\PredispatchReviewObserver;
  12. /**
  13. * Class ReviewRenderer
  14. */
  15. class ReviewRenderer extends \Magento\Framework\View\Element\Template implements ReviewRendererInterface
  16. {
  17. /**
  18. * Array of available template name
  19. *
  20. * @var array
  21. */
  22. protected $_availableTemplates = [
  23. self::FULL_VIEW => 'Magento_Review::helper/summary.phtml',
  24. self::SHORT_VIEW => 'Magento_Review::helper/summary_short.phtml',
  25. ];
  26. /**
  27. * Review model factory
  28. *
  29. * @var \Magento\Review\Model\ReviewFactory
  30. */
  31. protected $_reviewFactory;
  32. /**
  33. * @param \Magento\Framework\View\Element\Template\Context $context
  34. * @param \Magento\Review\Model\ReviewFactory $reviewFactory
  35. * @param array $data
  36. */
  37. public function __construct(
  38. \Magento\Framework\View\Element\Template\Context $context,
  39. \Magento\Review\Model\ReviewFactory $reviewFactory,
  40. array $data = []
  41. ) {
  42. $this->_reviewFactory = $reviewFactory;
  43. parent::__construct($context, $data);
  44. }
  45. /**
  46. * Review module availability
  47. *
  48. * @return string
  49. */
  50. public function isReviewEnabled() : string
  51. {
  52. return $this->_scopeConfig->getValue(
  53. PredispatchReviewObserver::XML_PATH_REVIEW_ACTIVE,
  54. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  55. );
  56. }
  57. /**
  58. * Get review summary html
  59. *
  60. * @param Product $product
  61. * @param string $templateType
  62. * @param bool $displayIfNoReviews
  63. *
  64. * @return string
  65. */
  66. public function getReviewsSummaryHtml(
  67. \Magento\Catalog\Model\Product $product,
  68. $templateType = self::DEFAULT_VIEW,
  69. $displayIfNoReviews = false
  70. ) {
  71. if (!$product->getRatingSummary()) {
  72. $this->_reviewFactory->create()->getEntitySummary($product, $this->_storeManager->getStore()->getId());
  73. }
  74. if (!$product->getRatingSummary() && !$displayIfNoReviews) {
  75. return '';
  76. }
  77. // pick template among available
  78. if (empty($this->_availableTemplates[$templateType])) {
  79. $templateType = self::DEFAULT_VIEW;
  80. }
  81. $this->setTemplate($this->_availableTemplates[$templateType]);
  82. $this->setDisplayIfEmpty($displayIfNoReviews);
  83. $this->setProduct($product);
  84. return $this->toHtml();
  85. }
  86. /**
  87. * Get ratings summary
  88. *
  89. * @return string
  90. */
  91. public function getRatingSummary()
  92. {
  93. return $this->getProduct()->getRatingSummary()->getRatingSummary();
  94. }
  95. /**
  96. * Get count of reviews
  97. *
  98. * @return int
  99. */
  100. public function getReviewsCount()
  101. {
  102. return $this->getProduct()->getRatingSummary()->getReviewsCount();
  103. }
  104. /**
  105. * Get review product list url
  106. *
  107. * @param bool $useDirectLink allows to use direct link for product reviews page
  108. * @return string
  109. */
  110. public function getReviewsUrl($useDirectLink = false)
  111. {
  112. $product = $this->getProduct();
  113. if ($useDirectLink) {
  114. return $this->getUrl(
  115. 'review/product/list',
  116. ['id' => $product->getId(), 'category' => $product->getCategoryId()]
  117. );
  118. }
  119. return $product->getUrlModel()->getUrl($product, ['_ignore_category' => true]);
  120. }
  121. }