templates/_snippets/reviews.html.twig line 1

Open in your IDE?
  1. {% set max_reviews = content.snippet.maxReviews ?? 10 %}
  2. {% set stars_rating_got = content.snippet.starsRatingGot ?? [4,5] %}
  3. {% set google = google_reviews(max_reviews, stars_rating_got, content.snippet.isOnlyCommentsReviews ?? false) %}
  4. {% set content = content|merge({
  5. 'reviews': google.reviews,
  6. 'reviews_stats': google.reviews_stats
  7. }) %}
  8. {% set googleReviewsLink = content.snippet.googleReviewsLink ?? '' %}
  9. {% set snippet = content.snippet ?? {} %}
  10. {% set allReviews = content.reviews ?? [] %}
  11. {% set stats = content.reviews_stats ?? {} %}
  12. {% set reviewsPerPage = 6 %}
  13. {% set totalPages = (allReviews|length / reviewsPerPage)|round(0, 'ceil') %}
  14. {% set reviewFontSize = (snippet.reviewSize|default(14)) ~ (snippet.reviewSizeUnit|default('px')) %}
  15. {% set nameFontSize = (snippet.nameSize|default(12)) ~ (snippet.nameSizeUnit|default('px')) %}
  16. {% if allReviews|length > 0 %}
  17. <section
  18. class="google-reviews-section"
  19. style="--mark-color: {{ snippet.markColor|default('#2ca445') }}; --review-font-size: {{ reviewFontSize }}; --name-font-size: {{ nameFontSize }};"
  20. >
  21. <div class="container-fluid">
  22. <div
  23. class="google-reviews-showcase"
  24. data-google-reviews-showcase
  25. data-lazy-snippet="reviews"
  26. data-stars-label-template="{{ 'reviews.stars_label'|trans }}"
  27. >
  28. <div class="google-reviews-showcase__viewport">
  29. <div class="google-reviews-showcase__track" data-google-reviews-track>
  30. {% for loopIndex in 1..2 %}
  31. {% for pageIndex in 0..(totalPages - 1) %}
  32. {% set pageStart = pageIndex * reviewsPerPage %}
  33. {% set pageReviews = allReviews|slice(pageStart, reviewsPerPage) %}
  34. {% if pageReviews|length < reviewsPerPage and allReviews|length > 0 %}
  35. {% set remaining = reviewsPerPage - pageReviews|length %}
  36. {% set extraReviews = allReviews|slice(0, remaining) %}
  37. {% set pageReviews = pageReviews|merge(extraReviews) %}
  38. {% endif %}
  39. {% set leftReviews = pageReviews|slice(0, 3) %}
  40. {% set rightReviews = pageReviews|slice(3, 3) %}
  41. {% set isClone = (loopIndex == 2) %}
  42. {% if leftReviews|length == 3 and rightReviews|length == 3 %}
  43. {% for review in leftReviews %}
  44. {% include '_snippets/_google_review_card.html.twig' with {
  45. review: review,
  46. googleReviewsLink: googleReviewsLink,
  47. isClone: isClone
  48. } %}
  49. {% endfor %}
  50. <div class="google-reviews-showcase__spacer{% if isClone %} is-clone{% endif %}" data-page-index="{{ pageIndex }}"></div>
  51. {% for review in rightReviews %}
  52. {% include '_snippets/_google_review_card.html.twig' with {
  53. review: review,
  54. googleReviewsLink: googleReviewsLink,
  55. isClone: isClone
  56. } %}
  57. {% endfor %}
  58. {% endif %}
  59. {% endfor %}
  60. {% endfor %}
  61. </div>
  62. </div>
  63. <div class="google-reviews-showcase__center">
  64. <div class="google-score-badge">
  65. <div class="google-score-badge__brand">
  66. <div class="google-score-badge__google">
  67. <span class="is-blue">G</span><span class="is-red">o</span><span class="is-yellow">o</span><span class="is-blue">g</span><span class="is-green">l</span><span class="is-red">e</span>
  68. </div>
  69. <div class="google-score-badge__stars">
  70. {% set avgRating = stats.average_rating|default(0)|replace({',': '.'}) %}
  71. {% set avgRounded = stats.average_rating|default(0)|round(0, 'floor') %}
  72. {% for i in 1..5 %}
  73. <span class="{% if i <= avgRounded %}is-active{% endif %}">★</span>
  74. {% endfor %}
  75. </div>
  76. </div>
  77. {% set rotation = -((avgRating / 5 * 100))|round(0, 'floor') %}
  78. <div
  79. class="google-score-badge__ring"
  80. style="--ring-progress: 0;"
  81. data-ring-progress="{{ rotation|round(0, 'floor') }}"
  82. >
  83. <svg class="google-score-badge__ringSvg" viewBox="0 0 176 176" aria-hidden="true" focusable="false">
  84. <circle class="google-score-badge__ringBg" cx="88" cy="88" r="70" />
  85. <circle class="google-score-badge__ringFg" cx="88" cy="88" r="70" />
  86. </svg>
  87. <div class="google-score-badge__inner">
  88. <div class="google-score-badge__site">Croisiland.com</div>
  89. <div class="google-score-badge__rating">
  90. {{ stats.average_rating|default('0.0')|round(1, 'floor') }}
  91. <span>/5</span>
  92. </div>
  93. <div class="google-score-badge__count">
  94. {% if stats|length > 0 %}
  95. {{ ((stats.total_review_count / 100)|round(0, 'floor') * 100)|default(0) }}+ {{ 'reviews.reviews_label'|trans }}
  96. {% endif %}
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. <button type="button" class="google-reviews-showcase__nav google-reviews-showcase__nav--prev" data-google-reviews-prev aria-label="{{ 'reviews.previous'|trans }}">
  103. ‹
  104. </button>
  105. <button type="button" class="google-reviews-showcase__nav google-reviews-showcase__nav--next" data-google-reviews-next aria-label="{{ 'reviews.next'|trans }}">
  106. ›
  107. </button>
  108. </div>
  109. </div>
  110. </section>
  111. {% endif %}