{% set price = product.getTeaserPrice() %}
{% set isBookable = product.isBookable %}
{% set trackingKeyLearnMore = 'click-product-teaser-learn-more-' ~ product.id | default %}
{% set trackingKeyCart = 'click-product-teaser-cart-' ~ product.id | default %}
{% set trackingKeySelectItem = 'click-select-item-' ~ product.id | default %}
{% set trackingDataLearnMore = {
"trigger": "click",
'datalayer': {
'event': 'click_product_teaser',
'config_origin': 'learn_more'
}
} %}
{% set trackingDataCart = {
"trigger": "click",
'datalayer': {
'event': 'click_product_teaser',
'config_origin': 'ticket_configurator'
}
} %}
{% set trackingDataSelectItem = {
'trigger': 'click',
'datalayer': {
'event': 'select_item',
'ecommerce': {
'items': [
trackingItem|default([])
]
}
}
} %}
{% do jsConfig('_trackingData').add({
(trackingKeyLearnMore): trackingDataLearnMore,
(trackingKeyCart): trackingDataCart,
(trackingKeySelectItem): trackingDataSelectItem
}) %}
{#
the script tag is a fallback solution for all highlight teasers that do not get rendered immeadiately (e.g. are in an ajax response).
if that's the case, the trackingDatalayer can't be successfully added to the jsConfig
=> that's why we add it to the _trackingData object directly through JS at render time of the repspective teaser.
#}
<script>
if (typeof _trackingData !== 'undefined' && typeof _trackingData['{{ trackingKeySelectItem }}'] === 'undefined') {
_trackingData['{{ trackingKeySelectItem }}'] = {
'trigger': 'click',
'datalayer': {
'event': 'select_item',
'ecommerce': {
'items': [
{{ trackingItem|default([]) |json_encode|raw }}
]
}
}
}
}
</script>
{# @var product App\Model\Shop\Ticket\ShopTicketCatalog #}
<section class="ticket-teaser stretch-link {{ className|default('') }}">
<div class="position-relative">
{% if product is instanceof('\\Pimcore\\Model\\DataObject\\ShopTicketCatalog') and product.isAnnualCatalog %}
<span class="ticket-teaser__img-badge">
{{ 'shop.teaser.validity'|trans }}
<strong>
{{ 'shop.teaser.validity-annual-catalog'|trans }}
</strong>
</span>
{% elseif product.teaserValidity %}
{% set validity = product.teaserValidity %}
<span class="ticket-teaser__img-badge">
{{ 'shop.teaser.validity'|trans }}
<strong>
{% if validity.from %}
{% if validity.to and carbon().now().isSameYear(validity.to) %}
{% set dateFormat = 'date-short' %}
{% endif %}
<time datetime="{{ validity.from }}">
{{ elements_dateFormat(validity.from, dateFormat|default('date-long')) }}
</time>
{% endif %}
{% if validity.to %}
-
<time datetime="{{ validity.to }}">
{{ elements_dateFormat(validity.to) }}
</time>
{% endif %}
</strong>
</span>
{% endif %}
<div class="ratio ratio-ticket-teaser img-scroll-zoom-wrapper">
{% if product.teaserImage %}
{{ product.teaserImage.thumbnail('ticket-teaser').html({
'imgAttributes': {
'class': 'ratio-item ticket-teaser__img js-img-scroll-zoom img-scroll-zoom js-lazy-img'
},
'lowQualityPlaceholder': true
})|raw }}
{% endif %}
</div>
</div>
<div class="ticket-teaser__body">
{% if product.teaserTopTitle %}
<div class="ticket-teaser__top-title">
{{ product.teaserTopTitle }}
</div>
{% endif %}
<h3 class="ticket-teaser__title">
<a href="{{ getDetailLink(product) }}" class="stretch-link__link" data-event-tracking-key="{{ trackingKeySelectItem }}">{{ product.name }}</a>
</h3>
{% if price and isBookable %}
<div class="ticket-teaser__price">
{% if product is not instanceof('\\Pimcore\\Model\\DataObject\\ShopMerchandiseProduct') %}
{{ 'shop.teaser.price.from'|trans }}
{% endif %}
{{ formatPrice(price) }}
</div>
{% endif %}
{% if not isBookable or price is null %}
<a href="{{ getDetailLink(product) }}" class="text-tertiary ticket-teaser__not-bookable-text w-100">
{% if product is instanceof('\\Pimcore\\Model\\DataObject\\ShopEvent') %}
{{ 'shop.teaser.to not-bookable-event'|trans }}
{% elseif product is instanceof('\\Pimcore\\Model\\DataObject\\ShopTicketCatalog') %}
{{ 'shop.teaser.to not-bookable-ticket'|trans }}
{% else %}
{{ 'shop.teaser.to not-bookable-merch'|trans }}
{% endif %}
</a>
{% elseif singleButton|default(false) %}
<a href="{{ getDetailLink(product) }}" class="btn btn-tertiary">
{{ product is instanceof('\\Pimcore\\Model\\DataObject\\ShopMerchandiseProduct') ? 'shop.teaser.to merchandise'|trans : 'shop.teaser.to product'|trans }}
</a>
{% else %}
<div class="ticket-teaser__btn-wrapper">
<a href="{{ getDetailLink(product) }}" class="btn btn-secondary" data-event-tracking-key="{{ trackingKeyLearnMore }}">
{{ product is instanceof('\\Pimcore\\Model\\DataObject\\ShopMerchandiseProduct') ? 'shop.teaser.to merchandise'|trans : 'shop.teaser.to product'|trans }}
</a>
{% if product is not instanceof('\\Pimcore\\Model\\DataObject\\ShopMerchandiseProduct') %}
{{ include('includes/vue/vue-product-config.html.twig', {
product: product,
buttonClass: 'btn btn-tertiary btn-icon p-0 d-flex h-100 w-100',
trackingKeyCart: trackingKeyCart | default,
triggerTracking: true,
}) }}
{% else %}
<a href="{{ getDetailLink(product) }}" class="btn btn-tertiary btn-icon p-0 d-flex h-100 w-100" aria-label="{{ 'shop.teaser.to product'|trans }}" data-event-tracking-key="{{ trackingKeyCart }}">
<span class="visually-hidden">{{ 'shop.teaser.to product'|trans }}</span>
<span class="icon icon-cart btn-icon__icon"></span>
</a>
{% endif %}
</div>
{% endif %}
</div>
</section>