templates/_snippets/components/cards/mini_card.html.twig line 1

Open in your IDE?
  1. {% if cruise is defined %}
  2. {# Quand true : pas d’accès à cruise.itinerary / escales → évite les requêtes lazy (ex. common_stopover_computed). #}
  3. {% set skip_itinerary_lazy = skip_itinerary_lazy|default(false) %}
  4. {% set isPriorityLoad = isPriorityLoad ?? false %}
  5. {% set categoryTagId = categoryTagId|default(null) %}
  6. {% set isCompanyLogo = isCompanyLogo ?? true %}
  7. {% set isFavorite = isFavorite ?? true %}
  8. {% set ship = cruise.ship %}
  9. {% set shipMedia = crea_media_get_media(['main'], cruise.ship, null, { width: 550 }) %}
  10. {% set imageUrl = shipMedia ? shipMedia.cdnUrl : '' %}
  11. <div class="sub-card {{ isPriorityLoad ? 'priority-load' : 'lazy-load' }}" data-cruise-id="{{ cruise.id }}" data-lazy="{{ isPriorityLoad ? 'false' : 'true' }}"{% if categoryTagId %} data-tag-id="{{ categoryTagId }}"{% endif %}>
  12. <div class="sub-card-image {{ isPriorityLoad ? '' : 'lazy-background' }}" {% if isPriorityLoad %}style="background-image: url('{{ imageUrl }}');"{% else %}data-bg="{{ imageUrl }}"{% endif %} aria-label="Image du navire {{ cruise.ship.name|default('') }}">
  13. {% if isCompanyLogo %}
  14. <div class="company-logo-thumbnail">
  15. <img src="{{ crea_media_get_media(['logo'], cruise.ship.company).cdnUrl|default('/img/placeholder-company.svg') }}" alt="{{ 'common.company'|trans }} {{ cruise.ship.company.name|default('Compagnie') }}">
  16. </div>
  17. {% endif %}
  18. {% if isFavorite %}
  19. <div class="favorite">
  20. <button type="button" class="favorite-button" aria-label="Ajouter cette croisière à vos favoris" data-cruise-id="{{ cruise.id }}">
  21. {{ getLucidIcon('heart') }}
  22. </button>
  23. </div>
  24. {% endif %}
  25. </div>
  26. <div class="sub-card-content">
  27. <div class="sub-card-details">
  28. <div class="detail">
  29. <h3 class="sub-card-title">{{ getCruiseName(cruise)|default('') }}</h3>
  30. </div>
  31. <div class="detail bloc-details">
  32. <div class="detail">
  33. <span class="iconn">{{ getLucidIcon('clock') }}</span>
  34. {% if skip_itinerary_lazy %}
  35. {% set durationDays = null %}
  36. {% if cruise.departureDate and cruise.arrivalDate %}
  37. {% set durationDays = max(1, ((cruise.arrivalDate|date('U') - cruise.departureDate|date('U')) / 86400)|round(0, 'floor') + 1) %}
  38. {% endif %}
  39. {% else %}
  40. {% set durationDays = cruise.itinerary.numberOfDays|default(null) %}
  41. {% endif %}
  42. <span class="text">{{ 'snippets.cruise.duration_days'|trans({'%days%': durationDays ?? '—'}) }}</span>
  43. </div>
  44. <div class="detail">
  45. <span class="iconn">{{ getLucidIcon('calendar') }}</span>
  46. <span class="text">{{ 'snippets.cruise.departure_on'|trans({'%date%': cruise.departureDate|date('d/m/Y')|default('')}) }}</span>
  47. </div>
  48. </div>
  49. <div class="detail">
  50. <span class="iconn">{{ getLucidIcon('map-pin') }}</span>
  51. {% if skip_itinerary_lazy %}
  52. <span class="text">{{ 'snippets.cruise.departure_from'|trans({'%port%': '—'}) }}</span>
  53. {% else %}
  54. <span class="text">{{ 'snippets.cruise.departure_from'|trans({'%port%': cruise.itinerary.itinerarySegments.first.stopover.name|default('')}) }}</span>
  55. {% endif %}
  56. </div>
  57. <div class="detail">
  58. <span class="iconn">{{ getLucidIcon('ship') }}</span>
  59. <span class="text">{{ cruise.ship.name|default('') }}</span>
  60. </div>
  61. </div>
  62. <div class="sub-card-price-actions">
  63. <div class="sub-card-price">
  64. <div class="price" aria-label="Prix : {{ getCruiseBestPrice(cruise)|default(null)|number_format(0, ',', ' ') }} euros par personne">
  65. <span class="price-amount">{{ getCruiseBestPrice(cruise)|default(null)|number_format(0, ',', ' ') }}€</span>
  66. <span class="price-unit">{{ 'common.per_person_short'|trans }}</span>
  67. </div>
  68. </div>
  69. <div class="sub-card-actions">
  70. <a href="/croisieres/details?croisiere={{ cruise.id }}" class="btn style6 reverse_color">
  71. {{ 'common.see_offer'|trans }} {{ getLucidIcon('arrow-right') }}
  72. </a>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. {% endif %}