Starten Sie Ihre Reise
wir machen sie unvergesslich
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> cur_CarouselSection.ImageDesktopFieldSetFieldSet.Schedule [in template "64899143380625#20119#8206410" at line 38, column 40]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign scheduleStr = cur_CarouselSec... [in template "64899143380625#20119#8206410" at line 38, column 17]
----
1<#--
2 Add elements from the sidebar to define your template. Type "${" to use the
3 autocomplete feature.
4
5 #set($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext())
6 #set($layoutLocalServiceUtil = $serviceLocator.findService("com.liferay.portal.service.LayoutLocalService"))
7 #set($themeDisplay = $serviceContext.getThemeDisplay())
8 #set($journalTool = $serviceLocator.findService("ram-single-site-portlet", "es.indra.velocity.tools.JournalTool"))
9 #set($httpRequest = $themeDisplay.getRequest())
10 #set($isMobile = $journalTool.isMobile($httpRequest))
11 -->
12
13 <div class="offersUpdate flex-c flex-g-16 f-mb-64">
14 <h2 class="whyram__title f-heading-l f-fw-l"><@liferay.language key='offers-updates-title' /></h2>
15 <div class="js-offersUpdateContainer offersUpdate__container">
16 <div class="swiper swiper-offersUpdate">
17 <div class="swiper-wrapper">
18
19 <#assign currentDateMillis = .now?datetime>
20 <#assign array = []>
21
22
23
24 <#if ImageDesktopFieldSet.getSiblings()?has_content>
25 <#list ImageDesktopFieldSet.getSiblings() as cur_CarouselSection>
26
27
28
29
30
31
32
33 <#assign isActive = getterUtil.getBoolean(cur_CarouselSection.ImageDesktopFieldSetFieldSet.Active.getData())>
34 <#-- assign scheduleDateMillis = cur_CarouselSection.ImageDesktopFieldSetFieldSet.Schedule.getData() -->
35
36
37 <#-- Recupera y parsea la fecha programada (yyyy-MM-dd) -->
38 <#assign scheduleStr = cur_CarouselSection.ImageDesktopFieldSetFieldSet.Schedule.getData()>
39 <#if scheduleStr?? && scheduleStr?has_content>
40 <#assign scheduleDate = scheduleStr?date("yyyy-MM-dd")>
41 <#-- Convierte a milisegundos (00:00:00 de esa fecha en la zona configurada) -->
42 <#assign scheduleDateMillis = scheduleDate?long>
43 <#assign isPast = (currentDateMillis?long gt scheduleDateMillis)>
44
45 <#if isActive == true && isPast>
46 <#assign item = {
47 "data": cur_CarouselSection,
48 "order": cur_CarouselSection.ImageDesktopFieldSetFieldSet.order.getData()
49 }>
50 <#assign array = array + [item]>
51 </#if>
52
53 <#else>
54 <#if isActive>
55 <#assign item = {
56 "data": cur_CarouselSection,
57 "order": cur_CarouselSection.ImageDesktopFieldSetFieldSet.order.getData()
58 }>
59 <#assign array = array + [item]>
60 </#if>
61 </#if>
62 </#list>
63
64 <#if array?size != 0>
65 <#assign sortedArray = array?sort_by("order")>
66 <#list sortedArray as cur_ImageDesktop>
67
68 <div class="swiper-slide ${cur_ImageDesktop.order}">
69
70 <#assign link = "">
71
72
73
74 <#if cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.Link_to_Page5551.getFriendlyUrl() != "">
75 <#assign link = cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.Link_to_Page5551.getFriendlyUrl()>
76 <#else>
77 <#assign link = cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.linkUrl.getData()>
78 </#if>
79
80 <a href="${link}" class="offersUpdate__card js-offersUpdateCard">
81
82 <img class="offersUpdate__img-mobile" src="${cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.ImageMobileFieldSet.ImageMobile.getData()}" alt="${cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.ImageMobileFieldSet.ImageMobileFieldSetFieldSet.altMobile.getData()}">
83 <img class="offersUpdate__img" src="${cur_ImageDesktop.data.ImageDesktop.getData()}" alt="${cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.altDesktop.getData()}" />
84
85 <div class="offersUpdate__footer">
86 <span class="ram-btn-f2">
87 ${cur_ImageDesktop.data.ImageDesktopFieldSetFieldSet.Button_textFieldSet.Button_text.getData()}
88 </span>
89 </div>
90 </a>
91 </div>
92 </#list>
93 </#if>
94 </#if>
95 </div>
96 </div>
97 <button class="offersUpdate__arrow ram-btn-f2 swiper-button-prev" tabindex="-1"></button>
98 <button class="offersUpdate__arrow ram-btn-f2 swiper-button-next" tabindex="-1"></button>
99 </div>
100 <div class="swiper-pagination offersUpdate__pagination"></div>
101 </div>
102 <script>
103 document.addEventListener("DOMContentLoaded", () => {
104 const swiperOffersUpdateWrapper = document.querySelector('.js-offersUpdateContainer'),
105 swiper = document.querySelector('.swiper-offersUpdate');
106
107 var swiperOffersUpdate = new Swiper(".swiper-offersUpdate", {
108 uniqueNavElements: true,
109 loop: true,
110 centeredSlides: true,
111 disableOnInteraction: true,
112 keyboard: {
113 enabled: true,
114 },
115 autoplay: {
116 delay: 5000,
117 disableOnInteraction: true,
118 },
119 slidesPerView: 1,
120 navigation: {
121 nextEl: ".offersUpdate .swiper-button-next",
122 prevEl: ".offersUpdate .swiper-button-prev",
123 },
124 pagination: {
125 el: ".swiper-pagination",
126 clickable: true,
127 },
128 on: {
129 init: function () {
130 let params = swiper.swiper.params;
131 const slides = document.querySelectorAll('.swiper-offersUpdate .swiper-slide');
132
133 if (slides.length <= 3) {
134 params.loop = false;
135 params.rewind = true;
136 }
137 },
138 },
139 });
140
141 if (swiperOffersUpdateWrapper) {
142 swiperOffersUpdateWrapper.addEventListener('mouseover', () => {
143 swiperOffersUpdateWrapper.classList.add('offersUpdate--hover');
144 });
145
146 swiperOffersUpdateWrapper.addEventListener('mouseout', () => {
147 swiperOffersUpdateWrapper.classList.remove('offersUpdate--hover');
148 });
149
150 swiper.addEventListener('mouseover', () => {
151 swiperOffersUpdate.autoplay.stop();
152 });
153
154 swiper.addEventListener('mouseleave', () => {
155 swiperOffersUpdate.autoplay.start();
156 });
157 }
158
159
160 });
161 </script>
Was macht das Fliegen mit uns außergewöhnlich?
- Mehr erfahren
Mahlzeiten in allen unseren Flügen enthalten
Genießen Sie kostenlos zubereitete Mahlzeiten während des Fluges
- Mehr erfahren
Freies Gepäck für Ihre Reise
Reisen Sie stressfrei mit kostenloser Gepäckaufgabe
- Mehr erfahren
Unterhaltung an Bord
Genießen Sie die neuesten Filme und Musik während des Fluges
- Mehr erfahren
Mehr Beinfreiheit in allen unseren Flügen
Dehnen Sie sich aus und genießen Sie erhöhten Komfort während des Fluges
Willkommen bei Safar Flyer, unserem Treueprogramm
Sammeln Sie Meilen bei jedem Flug oder jeder Aktivität mit unserer Fluggesellschaft und unseren Partnern
Lösen Sie Ihre Meilen für exklusive Prämien ein