DE

Sprache auswählen

Suche

Royal Air Maroc

Eine Stadt voller Farben, Düfte und zeitlosem Charme.

Jetzt starten

Keine Flüge gefunden!

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> 

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

  • Image Alternative Text
    Jetzt beitreten

    Lade unsere neue App herunter

    Entdecke eine Welt voller Komfort mit unserer App! Ob du personalisierte Angebote, schnellen Kundenservice oder ein makelloses Nutzererlebnis suchst – verpasse es nicht!