The following has evaluated to null or missing: ==> getVocabularyGlobalEntero(themeDisplay.getLayout().getGroupId(),hotel,"Destinos") [in template "20097#20123#317547" at line 57, column 91] ---- 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 categoriaHotel = getVocabular... [in template "20097#20123#317547" in macro "pintarCuadroMobile" at line 57, column 65] - Reached through: @pintarCuadroMobile c=c.destino [in template "20097#20123#317547" at line 120, column 25] ----
1<#assign classLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") />
2<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
3<#assign group = groupLocalService.fetchFriendlyURLGroup(themeDisplay.getCompanyId(), "/global") />
4<#assign classNameId = classLocalService.getClassName("com.liferay.dynamic.data.mapping.model.DDMStructure").getClassNameId() />
5<#include "_TEMPLATE_CONTEXT_/${themeDisplay.getCompanyId()}/${group.getGroupId()}/${classNameId}/249903" />
6<#assign journalLocalServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
7<#assign dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") />
8
9<#macro pintarCuadro(c)>
10 <#if (c.imagen.getData())?? && c.imagen.getData() != "">
11 <@adaptive_media_image["img"] fileVersion=dlAppService.getFileEntry(c.imagen.getAttribute("fileEntryId")?number).getFileVersion() alt="${c.imagen.getAttribute('alt')}" loading="lazy" />
12 </#if>
13 <div class="w-100 h-100 d-flex flex-column justify-content-between">
14 <section class="p-20">
15 <h2 class="tituloH4 mb-0 d-inline-block text-uppercase mr-2"><#if (c.ciudad.getData())??>${c.ciudad.getData()}</#if></h2>
16 <span class="light-15"><#if (c.pais.getData())??>${c.pais.getData()}</#if></span>
17 <#assign listaHotelesBorrar = []/>
18 <#list listaHotelesUnicos as hotel>
19 <#assign categoriaHotel = getVocabularyGlobalEntero(themeDisplay.getLayout().getGroupId(),hotel,"Destinos") />
20 <#if categoriaHotel?? && categoriaHotel!="" && (categoriaHotel.getName()?lower_case)?contains(c.ciudad.getData()?lower_case)>
21 <#assign nHoteles += 1/>
22 <#assign listaHotelesBorrar = listaHotelesBorrar + [hotel]/>
23 </#if>
24 </#list>
25 <#assign listaNueva = []/>
26 <#list listaHotelesUnicos as hotel>
27 <#if !listaHotelesBorrar?seq_contains(hotel)>
28 <#assign listaNueva = listaNueva + [hotel]/>
29 </#if>
30 </#list>
31 <#assign listaHotelesUnicos = listaNueva/>
32
33 <p class="light-paragraph-13"><#if nHoteles??>${nHoteles} <#if nHoteles gt 1>${languageUtil.get(themeDisplay.getLocale(), 'hotels')}<#else>${languageUtil.get(themeDisplay.getLocale(), 'hotel')}</#if></#if></p>
34 </section>
35 <section class="p-y-16 p-x-24">
36 <p class="text-right regular-15 mb-0"><#if (c.desde.getData())??>${c.desde.getData()}</#if></p>
37 <p class="text-right precioSmall mb-0"><#if (c.precio.getData())??>${c.precio.getData()}</#if></p>
38 <p class="text-right regular-15 mb-0"><#if (c.persNoche.getData())??>${c.persNoche.getData()}</#if></p>
39 </section>
40 </div>
41</#macro>
42
43<#macro pintarCuadroMobile(c)>
44 <#if (c.ImagenMobile.getData())?? && c.ImagenMobile.getData() != "">
45 <@adaptive_media_image["img"] fileVersion=dlAppService.getFileEntry(c.ImagenMobile.getAttribute("fileEntryId")?number).getFileVersion() alt="${c.ImagenMobile.getAttribute('alt')}" loading="lazy" />
46 <#else>
47 <#if (c.imagen.getData())?? && c.imagen.getData() != "">
48 <@adaptive_media_image["img"] fileVersion=dlAppService.getFileEntry(c.imagen.getAttribute("fileEntryId")?number).getFileVersion() alt="${c.imagen.getAttribute('alt')}" loading="lazy" />
49 </#if>
50 </#if>
51 <div class="w-100 h-100 d-flex flex-column justify-content-between p-15">
52 <section class="">
53 <h2 class="regular-15 mb-0 text-uppercase d-inline-block mr-2"><#if (c.ciudad.getData())??>${c.ciudad.getData()}</#if></h2>
54 <span class="light-15"><#if (c.pais.getData())??>${c.pais.getData()}</#if></span>
55 <#assign listaHotelesBorrar = []/>
56 <#list listaHotelesUnicosMobile as hotel>
57 <#assign categoriaHotel = getVocabularyGlobalEntero(themeDisplay.getLayout().getGroupId(),hotel,"Destinos") />
58 <#if categoriaHotel?? && categoriaHotel!="" && (categoriaHotel.getName()?lower_case)?contains(c.ciudad.getData()?lower_case)>
59 <#assign nHoteles += 1/>
60 <#assign listaHotelesBorrar = listaHotelesBorrar + [hotel]/>
61 </#if>
62 </#list>
63 <#assign listaNueva = []/>
64 <#list listaHotelesUnicosMobile as hotel>
65 <#if !listaHotelesBorrar?seq_contains(hotel)>
66 <#assign listaNueva = listaNueva + [hotel]/>
67 </#if>
68 </#list>
69 <#assign listaHotelesUnicosMobile = listaNueva/>
70
71 <p class="light-paragraph-13 mb-0"><#if nHoteles??>${nHoteles} <#if nHoteles gt 1>${languageUtil.get(themeDisplay.getLocale(), 'hotels')}<#else>${languageUtil.get(themeDisplay.getLocale(), 'hotel')}</#if></#if></p>
72 </section>
73 <section class="">
74 <p class="text-right regular-15 mb-0"><#if (c.desde.getData())??>${c.desde.getData()}</#if></p>
75 <p class="text-right precioSmall mb-0"><#if (c.precio.getData())??>${c.precio.getData()}</#if></p>
76 <p class="text-right regular-15 mb-0"><#if (c.persNoche.getData())??>${c.persNoche.getData()}</#if></p>
77 </section>
78 </div>
79</#macro>
80
81<section class="p-yt-75 bg-white" loading="lazy">
82 <section class="mwidth-1440 p-x-48 m-yb-25-40">
83 <h1 class="tituloH2 text-uppercase fuente-titulos m-yb-25-40"><#if (titulo.getData())??>${titulo.getData()}</#if></h1>
84 <section class="desplegable">
85 <section class="light-15 mb-0 texto">
86 <#if (Texto.getData())??>${Texto.getData()?replace("<p>","")?replace("</p>","")}</#if>
87 </section>
88 <button class="btn-leer-mas px-0">${languageUtil.get(themeDisplay.getLocale(), 'read-more')}</button>
89 </section>
90 </section>
91
92<#assign listaOrdenar = [] />
93<#if cuadricula.getSiblings()?has_content>
94 <#list cuadricula.getSiblings() as c>
95 <#assign listaOrdenar += [{"orden": c["ordenMobile"]["data"] , "destino": c }]/>
96 </#list>
97</#if>
98<#assign listaOrdenada = listaOrdenar?sort_by("orden")/>
99
100<#assign listaHoteles= journalLocalServiceUtil.getStructureArticles(47016) />
101<#assign listaHotelesUnicos = [] />
102<#assign listaHotelesUnicosMobile = []/>
103<#list listaHoteles as hotel>
104 <#if hotel?? && !hotel.isInTrash() && journalLocalServiceUtil.isLatestVersion(hotel.getGroupId(), hotel.getArticleId(), hotel.getVersion()) && hotel.getGroupId()=themeDisplay.getScopeGroupId()>
105 <#assign listaHotelesUnicos = listaHotelesUnicos + [hotel.getArticleId()] />
106 <#assign listaHotelesUnicosMobile = listaHotelesUnicosMobile + [hotel.getArticleId()] />
107 </#if>
108</#list>
109
110 <section class="">
111 <!-- Slider mobile -->
112 <div class="d-flex d-xl-none imagenes-slider sliderHorizontal swiper">
113 <div class="swiper-wrapper">
114 <#if listaOrdenada?has_content>
115 <#list listaOrdenada as c>
116 <#assign nHoteles = 0/>
117 <#if c?is_first>
118 <a href="javascript:void(0);" class="card-mobile swiper-slide">
119 <article class="card-destino d-inline-block ml-0">
120 <@pintarCuadroMobile c=c.destino/>
121 </article>
122 </a>
123 <#elseif c?is_last>
124 <a href="javascript:void(0);" class="card-mobile swiper-slide">
125 <article class="card-destino d-inline-block mr-0">
126 <@pintarCuadroMobile c=c.destino/>
127 </article>
128 </a>
129 <#else>
130 <a href="javascript:void(0);" class="card-mobile swiper-slide">
131 <article class="card-destino d-inline-block">
132 <@pintarCuadroMobile c=c.destino/>
133 </article>
134 </a>
135 </#if>
136 </#list>
137 </#if>
138 </div>
139 <section class="btn-prev-container position-absolute d-flex align-items-center"
140 style="transform: translateY(150px)">
141 <button class="btn-prev p-0">
142 <svg xmlns="http://www.w3.org/2000/svg" width="71" height="71" viewBox="0 0 71 71"
143 fill="none">
144 <rect width="71" height="71" transform="matrix(-1 0 0 1 71 0)" fill="white"
145 fill-opacity="0.7" />
146 <path d="M40.6069 47.4817L28.4529 35.4583" stroke="black" stroke-width="0.5" />
147 <line y1="-0.25" x2="17.7255" y2="-0.25"
148 transform="matrix(-0.707107 0.707107 0.707107 0.707107 40.9211 23.0098)"
149 stroke="black" stroke-width="0.5" />
150 </svg>
151 </button>
152 </section>
153 <section class="btn-next-container position-absolute d-flex align-items-center"
154 style="transform: translateY(150px)">
155 <button class="btn-next p-0">
156 <svg xmlns="http://www.w3.org/2000/svg" width="71" height="71" viewBox="0 0 71 71"
157 fill="none">
158 <rect width="71" height="71" fill="white" fill-opacity="0.7" />
159 <path d="M30.3931 47.4817L42.5471 35.4583" stroke="black" stroke-width="0.5" />
160 <line x1="30.2557" y1="22.833" x2="42.7895" y2="35.3668" stroke="black"
161 stroke-width="0.5" />
162 </svg>
163 </button>
164 </section>
165 </div>
166
167
168
169 <#assign contad =0>
170 <div class="d-none d-xl-flex row imagenes-cuadricula p-x-48">
171 <#if cuadricula.getSiblings()?has_content>
172 <#assign hay25 = 0>
173 <#assign tamColumna = 0>
174 <#assign nFilas = 0>
175 <#list cuadricula.getSiblings() as c>
176 <#assign nHoteles = 0/>
177 <#if (nFilas<3)>
178 <#if tamColumna == 0>
179 <#if (c.Tamano.getData()?number==100)>
180 <!-- Caso1-->
181 <section class="col-4 p-0 pr-1">
182 <#if hay25==1>
183 <#assign hay25 = 0>
184 <#assign tamColumna = tamColumna+25>
185 </#if>
186 <a href="javascript:void(0);" class="tarjeta">
187 <article class="card-destino sombra-bloque m-0 mb-2" style="height: 446px;">
188 <@pintarCuadro c=c/>
189 </article>
190 </a>
191 <#assign tamColumna = tamColumna+100>
192
193 <#elseif (c.Tamano.getData()?number==50)>
194 <!-- Caso2-->
195 <section class="col-4 p-0 px-1">
196 <#if hay25==1>
197 <#assign hay25 = 0>
198 <#assign tamColumna = tamColumna+25>
199 </#if>
200 <a href="javascript:void(0);" class="tarjeta">
201 <article class="card-destino sombra-bloque mb-2" style="height: 219px;">
202 <@pintarCuadro c=c/>
203 </article>
204 </a>
205 <#assign tamColumna = tamColumna+50>
206
207 <#elseif (c.Tamano.getData()?number==25)>
208 <!-- Caso3-->
209 <section class="col-4 p-0 px-1">
210 <#if (hay25==0)>
211 <a href="javascript:void(0);" class="tarjeta">
212 <article class="card-destino sombra-bloque mb-2" style="height: 219px;">
213 <@pintarCuadro c=c/>
214 </article>
215 </a>
216 <#assign hay25 = 1>
217 <#assign tamColumna = tamColumna+25>
218 <#else>
219 <a href="javascript:void(0);" class="tarjeta">
220 <article class="card-destino sombra-bloque mb-2" style="height: 219px;">
221 <@pintarCuadro c=c/>
222 </article>
223 </a>
224 <#assign hay25 = 0>
225 <#assign tamColumna = tamColumna+25>
226 </#if>
227
228 </#if>
229
230 <#elseif (tamColumna + c.Tamano.getData()?number > 150)>
231 <#if hay25==1>
232 <#assign hay25 = 0>
233 <#assign tamColumna = tamColumna+25>
234 </#if>
235 <#assign tamColumna = 0>
236 </section>
237 <!-- Fin columna-->
238 <#assign nFilas = nFilas+1>
239
240 <#if (contad==1)>
241 </section>
242 </#if>
243
244 <#assign contad =0>
245 <#if (nFilas<3)>
246 <section class="col-4 p-0 px-1">
247 <#if (c.Tamano.getData()?number==100)>
248 <!-- Caso4-->
249 <#if hay25==1>
250 <#assign hay25 = 0>
251 <#assign tamColumna = tamColumna+25>
252 </#if>
253 <a href="javascript:void(0);" class="tarjeta">
254 <article class="card-destino sombra-bloque m-0">
255 <@pintarCuadro c=c/>
256 </article>
257 </a>
258 <#assign tamColumna = tamColumna+100>
259 <#elseif (c.Tamano.getData()?number==50)>
260 <!-- Caso5-->
261 <#if hay25==1>
262 <#assign hay25 = 0>
263 <#assign tamColumna = tamColumna+25>
264 </#if>
265 <a href="javascript:void(0);" class="tarjeta">
266 <article class="card-destino sombra-bloque mb-2" style="height: 219px;">
267 <@pintarCuadro c=c/>
268 </article>
269 </a>
270 <#assign tamColumna = tamColumna+50>
271 <#elseif (c.Tamano.getData()?number==25)>
272 <!-- Caso6-->
273
274 <#if (hay25==0)>
275 <a href="javascript:void(0);" class="tarjeta">
276 <article class="card-destino sombra-bloque m-0">
277 <@pintarCuadro c=c/>
278 </article>
279 </a>
280 <#assign hay25 = 1>
281 <#assign tamColumna = tamColumna+25>
282 <#else>
283 <a href="javascript:void(0);" class="tarjeta">
284 <article class="card-destino sombra-bloque m-0">
285 <@pintarCuadro c=c/>
286 </article>
287 </a>
288 <#assign hay25 = 0>
289 <#assign tamColumna = tamColumna+25>
290 </#if>
291 </#if>
292
293 </#if>
294
295 <#else> <!-- Columna mayor que 0 -->
296 <#if (c.Tamano.getData()?number==100)>
297 <!-- Caso7-->
298 <#if hay25==1>
299 <#assign hay25 = 0>
300 <#assign tamColumna = tamColumna+25>
301 </#if>
302 <a href="javascript:void(0);" class="tarjeta">
303 <article class="card-destino sombra-bloque" style="height: 446px;">
304 <@pintarCuadro c=c/>
305 </article>
306 </a>
307 <#assign tamColumna = tamColumna+100>
308 <#elseif (c.Tamano.getData()?number==50)>
309 <!-- Caso8-->
310 <#if hay25==1>
311 <#assign hay25 = 0>
312 <#assign tamColumna = tamColumna+25>
313 </#if>
314 <a href="javascript:void(0);" class="tarjeta">
315 <article class="card-destino sombra-bloque mb-2" style="height: 219px;">
316 <@pintarCuadro c=c/>
317 </article>
318 </a>
319 <#assign tamColumna = tamColumna+50>
320 <#elseif (c.Tamano.getData()?number==25)>
321 <!-- Caso9-->
322 <#if (contad==0)>
323 <section class="col row row-cols-2 p-0">
324 <#assign contad =contad + 1>
325 </#if>
326 <#if hay25==0>
327 <!-- Caso9.1-->
328 <a href="javascript:void(0);" class="tarjeta">
329 <article class="col card-destino p-0 pr-1" style="height: 219px">
330 <@pintarCuadro c=c/>
331 </article>
332 </a>
333 <#assign hay25 = 1>
334 <#assign tamColumna = tamColumna+25>
335 <#else>
336 <!-- Caso9.2-->
337 <a href="javascript:void(0);" class="tarjeta">
338 <article class="col card-destino p-0 pl-1" style="height: 219px">
339 <@pintarCuadro c=c/>
340 </article>
341 </a>
342 <#assign hay25 = 0>
343 <#assign tamColumna = tamColumna+25>
344 </#if>
345 </#if>
346
347
348
349 </#if>
350 </#if>
351 </#list>
352 </#if>
353 </div>
354</section>

