{# ------------------------------------------------------------------------ #}{# ----------------------------- PARAMÉTRAGES ----------------------------- #}{# ------------------------------------------------------------------------ #}{% set effectiveSectionSettings = showSectionSettings|default(true) ? sectionSettings|default({}) : {} %}{% set content = effectiveSectionSettings|merge(lastOffers) %}{% set lastOffersId = 'last_offers-' ~ random() %}{% set specialOffers = getLastOffers(content.howManyOffers|default(1)) %}{% include '_snippets/sections/tags_section_settings.html.twig' with {'content': content,'id': lastOffersId,} %}{% include '_snippets/sections/cards_section_settings.html.twig' with {'content': content,'id': lastOffersId,} %}{# Paramètres spécifiques à ce fragment #}{% set buttonSettings = {'padding': content.paddingButtonTopBottomContent|default(0) ~ content.paddingButtonUnitContent|default('px') ~ ' ' ~ content.paddingButtonRightLeftContent|default(0) ~ content.paddingButtonUnitContent|default('px'),'color': content.colorButtonContent|default('#000'),'background-color': content.backgroundColorButtonContent|default('#000'),'border-radius': content.borderRadiusButtonContent|default(0) ~ content.borderRadiusButtonContentUnit|default('px'),'font-size': content.fontSizeButtonContent|default(16) ~ content.fontSizeButtonContentUnit|default('px'),'font-weight': content.fontWeightButtonContent|default(500),'border': content.borderSizeButtonContent|default(0) ~ content.borderSizeButtonContentUnit|default('px') ~ ' solid ' ~ content.borderColorButtonContent|default('#000'),} %}{% set conditionSettings = {'color': content.conditionColorCards|default('#000'),'font-weight': content.conditionWeightCards|default(500),'font-size': content.conditionSizeCards|default(16) ~ content.conditionSizeUnitCards|default('px'),} %}{% if true %}<sectionid="{{ lastOffersId }}" class="last-offers"> {# En-tête avec titre et navigation #}<div class="last-offers-head"><h2><div class="icon">{{ getLucidIcon(attribute(content, 'pictogramTitleSection')|default('')) }}</div>{{ attribute(content, 'titleTextSection')|default('')|raw }}</h2><div class="chevrons"></div></div>{# ##################### HUB Promos requis ##################### #}{# <div class="button-container"><a href="/promotions" class="button">{{ content.textButtonContent|default('snippets.offers.see_all'|trans) }}</a></div> #}{# Carousel #}<div class="slider"><div class="cards">{% for offer in specialOffers %}{% set mediaOffer = crea_media_get_media(['banner'], offer) %}{% set companyLogoUrl = offer.companies is iterable and offer.companies is not empty and offer.companies[0] is not null ? (crea_media_get_media(['logo'], offer.companies[0]).cdnUrl|default('/img/placeholder-company.svg')) : null %}{% set isPriority = loop.index <= 2 %}{% set imageUrl = mediaOffer.cdnUrl|default('/img/photos-temporaires/placeholder-image-offer.jpg') %}{% set tag = offer.tag|default(null) %}{% set company = offer.company|default(null) %}<divclass="card animation1 offer-card-opener {{ isPriority ? 'priority-load' : 'lazy-load' }}"data-offer-id="{{ offer.id }}"role="button"tabindex="0"aria-haspopup="dialog"aria-controls="modal-offer-{{ offer.id }}"data-lazy="{{ isPriority ? 'false' : 'true' }}"><div class="image {{ isPriority ? '' : 'lazy-background' }}" {% if isPriority %} style="background-image: url('{{ imageUrl }}');" {% else %} data-bg="{{ imageUrl }}" {% endif %}><div class="tags"><div class="tag" style="background-color:{{offer.offerCategory.iconColorFill|default('#000000')}}">{{ getLucidIcon(offer.offerCategory.icon|default('star')) }}</div></div></div><div class="card-inner"><div><div class="more-info-div"><img src="{{ companyLogoUrl}}" alt=""><span class="info-icon" aria-hidden="true">{{ getLucidIcon('info') }}</span></div><div class="title"><div class="title-text">{{ offer.displayed_name|default(offer.name|default('snippets.offers.special_offer'|trans)) }}</div></div><div class="description content"><div class="description-text">{{ offer.shortDescription|default('')|slice(0, 250)|raw }}{% if offer.shortDescription|default('')|length > 250 %}<span class="read-more">...</span>{% endif %}</div><div class="condition">{{ offer.conditions|default('')|slice(0, 250)|raw }}{% if offer.conditions|default('')|length > 250 %}<span class="read-more">...</span>{% endif %}</div></div></div><div class="price-container"><div class="price">{{ 'common.from'|trans }}<span class="price-value">{{ getBestPriceByOffer(offer).baseCostDouble|default(0)|number_format(0, ',', ' ') }}€ {{ 'common.per_person_short'|trans }}</span>{# <span class="price-value">{{ 'XXX'|default(0)|number_format(0, ',', ' ') }}€ {{ 'common.per_person_short'|trans }}</span> #}</div><div class="see-more"><ahref="{{ getCruiseSearchUrl([getOfferById(offer.id)]) }}"class="btn style3 bg-w offer-card-action">{{ 'common.see'|trans }}{{ getLucidIcon('arrow-right') }}</a></div></div></div></div>{% endfor %}</div></div><div class="last-offers-modals" hidden>{% for offer in specialOffers %}{% include '_snippets/_last_offer_modal.html.twig' with {offer: offer,imageUrl: crea_media_get_media(['banner'], offer).cdnUrl|default('/img/photos-temporaires/placeholder-image-offer.jpg'),companyLogoUrl: offer.companies is iterable and offer.companies is not empty and offer.companies[0] is not null ? (crea_media_get_media(['logo'], offer.companies[0]).cdnUrl|default('/img/placeholder-company.svg')) : null,} only %}{% endfor %}</div></section>{% endif %}{# Le JavaScript des offres est maintenant géré par assets/website/js/snippets/last-offers.js #}<!-- Styles dynamiques --><!-- prettier-ignore --><style>#{{ lastOffersId }} {--padding-left-slider: {{ content.sectionPaddingLeft|default(0) ~ content.sectionPaddingUnit|default('px') }};--height-card-image: {{ content.imageHeightCards|default(200) ~ content.imageHeightCardsUnit|default('px') }};--condition-color: {{ content.conditionColorCards|default('#000') }};--condition-font-weight: {{ content.conditionWeightCards|default(500) }};--condition-font-size: {{ content.conditionSizeCards|default(16) ~ content.conditionSizeUnitCards|default('px') }};--button-padding: {{ content.paddingButtonTopBottomContent|default(0) ~ content.paddingButtonUnitContent|default('px') }} {{ content.paddingButtonRightLeftContent|default(0) ~ content.paddingButtonUnitContent|default('px') }};--button-color: {{ content.colorButtonContent|default('#000') }};--button-background-color: {{ content.backgroundColorButtonContent|default('#000') }};--button-border-radius: {{ content.borderRadiusButtonContent|default(0) ~ content.borderRadiusButtonContentUnit|default('px') }};--button-font-size: {{ content.fontSizeButtonContent|default(16) ~ content.fontSizeButtonContentUnit|default('px') }};--button-font-weight: {{ content.fontWeightButtonContent|default(500) }};--button-border: {{ content.borderSizeButtonContent|default(0) ~ content.borderSizeButtonContentUnit|default('px') }} solid {{ content.borderColorButtonContent|default('#000') }};}</style>