EN

Choose your language

Search

Royal Air Maroc

A city of colors, scents, and timeless charm.

Let the Journey Begin

No flights found!

                                   
An error occurred while processing the template.
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> 

Welcome to Safar Flyer, our loyalty program

  • Earn Miles on every flight or activity with our airline and non-airline partners

  • Redeem your Miles for exclusive rewards

  • Image Alternative Text
    Join now

    Download our app

    Unlock a world of convenience with our app! Whether you're looking for personalized offers, quick customer support, or a flawless user experience. Don’t miss out!