ATENCIÓN PERSONALIZADA Y CERCANA
En el Grupo Lopesan queremos que todos nuestros huéspedes vivan una experiencia inolvidable durante sus vacaciones. Nuestros establecimientos ofrecen numersoas alternativas de ocio y bienestar, una cuidada y exquisita gastronomía y todas las comodidades que una buena habitación de hotel merece. Nuestras diferentes marcas intentan dar respuesta a las necesidades de los huéspedes más exigentes.
Nuestro objetivo es fabricar recuerdos felices. Por eso, cada vez que los clientes acceden a un hotel o Resort de Lopesan, nuestro equipo estará preparado para darle la más cálida bienvenida. Se les atenderá y se les ayudará a resolver cualquier duda o cuestión, se les ofrecerá informaicón sobre el destino y haremos todo lo que esté en nuestra mano para que sus vacaciones sean idílicas y perfectas.

ARQUITECTURA CUIDADA Y DIFERENCIADA
En el Grupo Lopesan queremos que todos nuestros huéspedes vivan una experiencia inolvidable durante sus vacaciones. Nuestros establecimientos ofrecen numersoas alternativas de ocio y bienestar, una cuidada y exquisita gastronomía y todas las comodidades que una buena habitación de hotel merece. Nuestras diferentes marcas intentan dar respuesta a las necesidades de los huéspedes más exigentes.
Nuestro objetivo es fabricar recuerdos felices. Por eso, cada vez que los clientes acceden a un hotel o Resort de Lopesan, nuestro equipo estará preparado para darle la más cálida bienvenida. Se les atenderá y se les ayudará a resolver cualquier duda o cuestión, se les ofrecerá informaicón sobre el destino y haremos todo lo que esté en nuestra mano para que sus vacaciones sean idílicas y perfectas.
LOPESAN
en el mundo
-
22hoteles
-
8.247habitaciones
-
5países
-
Más de18.000camas
-
3 millonesde estancias en 2019
-
Más de5.000empleados*
-
34%Gestión
-
66%Propiedad