Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> Contacto.Instagram [in template "37703#37743#1558395" at line 501, column 335]
----
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: #if validator.isNotNull(Contacto.Face... [in template "37703#37743#1558395" at line 501, column 57]
----
1<#-- Services -->
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/>
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/>
5<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
6<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
7
8<#-- Reserved vbles -->
9<#assign title = .vars['reserved-article-title'].data>
10<#assign articleId=.vars["reserved-article-id"].data />
11<#assign description=.vars["reserved-article-description"].data />
12<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
13<#assign date=.vars["reserved-article-display-date"].data />
14<#assign request = .vars['request']>
15
16<#-- Init -->
17<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)>
18<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)>
19<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
20<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!>
21<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!>
22<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! />
23<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! />
24<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" />
25
26<#-- Params -->
27<#assign cmd = paramUtil.getString(request, "p_r_p_cmd") />
28
29<#-- Build -->
30<#if Nombre.data?has_content>
31 <#assign title = Nombre.data>
32</#if>
33
34<#assign cssCategoryClass = "">
35<#assign categoryAlojamiento = "">
36<#assign showNRooms = false>
37<#assign showApartments = false>
38<#assign showCampings = false>
39<#assign showCosts = false>
40<#assign categoriesDondeDormir = journalTool.getCategories(themeDisplay.getScopeGroupId(), articleId, ["Dónde dormir"])>
41<#assign caminoCategories = journalTool.getCategories(groupId, journalArticle.getArticleId(), ["Camino"])/>
42
43<#list categoriesDondeDormir as categoryDondeDormir>
44
45 <#-- Tipo de tipoAlojamiento -->
46 <#assign categoryAlojamiento = categoryDondeDormir.getTitle(locale)>
47
48 <#if categoryDondeDormir.name == "Hotel" || categoryDondeDormir.name == "Pensión" || categoryDondeDormir.name == "Hotel-apartamento" || categoryDondeDormir.name == "Hotel Rural" || categoryDondeDormir.name == "Hostal">
49 <#assign cssCategoryClass = "star">
50 <#if categoryDondeDormir.name == "Hotel-apartamento">
51 <#assign showApartments = true>
52 <#else>
53 <#assign showNRooms = true>
54 </#if>
55 <#elseif categoryDondeDormir.name == "Apartamento Turístico" || categoryDondeDormir.name == "Apartamento Rural">
56 <#assign cssCategoryClass = "key">
57 <#assign showApartments = true>
58 <#elseif categoryDondeDormir.name == "Casa rural íntegra" || categoryDondeDormir.name == "Casa rural alquiler por habitaciones">
59 <#assign cssCategoryClass = "triskel">
60 <#assign showNRooms = true>
61 <#elseif categoryDondeDormir.name == "Camping">
62 <#assign cssCategoryClass = "camping">
63 <#assign showCampings = true>
64 <#elseif categoryDondeDormir.name == "Albergue turístico" || categoryDondeDormir.name == "Albergue de peregrinos" || categoryDondeDormir.name == "Albergue juvenil">
65 <#assign cssCategoryClass = "hostel">
66 <#assign showNRooms = true>
67 <#elseif categoryDondeDormir.name == "Vivienda Vacacional" || categoryDondeDormir.name == "Vivienda Uso Turístico">
68 <#assign showNRooms = true>
69 <#elseif categoryDondeDormir.name == "Casa de Aldea íntegra" || categoryDondeDormir.name == "Casa rural alquiler por habitaciones" || categoryDondeDormir.name == "Apartamento rural">
70 <#assign showCosts = true>
71 </#if>
72</#list>
73<#assign showReservaButton = true/>
74<#assign hasCategoryImage = false />
75<#assign esGratis = false/>
76<#assign donativo = false/>
77<#assign precioOrientativo = true/>
78<article class="template ${ddmStructureNameNormalize}" role="article" itemscope itemtype="http://schema.org/LodgingBusiness">
79
80 <header class="article-header-wrapper row no-gutters">
81
82 <div class="article-header-container article-header-container-static">
83 <div class="container">
84 <div class="row no-gutters">
85 <div class="col-md-6">
86 <div class="article-image" style="background-image: url('${articleMainImageThumbnail3}')">
87 <img class="sr-only" src="${articleMainImageThumbnail3}" alt="${languageUtil.format(request,'go-to-x','image')} ${title}" itemprop="image"/>
88 </div>
89 </div>
90 <div class="article-info-wrapper col-md-6">
91 <div class="article-info">
92 <h2 class="article-title" itemprop="name">${title}</h2>
93 <div class="article-list-wrapper">
94
95 <div class="article-info-table">
96 <div class="article-info-table-row">
97 <div class="article-info-table-cell">
98 <ul class="article-list list-unstyled article-list-info">
99 <#if InformacionEspecifica.IconoCategoria.data?has_content>
100 <#assign icono = "${cssCategoryClass}-${InformacionEspecifica.IconoCategoria.data} text-indent-image" />
101 <li class="article-list-item mb-4">
102 <span class="fas fa-tag hide" aria-hidden="true"></span>
103 <span class="hide-accessible">${languageUtil.get(request,"category")}</span>
104 <span class="field-wrapper">
105 <#if categoryAlojamiento?has_content>
106 <span class="field category-alojamiento important">${categoryAlojamiento}</span>
107 </#if>
108 <span class="text ${icono}"><span>${InformacionEspecifica.IconoCategoria.getData()}</span></span>
109 <#if Cadena ?? && validator.isNotNull(Cadena.data)>
110 <span class="text d-block">${Cadena.data}</span>
111 </#if>
112 </span>
113 </li>
114 <#else>
115 <li class="article-list-item mb-4">
116 <span class="field-wrapper">
117 <#if categoryAlojamiento?has_content>
118 <span class="field category-alojamiento important">${categoryAlojamiento}</span>
119 </#if>
120 </span>
121 </li>
122 </#if>
123 <#if InformacionEspecifica.Plazas.data?has_content>
124 <li class="article-list-item">
125 <span class="fas fa-users" aria-hidden="true"></span>
126 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-plazas")}</span>
127 <span class="field-wrapper">
128 <span class="field">${languageUtil.get(request, "infoasturias-plazas")}:</span>
129 <span class="text">
130 ${InformacionEspecifica.Plazas.data}
131 <#if InformacionEspecifica.PlazasSupletorias.data?has_content>
132 ${languageUtil.format(request,'infoasturias-plazas-supletorias', InformacionEspecifica.PlazasSupletorias.data)}
133 </#if>
134 </span>
135 </span>
136 </li>
137 </#if>
138
139 <#if InformacionEspecifica.NHabitaciones.data?has_content>
140 <li class="article-list-item">
141 <span class="fas fa-bed" aria-hidden="true"></span>
142 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-habitaciones")}</span>
143 <span class="field-wrapper">
144 <span class="field">${languageUtil.get(request, "infoasturias-habitaciones")}:</span>
145 <span class="text">
146 ${InformacionEspecifica.NHabitaciones.data}
147 </span>
148 </span>
149 </li>
150 </#if>
151
152 <#if showNRooms>
153 <#if InformacionEspecifica.NApartamentos.data?has_content>
154 <li class="article-list-item">
155 <span class="fas fa-bed" aria-hidden="true"></span>
156 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-habitaciones")}</span>
157 <span class="field-wrapper">
158 <span class="field">${languageUtil.get(request, "infoasturias-habitaciones")}:</span>
159 <span class="text">${InformacionEspecifica.NApartamentos.data}</span>
160 </span>
161 </li>
162 </#if>
163
164 <#if InformacionEspecifica.CapacidadApartamentos.data?has_content>
165 <li class="article-list-item">
166 <span class="fas fa-building" aria-hidden="true"></span>
167 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-apartamentos")}</span>
168 <span class="field-wrapper">
169 <span class="field">${languageUtil.get(request, "infoasturias-apartamentos")}:</span>
170 <span class="text">
171 <#list InformacionEspecifica.CapacidadApartamentos.getSiblings() as capacidadApartamento>
172 ${capacidadApartamento.data} <#if !capacidadApartamento?is_last>, </#if>
173 </#list>
174 </span>
175 </span>
176 </li>
177 </#if>
178 </#if>
179
180 <#if showApartments>
181 <#if InformacionEspecifica.NApartamentos.data?has_content>
182 <li class="article-list-item">
183 <span class="fas fa-bed" aria-hidden="true"></span>
184 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-apartamentos")}</span>
185 <span class="field-wrapper">
186 <span class="field">${languageUtil.get(request, "infoasturias-apartamentos")}:</span>
187 <span class="text">${InformacionEspecifica.NApartamentos.data}</span>
188 </span>
189 </li>
190 </#if>
191
192 <#if InformacionEspecifica.CapacidadApartamentos.data?has_content>
193 <li class="article-list-item">
194 <span class="fas fa-building" aria-hidden="true"></span>
195 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-apartamentos")}</span>
196 <span class="field-wrapper">
197 <span class="field">${languageUtil.get(request, "infoasturias-apartamentos-capacidad")}:</span>
198 <span class="text">
199 <#list InformacionEspecifica.CapacidadApartamentos.getSiblings() as capacidadApartamento>
200 ${capacidadApartamento.data} <#if !capacidadApartamento?is_last>- </#if>
201 </#list>
202 </span>
203 </span>
204 </li>
205 </#if>
206 </#if>
207
208 <#if showCampings>
209 <li class="article-list-item">
210 <span class="fas fa-warehouse" aria-hidden="true"></span>
211 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-parcelas")}</span>
212 <span class="field-wrapper">
213 <span class="field">${languageUtil.get(request, "infoasturias-parcelas")}:</span>
214 <span class="text">${InformacionEspecifica.NParcelas.data}</span>
215 </span>
216 </li>
217 </#if>
218 </ul>
219 </div>
220 <#if Peregrinos ??>
221 <#if getterUtil.getBoolean(Peregrinos.AdmiteReservas.getData())>
222 <#assign showReservaButton = false/>
223 </#if>
224 <#if Peregrinos.BookingWeb?? && Peregrinos.BookingWeb.data?has_content>
225 <#assign UrlBooking = Peregrinos.BookingWeb.getData() />
226 <#assign isExternalLink = !UrlBooking?starts_with("/") && !UrlBooking?contains(themeDisplay.getPortalURL()) />
227 <a href="${htmlUtil.escapeHREF(UrlBooking)}" class="btn btn-primary btn-small text-center text-uppercase"
228 <#if isExternalLink>
229 target="_blank"
230 rel="noopener noreferrer"
231 aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')} (${languageUtil.get(request,'opens-new-window')})"
232 </#if>>
233 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="${languageUtil.format(request,'go-to-x', 'infoasturias-reservar-ahora')}" aria-hidden="true" role="presentation"/>
234 <span class="btn-text">
235 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
236 </span>
237 </a>
238 <#assign showReservaButton = false/>
239 </#if>
240 </#if>
241 <#if Contacto.Email.data?has_content || CodigoDGT.data?has_content>
242 <#if showReservaButton>
243 <div class="article-info-table-cell align-middle">
244 <#if Contacto.Email.data?has_content>
245 <#assign params = {"displayStyle": "ddmTemplate_441008", "portletId": portletTool.getPortletId(request), "articleId": "${articleId}"}>
246 <#assign portletURL = portletTool.createURL(request, "as_asac_adtvisor_portlet_AdtVisorDialogPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", params) />
247 <button type="button" class="btn btn-primary btn-small text-center text-uppercase hide btn-availability-request" aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')}" onclick="event.preventDefault(); showDialogIframe('${portletURL}','${languageUtil.get(request,'infoasturias-solicitud-reserva')}', '', '','formularioReserva', 'formularioReservaIframe');" >
248 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="" aria-hidden="true" role="presentation">
249 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
250 </button>
251 </#if>
252 <#if CodigoDGT.data?has_content>
253 <#assign paramsMap = {"accommodationCode": CodigoDGT.data, "jspPage": "/html/results/accommodation/accommodation.jsp"} />
254 <#assign bookingURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingResultsPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", paramsMap) />
255 <button type="button" class="btn btn-primary btn-small text-center text-uppercase hide btn-accommodation-booking" aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')}" onclick="event.preventDefault(); showDialogIframe('${bookingURL}','${languageUtil.get(request,'infoasturias-solicitud-reserva')}', '800px', '','formularioReserva', 'formularioReservaIframe');">
256 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="" aria-hidden="true" role="presentation">
257 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
258 </button>
259 </#if>
260 </div>
261 </#if>
262 </#if>
263 </div>
264 </div>
265 <div class="article-list-wrapper pt-3">
266 <ul class="article-list list-unstyled article-list-info">
267 <li class="article-list-item mb-2 pl-2">
268 <#if caminoCategories?size !=0>
269 <#if (caminoCategories?size ==2)>
270 <div class="col-9 d-table-cell align-middle">
271 <#list caminoCategories as ctg>
272 <#if ctg.getParentCategoryId() == 0>
273 <#assign imageCategoryUuid = assetCategoryTool.getCategoryProperty(ctg.getCategoryId(), "image")/>
274 <#if validator.isNotNull(imageCategoryUuid)>
275 <#assign imagePath = dlTool.getPathByUuid(imageCategoryUuid, groupId)/>
276 <#if validator.isNotNull(imagePath) && !hasCategoryImage>
277 <#assign hasCategoryImage = true />
278 <div class="d-block pull-left mr-3 mb-4">
279 <img alt="Camino de Santiago" src="${imagePath}">
280 </div>
281 </#if>
282 </#if>
283 <div class="field-wrapper text-uppercase d-block">
284 <span class="field">${languageUtil.get(request, "infoasturias-itinerario")}:</span>
285 <span class="text">${ctg.getTitle(locale)}</span>
286 </div>
287 <#elseif ctg.getParentCategoryId() != 0>
288 <div class="field-wrapper">
289 <span class="text">${ctg.getTitle(locale)}</span>
290 </div>
291 </#if>
292 </#list>
293 </div>
294 <#elseif (caminoCategories?size gt 2)>
295 <div class="col-9 d-table-cell align-middle">
296 <#list caminoCategories as ctg>
297 <#if ctg.getParentCategoryId() == 0>
298 <#assign imageCategoryUuid = assetCategoryTool.getCategoryProperty(ctg.getCategoryId(), "image")/>
299 <#if validator.isNotNull(imageCategoryUuid)>
300 <#assign imagePath = dlTool.getPathByUuid(imageCategoryUuid, groupId)/>
301 <#if validator.isNotNull(imagePath) && !hasCategoryImage>
302 <#assign hasCategoryImage = true />
303 <div class="d-block pull-left mr-3 mb-4">
304 <img alt="Camino de Santiago" src="${imagePath}">
305 </div>
306 </#if>
307 </#if>
308 <div class="field-wrapper text-uppercase d-block">
309 <span class="field">${languageUtil.get(request, "infoasturias-itinerario")}:</span>
310 <span class="text">${ctg.getTitle(locale)}</span>
311 </div>
312 <#list caminoCategories as childCtg>
313 <#if ctg.getCategoryId() == childCtg.getParentCategoryId()>
314 <div class="field-wrapper">
315 <span class="text">${childCtg.getTitle(locale)}</span>
316 </div>
317 </#if>
318 </#list>
319 </#if>
320 </#list>
321 </div>
322 </#if>
323 </#if>
324 </li>
325 <#if Peregrinos ??>
326 <#if Peregrinos.Exclusivo.data?has_content>
327 <#assign exclusivoKey = journalTool.getDDMStructureSelectKeyByJournalArticle(journalArticle, "Exclusivo", Peregrinos.Exclusivo.getData(), locale)/>
328 <#if validator.isNotNull(exclusivoKey)>
329 <li class="article-list-item mb-4 pl-4 separator-peregrinos">
330 <span class="field-wrapper">
331 <span class="field">${languageUtil.get(request, "infoasturias-peregrinos-exclusivo")}:</span>
332 <span class="text">${exclusivoKey} </span>
333 </span>
334 </li>
335 </#if>
336 </#if>
337 </#if>
338 <li class="article-list-item mb-4">
339 <span class="fas fa-map-marker-alt" aria-hidden="true"></span>
340 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
341 <span class="field-wrapper" itemprop="address">
342 <#if Contacto.Concejo.data?has_content>
343 <span class="important">${Contacto.Concejo.data}</span>
344 <#else>
345 <span class="important">${title}</span>
346 </#if>
347 <#if Contacto.Zona.data?has_content>
348 <span class="text d-block">${Contacto.Zona.data}</span>
349 </#if>
350
351 </span>
352 </li>
353 <#if validator.isNotNull(Contacto.Direccion.data) || validator.isNotNull(Contacto.CP.data) || validator.isNotNull(Contacto.Localidad.data)>
354 <li class="article-list-item">
355 <span class="far fa-address-card" aria-hidden="true"></span>
356 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
357 <span class="field-wrapper">
358 <span class="field">${languageUtil.get(request, "address")}:</span>
359 <span class="text">${Contacto.Direccion.data}</span>
360 <span class="text"> ■ ${Contacto.CP.data} - ${Contacto.Localidad.data}</span>
361 </span>
362 </li>
363 </#if>
364
365 <#if Contacto.Telefono.data?has_content>
366 <li class="article-list-item">
367 <span class="fas fa-phone-alt" aria-hidden="true"></span>
368 <span class="hide-accessible">${languageUtil.get(request,"phone")}</span>
369 <span class="field-wrapper">
370 <span class="field">${languageUtil.get(request, "phone")}:</span>
371 <#list Contacto.Telefono.getSiblings() as telephone>
372 <#assign numberTelefono = telephone.data?replace(" ", "")/>
373 <#assign numberLength = numberTelefono?length/>
374 <#if numberLength == 9>
375 <#assign number = "+34${numberTelefono}"/>
376 <#else>
377 <#assign number = numberTelefono/>
378 </#if>
379 <span class="text">
380 <a href="tel:${number}" itemprop="telephone">${telephone.data}</a>
381 <#if !telephone?is_last>|</#if>
382 </span>
383 </#list>
384 </span>
385 </li>
386 </#if>
387 <#if Contacto.whatsapp ??>
388 <#if Contacto.whatsapp.data?has_content>
389 <#assign numberWhatsapp = Contacto.whatsapp.data?replace(" ", "")/>
390 <li class="article-list-item">
391 <span class="fab fa-whatsapp" aria-hidden="true"></span>
392 <span class="hide-accessible">WhatsApp</span>
393 <span class="field-wrapper">
394 <span class="field">WhatsApp:</span>
395 <span class="text" itemprop="telephone"><a href="https://wa.me/34${numberWhatsapp}">${Contacto.whatsapp.data}</a></span>
396 </span>
397 </li>
398 </#if>
399 </#if>
400 <#if Contacto.Email.data?has_content>
401 <li class="article-list-item">
402 <span class="far fa-envelope" aria-hidden="true"></span>
403 <span class="hide-accessible">${languageUtil.get(request,"email")}</span>
404 <span class="field-wrapper">
405 <span class="field">${languageUtil.get(request, "email")}:</span>
406 <#list Contacto.Email.getSiblings() as email>
407 <span class="text">
408 <a class="" href="mailto:${email.data}" title="${languageUtil.format(request,'send-email-to-x', 'email')}" itemprop="email">${email.data}</a>
409 <#if !email?is_last>|</#if>
410 </span>
411 </#list>
412 </span>
413 </li>
414 </#if>
415 <#if Contacto.Web.data?has_content>
416<#if Contacto.Web?? && Contacto.Web.getSiblings()?has_content>
417 <li class="article-list-item web">
418 <span class="fas fa-link" aria-hidden="true"></span>
419 <span class="field-wrapper">
420 <span class="field">${languageUtil.get(request, "site")}:</span>
421 <#assign webCount = Contacto.Web.getSiblings()?size />
422 <#list Contacto.Web.getSiblings() as web>
423 <#assign linkURL = web.data/>
424 <#if !stringUtil.startsWith(linkURL, "http")>
425 <#assign linkURL = "https://${web.data}"/>
426 </#if>
427 <#assign linkNumber = web?index + 1 />
428 <a href="${linkURL}"
429 target="_blank"
430 rel="noopener noreferrer"
431 aria-label="${languageUtil.get(request, 'site')} ${linkNumber} - ${title} ${languageUtil.get(request, 'opens-new-window')}"
432 class="text"
433 itemprop="url">
434 <#if webCount gt 1>
435 ${languageUtil.get(request, "visit")} ${linkNumber}
436 <#else>
437 ${languageUtil.get(request, "visit")}
438 </#if>
439 <span class="fas fa-external-link-alt" aria-hidden="true"></span>
440 </a><#if !web?is_last> </#if>
441 </#list>
442 </span>
443 </li>
444</#if>
445 </#if>
446 <#if Informacion.FechasCierre.data?has_content>
447 <li class="article-list-item mt-4">
448 <span class="fas fa-calendar" aria-hidden="true"></span>
449 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-fechas-de-cierre")}</span>
450 <span class="field-wrapper">
451 <span class="field">${languageUtil.get(request, "infoasturias-fechas-de-cierre")}:</span>
452 <span class="text">${Informacion.FechasCierre.data}</span>
453 </span>
454 </li>
455 </#if>
456 <#if Informacion.AbiertoTodoAno.data?has_content && (Informacion.AbiertoTodoAno.data == "Si" || Informacion.AbiertoTodoAno.data == "Sí" || Informacion.AbiertoTodoAno.data == "SI")>
457 <li class="article-list-item mt-4">
458 <span class="fas fa-door-open" aria-hidden="true"></span>
459 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-abierto-todo-anio")}</span>
460 <span class="field-wrapper">
461 <span class="text">${languageUtil.get(request, "infoasturias-abierto-todo-anio")}</span>
462 </span>
463 </li>
464 </#if>
465 <#if Descargas ??>
466 <#if validator.isNotNull(Descargas.Archivo.data)>
467 <#if validator.isNotNull(Descargas.Archivo.data)>
468 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Descargas.Archivo.data) />
469 <#if validator.isNotNull(dlFileEntry)>
470 <#assign ext = dlFileEntry.getExtension()!/>
471 <li class="article-list-item document document-${ext}">
472 <span class="fas fa-file" aria-hidden="true"></span>
473 <span class="hide-accessible">${languageUtil.get(request,"related-documents")}</span>
474 <span class="field-wrapper">
475 <span class="field">${languageUtil.get(request, "related-documents")}:</span>
476 <span class="text">
477 <#list Descargas.Archivo.getSiblings() as Item>
478 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) />
479 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
480 <#if validator.isNotNull(dlFileEntry)>
481 <#if Item.ArchivoTitulo.data?has_content>
482 <a href="${downloadURL}" title='${languageUtil.get(request, "${Item.ArchivoTitulo.data}")} ${htmlUtil.escape(title)}' class="">${Item.ArchivoTitulo.data}</a>
483 <#if Item_has_next>, </#if>
484 <#else>
485 <a href="${downloadURL}" title='${languageUtil.get(request, "${dlFileEntry.getTitle()}")} ${htmlUtil.escape(title)}' class="">${dlFileEntry.getTitle()}</a>
486 <#if Item_has_next>, </#if>
487 </#if>
488 </#if>
489 </#list>
490 </span>
491 </span>
492 </li>
493 </#if>
494 </#if>
495 </#if>
496 </#if>
497 </ul>
498 </div>
499 </div>
500
501 <#if validator.isNotNull(Contacto.Facebook.data) || validator.isNotNull(Contacto.Twitter.data) || validator.isNotNull(Contacto.Youtube.data) || Contacto.TikTok?? && validator.isNotNull(Contacto.TikTok.data) || validator.isNotNull(Contacto.Pinterest.data) || validator.isNotNull(Contacto.Instagram.data)>
502 <div class="article-socials-wrapper mt-4">
503 <div class="socials-wrapper">
504 <div class="socials">
505 <ul class="list-inline items socials">
506 <#if Contacto.Facebook.data?has_content>
507 <#assign linkURL = Contacto.Facebook.data/>
508 <#if !stringUtil.startsWith(linkURL, "http")>
509 <#assign linkURL = "https://${Contacto.Facebook.data}"/>
510 </#if>
511 <li class="list-inline-item item facebook">
512 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Facebook')}" onclick="this.target='_blank'">
513 <span class="fab fa-facebook-f">
514 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span>
515 </span>
516 </a>
517 </li>
518 </#if>
519 <#if Contacto.Twitter.data?has_content>
520 <#assign linkURL = Contacto.Twitter.data/>
521 <#if !stringUtil.startsWith(linkURL, "http")>
522 <#assign linkURL = "https://${Contacto.Twitter.data}"/>
523 </#if>
524 <li class="list-inline-item item twitter">
525 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Twitter')}" onclick="this.target='_blank'">
526 <span class="fa-brands fa-x twitter">
527 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Twitter')}</span>
528 </span>
529 </a>
530 </li>
531 </#if>
532 <#if Contacto.Youtube.data?has_content>
533 <#assign linkURL = Contacto.Youtube.data/>
534 <#if !stringUtil.startsWith(linkURL, "http")>
535 <#assign linkURL = "https://${Contacto.Youtube.data}"/>
536 </#if>
537 <li class="list-inline-item item youtube">
538 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Youtube')}" onclick="this.target='_blank'">
539 <span class="fab fa-youtube">
540 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Youtube')}</span>
541 </span>
542 </a>
543 </li>
544 </#if>
545 <#if Contacto.TikTok??>
546 <#if Contacto.TikTok.data?has_content>
547 <#assign linkURL = Contacto.TikTok.data/>
548 <#if !stringUtil.startsWith(linkURL, "http")>
549 <#assign linkURL = "https://${Contacto.TikTok.data}"/>
550 </#if>
551 <li class="list-inline-item item tiktok">
552 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Tiktok')}" onclick="this.target='_blank'">
553 <span class="fab fa-tiktok">
554 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Tiktok')}</span>
555 </span>
556 </a>
557 </li>
558 </#if>
559 </#if>
560 <#if Contacto.Pinterest.data?has_content>
561 <#assign linkURL = Contacto.Pinterest.data/>
562 <#if !stringUtil.startsWith(linkURL, "http")>
563 <#assign linkURL = "https://${Contacto.Pinterest.data}"/>
564 </#if>
565 <li class="list-inline-item item pinterest">
566 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Pinterest')}" onclick="this.target='_blank'">
567 <span class="fab fa-pinterest-p">
568 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span>
569 </span>
570 </a>
571 </li>
572 </#if>
573 <#if Contacto.Instagram??>
574 <#if Contacto.Instagram.data?has_content>
575 <#assign linkURL = Contacto.Instagram.data/>
576 <#if !stringUtil.startsWith(linkURL, "http")>
577 <#assign linkURL = "https://${Contacto.Instagram.data}"/>
578 </#if>
579 <li class="list-inline-item item instagram">
580 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Instagram')}" onclick="this.target='_blank'">
581 <span class="fab fa-instagram">
582 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span>
583 </span>
584 </a>
585 </li>
586 </#if>
587 </#if>
588 </ul>
589 </div>
590 </div>
591 </div>
592 </#if>
593 <#if getterUtil.getBoolean(Informacion.QdeCalidad.getData()) || getterUtil.getBoolean(Informacion.AldeasCalidad.getData()) || getterUtil.getBoolean(Informacion.CalidadCasonasAsturianas.getData())>
594 <div class="article-info-table">
595 <ul class="article-list article-list-characteristics article-info-border">
596 <#if getterUtil.getBoolean(Informacion.QdeCalidad.getData())>
597 <li class="list-inline-item">
598 <img class="" src="${themeDisplay.getPathThemeImages()}/icons/qturistica.png" data-toggle="tooltip" data-placement="bottom" title="${languageUtil.get(request, 'infoasturias-qcalidad')}" alt="${languageUtil.get(request, 'infoasturias-qcalidad')}"/></li>
599 </#if>
600 <#if getterUtil.getBoolean(Informacion.AldeasCalidad.getData())>
601 <li class="list-inline-item">
602 <img class="" src="${themeDisplay.getPathThemeImages()}/icons/aldeas_asturianas.png" data-toggle="tooltip" data-placement="bottom" title="${languageUtil.get(request, 'infoasturias-aldeas-calidad')}" alt="${languageUtil.get(request, 'infoasturias-aldeas-calidad')}"/></li>
603 </#if>
604 <#if getterUtil.getBoolean(Informacion.CalidadCasonasAsturianas.getData())>
605 <li class="list-inline-item">
606 <img class="" src="${themeDisplay.getPathThemeImages()}/icons/casonas_asturianas.png" data-toggle="tooltip" data-placement="bottom" title="${languageUtil.get(request, 'infoasturias-casonas-asturias')}" alt="${languageUtil.get(request, 'infoasturias-casonas-asturianas')}"/></li>
607 </#if>
608 </ul>
609 </div>
610 </#if>
611 </div>
612 </div>
613 </div>
614 </div>
615 </div>
616 </header>
617
618 <div class="sheet sheet-lg">
619 <#-- as_asac_accommodationbooking_AccommodationBookingResultsPortlet -->
620 <#assign paramsMap = {
621 "cmd": cmd,
622 "startDate": paramUtil.getString(request, "p_r_p_startDate"),
623 "endDate": paramUtil.getString(request, "p_r_p_endDate"),
624 "priceMin": paramUtil.getString(request, "p_r_p_priceMin"),
625 "priceMax": paramUtil.getString(request, "p_r_p_priceMax"),
626 "rooms": paramUtil.getString(request, "p_r_p_rooms"),
627 "babys": paramUtil.getString(request, "p_r_p_babys"),
628 "kids": paramUtil.getString(request, "p_r_p_kids"),
629 "adults": paramUtil.getString(request, "p_r_p_adults"),
630 "accommodationCode": CodigoDGT.data,
631 "jspPage": "/html/results/accommodation/rooms.jsp"
632 } />
633 <#assign roomsURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingResultsPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "exclusive", paramsMap) />
634 <div id="bookings-${articleId}" class="article-border mb-5 hide">
635 <!-- box-bookings -->
636 </div>
637
638 <#if Informacion.Titulo.data?has_content>
639 <div class="article-great">
640 ${Informacion.Titulo.data}
641 </div>
642 </#if>
643
644 <#assign hasTab1 = Informacion.DescripcionLarga.data?has_content>
645 <#assign hasTab2 = ServiciosEstablecimiento.data?has_content || ServiciosHabitacion.data?has_content || ServiciosComplementarios.data?has_content || SeguridadYSanidad.data?has_content>
646 <#assign hasTab3 = Contacto.Tarifas.data?has_content || Contacto.Tarifas.Gratis?? && Contacto.Tarifas.Gratis.data?has_content || Contacto.Tarifas.Donativo?? && Contacto.Tarifas.Donativo.data?has_content>
647 <#assign hasTab4 = Informacion.TemporadaAlta.data?has_content || Informacion.TemporadaMedia.data?has_content || Informacion.TemporadaBaja.data?has_content>
648 <#assign hasTab5 = Geolocalizacion.Coordenadas.data?has_content>
649 <#assign hasTab6 = AsturiasMascotas?? && AsturiasMascotas.SuplementoMascota?? && AsturiasMascotas.SuplementoMascota.data?has_content>
650 <#if Peregrinos ??>
651 <#assign hasTab7 = Peregrinos.InfoReservas.data?has_content>
652 </#if>
653 <#assign showFirstTab = true>
654
655 <div class="article-accordion accordion">
656 <#if Visualizador.Slide.getData()?has_content>
657 <div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>">
658 <#list Visualizador.Slide.getSiblings() as Slide>
659 <#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())>
660 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
661 <#assign slideThumbnail2 = dlTool.getThumbnailByJSON(Slide.data, "2")! />
662 <#assign slidePath = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! />
663 <#assign slideUrl = Slide.SlideUrl.data />
664 <#assign dataMap = "" />
665
666 <#if slideUrl?has_content>
667 <#assign slideTitle = "${languageUtil.get(request, 'video')} ${Slide?index}" />
668 <#if Slide.SlideTitulo.data?has_content>
669 <#assign slideTitle = Slide.SlideTitulo.data />
670 </#if>
671
672 <#-- Youtube -->
673 <#assign slideUrl = stringUtil.replace(slideUrl, 'watch?v=', 'embed/') />
674 <#assign slideThumbnail2 = stringUtil.replace(slideUrl, 'www', 'img') />
675 <#assign slideThumbnail2 = stringUtil.replace(slideThumbnail2, 'embed', 'vi') />
676 <#assign slideThumbnail2 = '${slideThumbnail2}/mqdefault.jpg' />
677
678 <#-- Vimeo -->
679 <#if slideUrl?contains("vimeo")>
680 <#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') />
681 <#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') />
682 <#if slideVimeoId?has_content>
683 <#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' />
684 <#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! />
685 <#if slideVimeoJsonContent?has_content>
686 <#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) />
687 <#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) />
688 <#assign slideThumbnail2 = slideVimeoJsonItem.thumbnail_medium />
689 </#if>
690 </#if>
691 </#if>
692 <div id="slide-${Slide?index}" class="slide">
693 <a class="card card-simple card-video" href="#" onclick="javascript: event.preventDefault(); showDialogIframe('${slideUrl}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe');" title="${slideTitle}">
694 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
695 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
696 </span></a>
697 </div>
698 <#else>
699 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${Slide?index}" />
700 <#if Slide.SlideTitulo.data?has_content>
701 <#assign slideTitle = Slide.SlideTitulo.data />
702 </#if>
703 <div class="slide">
704 <a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}">
705 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
706 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
707 </span></a>
708 </div>
709 </#if>
710 </#if>
711 </#list>
712 </div>
713 </#if>
714
715 <#if hasTab1>
716 <div id="tab1" class="article-section accordion-item">
717 <a href="#tabContent1" id="tabHeading1" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent1" data-toggle="liferay-collapse" data-target="#tabContent1">
718 <h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3>
719 </a>
720 <div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading1">
721 <#if Informacion.DescripcionLarga.data?has_content>
722 ${Informacion.DescripcionLarga.data}
723 </#if>
724 </div>
725 </div>
726 <#assign showFirstTab = false>
727 </#if>
728
729 <#if hasTab2>
730 <div id="tab2" class="article-section accordion-item">
731 <a href="#tabContent2" id="tabHeading2" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent2" data-toggle="liferay-collapse" data-target="#tabContent2">
732 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-servicios-establecimiento')}</h3>
733 </a>
734 <div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2">
735 <#function getServiceIcon serviceName>
736 <#assign iconMap = {
737 "Acceso a internet": "fas fa-network-wired",
738 "Actividades para niños": "fas fa-child",
739 "Admite animales": "fas fa-paw",
740 "Admite caravanas": "fas fa-caravan",
741 "Admite tarjetas": "fas fa-credit-card",
742 "Agroturismo": "fas fa-tractor",
743 "Agua caliente en duchas": "fas fa-shower",
744 "Agua y desagüe caravanas": "fas fa-water",
745 "Aire acondicionado": "fas fa-snowflake",
746 "Almacenamiento seguro para bicicletas": "fas fa-bicycle",
747 "Almohadas": "fas fa-mattress-pillow",
748 "Alquiler de caravanas": "fas fa-caravan",
749 "Alquiler material de camping": "fas fa-campground",
750 "Aparcamiento": "fas fa-parking",
751 "Aseo": "fas fa-restroom",
752 "Balneario/Aguas termales": "fas fa-hot-tub",
753 "Baño interior/exterior": "fas fa-bath",
754 "Bar/Cafetería": "fas fa-mug-saucer",
755 "Barbacoa": "fas fa-fire",
756 "Botella de gas": "fas fa-bottle-water",
757 "Botiquín": "fas fa-first-aid",
758 "Bungalows": "fas fa-home",
759 "Buzón de correos": "fas fa-envelope",
760 "Caja fuerte": "fas fa-vault",
761 "Calefacción": "fas fa-temperature-high",
762 "Chanclas": "fas fa-shoe-prints",
763 "Chimenea": "fas fa-fire-alt",
764 "Chimenea en habitación": "fas fa-fire-alt",
765 "Cocina": "fas fa-kitchen-set",
766 "Colchones": "fas fa-bed",
767 "Comedor": "fas fa-utensils",
768 "Encargada servicios higiénicos": "fas fa-user",
769 "Enfermería": "fas fa-user-nurse",
770 "Equipo respiración artificial": "fas fa-lungs",
771 "Espacio para lavado de bicicletas": "fas fa-bicycle",
772 "Estación de esquí < 30 Km": "fas fa-skiing",
773 "Estufa de leña": "fas fa-fire",
774 "Extintores de incendio": "fas fa-fire-extinguisher",
775 "Gimnasio": "fas fa-dumbbell",
776 "Imprescindible saco de dormir": "fas fa-bed",
777 "Información sobre rutas": "fas fa-map-marked-alt",
778 "Jacuzzi en habitación": "fas fa-hot-tub",
779 "Jacuzzi/Hidromasaje": "fas fa-hot-tub",
780 "Jardín": "fas fa-tree",
781 "Lavadora": "fas fa-soap",
782 "Lavavajillas": "fas fa-sink",
783 "Luces de emergencia": "fas fa-lightbulb",
784 "Médico": "fas fa-user-doctor",
785 "Minibar": "fas fa-martini-glass",
786 "Muebles de jardín": "fas fa-couch",
787 "Nórdicos/Mantas": "fas fa-rug",
788 "Parque infantil": "fas fa-child-reaching",
789 "Piscina exterior": "fas fa-swimming-pool",
790 "Piscina climatizada": "fas fa-person-swimming",
791 "Radio - socorro": "fas fa-broadcast-tower",
792 "Restaurante": "fas fa-utensils",
793 "Saco de dormir": "fas fa-campground",
794 "Sala de audiovisuales": "fas fa-video",
795 "Salas de reuniones": "fas fa-users-line",
796 "Salón con TV": "fas fa-tv",
797 "Sauna": "fas fa-spa",
798 "Servicio de desayunos": "fas fa-bread-slice",
799 "Servicio de cenas": "fas fa-bowl-rice",
800 "Servicio de comidas": "fas fa-bowl-food",
801 "Servicio de cuna": "fas fa-baby",
802 "Servicio de habitaciones": "fas fa-bed",
803 "Servicio de habitaciones 24 hrs.": "fas fa-clock",
804 "Servicio de lavandería": "fas fa-tshirt",
805 "Servicio de limpieza": "fas fa-spray-can-sparkles",
806 "Servicio de recepción": "fas fa-concierge-bell",
807 "Socorrista": "fas fa-life-ring",
808 "Spa": "fas fa-spa",
809 "Supermercado": "fas fa-shopping-basket",
810 "Teléfono": "fas fa-phone",
811 "Televisión en habitación": "fas fa-tv",
812 "Toma de aguas incendios": "fas fa-fire-flame-simple",
813 "Transporte público < 500 m": "fas fa-bus",
814 "Wifi": "fas fa-wifi",
815 "Zona de acampada": "fas fa-campground",
816 "Zona de taller con herramientas": "fas fa-screwdriver-wrench",
817 "Zona de taquillas": "fas fa-lock"
818 } />
819 <#if iconMap[serviceName]??>
820 <#return iconMap[serviceName]>
821 </#if>
822 <#return "fas fa-check-circle">
823 </#function>
824
825 <#assign className = "com.liferay.journal.model.JournalArticle" />
826 <#assign classPK = 0 />
827 <#if (assetEntry??)>
828 <#assign classPK = assetEntry.getClassPK()?long />
829 <#elseif (journalArticle??)>
830 <#assign classPK = journalArticle.getResourcePrimKey()?long />
831 <#elseif (.vars["reserved-article-resource-prim-key"]??)>
832 <#assign classPK = .vars["reserved-article-resource-prim-key"].data?number />
833 <#elseif (request.getAttribute("articleResourcePrimKey")??)>
834 <#assign classPK = request.getAttribute("articleResourcePrimKey")?number />
835 </#if>
836
837 <#assign todasCategorias = [] />
838 <#if classPK?number gt 0>
839 <#attempt>
840 <#assign todasCategorias = assetCategoryLocalService.getCategories(className, classPK) />
841 <#recover>
842 </#attempt>
843 </#if>
844
845 <#assign NAME_TURISMO_RURAL = "Dónde dormir - Turismo rural" />
846 <#assign NAME_ALOJAMIENTOS = "Dónde dormir - Alojamientos" />
847 <#assign NAME_COMUNES = "Dónde dormir - Categorías Comunes" />
848 <#function canonSpaces s>
849 <#if !s??><#return "" /></#if>
850 <#assign t = s?string />
851 <#assign t = t?replace(" ", " ") />
852 <#assign t = t?replace("\\s+", " ", "r") />
853 <#assign t = t?trim />
854 <#return t />
855 </#function>
856
857 <#function isVocabName v targetName>
858 <#return (canonSpaces(v.getName())?lower_case == canonSpaces(targetName)?lower_case) || (canonSpaces(v.getTitle(locale))?lower_case == canonSpaces(targetName)?lower_case) />
859 </#function>
860
861 <#assign excludedTitles = {
862 "1 Estrella": true, "2 Estrellas": true, "3 Estrellas": true, "4 Estrellas": true, "5 Estrellas": true,
863 "1 trisquel": true, "2 trisqueles": true, "3 trisqueles": true,
864 "1 Llave": true, "2 Llaves": true, "3 Llaves": true, "4 Llaves": true,
865 "Primera": true, "Superior": true, "Turísticos": true, "Peregrinos": true, "Juveniles": true,
866 "1 Tienda": true, "2 Tiendas": true, "3 Tiendas": true
867 } />
868 <#assign serviciosMap = {} />
869 <#assign serviciosList = [] />
870
871 <#list todasCategorias as cat>
872 <#attempt>
873 <#assign voc = assetVocabularyLocalService.getVocabulary(cat.getVocabularyId()) />
874 <#assign tituloCat = cat.getTitle(locale) />
875 <#if isVocabName(voc, NAME_TURISMO_RURAL) || isVocabName(voc, NAME_ALOJAMIENTOS)>
876 <#if (cat.getParentCategoryId()?number gt 0) && (!excludedTitles[tituloCat]??)>
877 <#assign cid = cat.getCategoryId()?c />
878 <#if !serviciosMap[cid]??>
879 <#assign serviciosMap = serviciosMap + { cid : true } />
880 <#assign serviciosList = serviciosList + [{"id": cid, "title": tituloCat, "category": cat}] />
881 </#if>
882 </#if>
883 <#elseif isVocabName(voc, NAME_COMUNES)>
884 <#assign cid = cat.getCategoryId()?c />
885 <#if !serviciosMap[cid]??>
886 <#assign serviciosMap = serviciosMap + { cid : true } />
887 <#assign serviciosList = serviciosList + [{"id": cid, "title": tituloCat, "category": cat}] />
888 </#if>
889 </#if>
890 <#recover>
891 </#attempt>
892 </#list>
893
894 <#assign serviciosOrdenados = serviciosList?sort_by("title") />
895 <#if serviciosOrdenados?has_content>
896 <div class="servicios-iconos-wrapper">
897 <div class="servicios-grid">
898 <ul class="list-unstyled servicios-iconos-list" role="list">
899 <#list serviciosOrdenados as item>
900 <#assign servicioNombre = item.title />
901 <#assign iconClass = getServiceIcon(servicioNombre) />
902 <li class="servicio-item">
903 <div class="servicio-icono-container">
904 <span class="${iconClass} servicio-icono" aria-hidden="true"></span>
905 <span class="servicio-nombre">${servicioNombre}</span>
906 </div>
907 </li>
908 </#list>
909 </ul>
910 </div>
911 </div>
912 </#if>
913 <style>
914 .servicios-iconos-wrapper {
915 margin: 2rem 0;
916 }
917 .servicios-grid {
918 margin-top: 1.5rem;
919 }
920 .servicios-iconos-list {
921 display: grid;
922 grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
923 gap: 1rem;
924 padding: 0;
925 margin: 0;
926 }
927 .servicio-item {
928 list-style: none;
929 }
930 .servicio-icono-container {
931 display: flex;
932 flex-direction: column;
933 align-items: center;
934 text-align: center;
935 padding: 0.5rem 0.6rem;
936 border-radius: 10px;
937 transition: all 0.3s ease;
938 background-color: #fff;
939 border: 1px solid #e8e8e8;
940 height: 100%;
941 min-height: 90px;
942 }
943 .servicio-icono {
944 font-size: 1.5rem;
945 color: #36a53e !important;
946 margin-bottom: 0.75rem;
947 transition: all 0.3s ease;
948 }
949 .servicio-nombre {
950 font-size: 0.85rem;
951 font-weight: 500;
952 color: #333;
953 line-height: 1.3;
954 display: block;
955 word-break: break-word;
956 }
957
958 @media (max-width: 768px) {
959 .servicios-iconos-list {
960 grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
961 gap: 0.5rem;
962 }
963 .servicio-icono {
964 font-size: 2rem;
965 }
966 .servicio-nombre {
967 font-size: 0.8rem;
968 }
969 }
970 @media (max-width: 480px) {
971 .servicios-iconos-list {
972 grid-template-columns: repeat(2, 1fr);
973 }
974 }
975 </style>
976 </div>
977 </div>
978 <#assign showFirstTab = false>
979 </#if>
980 <#if Peregrinos ??>
981 <#if hasTab7>
982 <div id="tab7" class="article-section accordion-item">
983 <a href="#tabContent7" id="tabHeading7" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent7" data-toggle="liferay-collapse" data-target="#tabContent7">
984 <h3 class="h3 accordion-header">${languageUtil.get(request, "infoasturias-peregrinos-info-reservas")}</h3>
985 </a>
986 <div id="tabContent7" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading7">
987 <#if Peregrinos.InfoReservas.data?has_content>
988 ${Peregrinos.InfoReservas.data}
989 </#if>
990 </div>
991 </div>
992 <#assign showFirstTab = false>
993 </#if>
994 </#if>
995 <#if hasTab3>
996 <div id="tab3" class="article-section accordion-item">
997 <a href="#tabContent3" id="tabHeading3" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent3" data-toggle="liferay-collapse" data-target="#tabContent3">
998 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-tarifas')}</h3>
999 </a>
1000 <div id="tabContent3" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3">
1001 <#if Contacto.Tarifas.Gratis ?? || Contacto.Tarifas.Donativo ??>
1002 <#if getterUtil.getBoolean(Contacto.Tarifas.Gratis.getData())>
1003 <#assign esGratis = true/>
1004 <#assign precioOrientativo = false/>
1005 </#if>
1006 <#if getterUtil.getBoolean(Contacto.Tarifas.Donativo.getData())>
1007 <#assign donativo = true/>
1008 <#assign precioOrientativo = false/>
1009 </#if>
1010 </#if>
1011 <#if esGratis>
1012 <span>${languageUtil.get(request,"infoasturias-albergues-gratuito")}</span>
1013 </#if>
1014 <#if donativo>
1015 <span>${languageUtil.get(request,"infoasturias-albergues-donativo")}</span>
1016 </#if>
1017 <#if Contacto.Tarifas.data?has_content>
1018 ${Contacto.Tarifas.data}
1019 </#if>
1020 <ul class="article-list list-unstyled article-list-info mt-4">
1021 <#if Contacto.DesayunoIncluido.data?has_content && Contacto.DesayunoIncluido.data != "Desayuno no incluido">
1022 <li class="article-list-item">
1023 <span class="fas fa-coffee" aria-hidden="true"></span>
1024 <span class="hide-accessible">${languageUtil.get(request,"breakfast")}</span>
1025 <span class="field-wrapper">
1026 <span class="field">${languageUtil.get(request, "breakfast")}:</span>
1027 <span class="text">${Contacto.DesayunoIncluido.data}</span>
1028 </span>
1029 </li>
1030 </#if>
1031
1032 <#if Contacto.LimpiezaIncluida.data?has_content && Contacto.LimpiezaIncluida.data != "Limpieza no incluida">
1033 <li class="article-list-item">
1034 <span class="fas fa-broom" aria-hidden="true"></span>
1035 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-clean")}</span>
1036 <span class="field-wrapper">
1037 <span class="field">${languageUtil.get(request, "infoasturias-clean")}:</span>
1038 <span class="text">${Contacto.LimpiezaIncluida.data}</span>
1039 </span>
1040 </li>
1041 </#if>
1042
1043 <#if Contacto.SabanasIncluidas.data?has_content && Contacto.DesayunoIncluido.data != "Sabanas no incluidas">
1044 <li class="article-list-item">
1045 <span class="fas fa-bed" aria-hidden="true"></span>
1046 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-sabanas")}</span>
1047 <span class="field-wrapper">
1048 <span class="field">${languageUtil.get(request, "infoasturias-sabanas")}:</span>
1049 <span class="text">${Contacto.SabanasIncluidas.data}</span>
1050 </span>
1051 </li>
1052 </#if>
1053
1054 <#if Informacion.FechasCierre.data?has_content>
1055 <li class="article-list-item hide">
1056 <span class="fas fa-calendar" aria-hidden="true"></span>
1057 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-fechas-de-cierre")}</span>
1058 <span class="field-wrapper">
1059 <span class="field">${languageUtil.get(request, "infoasturias-fechas-de-cierre")}:</span>
1060 <span class="text">${Informacion.FechasCierre.data}</span>
1061 </span>
1062 </li>
1063 </#if>
1064
1065 <#if Informacion.AbiertoTodoAno.data?has_content && (Informacion.AbiertoTodoAno.data == "Si" || Informacion.AbiertoTodoAno.data == "Sí" || Informacion.AbiertoTodoAno.data == "SI")>
1066 <li class="article-list-item hide">
1067 <span class="fas fa-door-open" aria-hidden="true"></span>
1068 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-abierto-todo-anio")}</span>
1069 <span class="field-wrapper">
1070 <span class="text">${languageUtil.get(request, "infoasturias-abierto-todo-anio")}</span>
1071 </span>
1072 </li>
1073 </#if>
1074 </ul>
1075 </div>
1076 </div>
1077 <#assign showFirstTab = false>
1078 </#if>
1079
1080 <#if hasTab4>
1081 <div id="tab4" class="article-section accordion-item">
1082 <a href="#tabContent4" id="tabHeading4" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent4" data-toggle="liferay-collapse" data-target="#tabContent4">
1083 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-temporadas')}</h3>
1084 </a>
1085 <div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4">
1086 <#if Informacion.TemporadaAlta.data?has_content || Informacion.TemporadaMedia.data?has_content || Informacion.TemporadaBaja.data?has_content>
1087 <#if Informacion.TemporadaAlta.data?has_content>
1088 <span class="field-wrapper d-block">
1089 <span class="field">${languageUtil.get(request, "infoasturias-temporada-alta")}:</span>
1090 <span class="text">${Informacion.TemporadaAlta.data}</span>
1091 </span>
1092 </#if>
1093
1094 <#if Informacion.TemporadaMedia.data?has_content>
1095 <span class="field-wrapper d-block">
1096 <span class="field">${languageUtil.get(request, "infoasturias-temporada-media")}:</span>
1097 <span class="text">${Informacion.TemporadaMedia.data}</span>
1098 </span>
1099 </#if>
1100
1101 <#if Informacion.TemporadaBaja.data?has_content>
1102 <span class="field-wrapper d-block">
1103 <span class="field">${languageUtil.get(request, "infoasturias-temporada-baja")}:</span>
1104 <span class="text">${Informacion.TemporadaBaja.data}</span>
1105 </span>
1106 </#if>
1107 </#if>
1108 </div>
1109 </div>
1110 <#assign showFirstTab = false>
1111 </#if>
1112
1113 <#if hasTab5>
1114 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
1115 <div id="tab5" class="article-section article-section-map accordion-item">
1116 <a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent5" data-toggle="liferay-collapse" data-target="#tabContent5">
1117 <h3 class="h3 accordion-header">${languageUtil.get(request,'map')}</h3>
1118 </a>
1119 <div id="tabContent5" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5">
1120 <div id="article-map-wrapper-${articleId}" class="article-map-wrapper">
1121 <h4 class="hide-accessible">${languageUtil.get(request,'map')}</h4>
1122 <div id="article-map-content-${articleId}" style="width: 100%; height: 500px; z-index:1" role="application" aria-label="${languageUtil.format(request,'infoasturias-mapa-de', title)}">
1123 <!-- MAP -->
1124 </div>
1125 <div class="hide-accessible" aria-live="polite">
1126 <p>${languageUtil.get(request,'first-name')}: ${title}</p>
1127 <p>GPS: ${Geolocalizacion.Coordenadas.data}</p>
1128 <#if Contacto.Direccion.data?has_content>
1129 <p>${languageUtil.get(request,'address')}: ${Contacto.Direccion.data} ■ ${Contacto.CP.data} - ${Contacto.Localidad.data}</p>
1130 </#if>
1131 </div>
1132 <div class="article-map-form">
1133 <div class="name important">${title}</div>
1134 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${Geolocalizacion.Coordenadas.data}</span></div>
1135 <form action="https://maps.google.es/maps" method="get" target="_blank" aria-label="${languageUtil.get(request,'infoasturias-como-llegar')}">
1136 <input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}">
1137 <label for="saddr_${articleId}" class="label">
1138 ${languageUtil.get(request,'infoasturias-from')}:
1139 </label>
1140 <input class="form-control" type="text" maxlength="40" name="saddr" id="saddr_${articleId}" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}" aria-required="true">
1141 <button class="btn btn-text" type="submit" aria-label="${languageUtil.get(request,'infoasturias-como-llegar')} (${languageUtil.get(request,'opens-new-window')})">
1142 ${languageUtil.get(request,'infoasturias-como-llegar')}
1143 <span aria-hidden="true">»</span>
1144 </button>
1145 </form>
1146 </div>
1147 </div>
1148 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
1149 <script type="text/javascript">
1150 AUI().ready('aui-base', function(A){
1151 var lat = ${coordenadas[0]},
1152 lng = ${coordenadas[1]},
1153 zoom = 16;
1154 mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16});
1155
1156 //Marker
1157 var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png';
1158 var defaultIcon = L.icon({
1159 iconUrl: defaultIconTheme,
1160 iconSize: [36, 53],
1161 iconAnchor: [18, 53],
1162 iconShadow: [0,0],
1163 popupAnchor: [0, -30]
1164 });
1165 var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent);
1166
1167 var contentString = '<div class="row">';
1168 contentString += '<div class="col-12">';
1169 contentString += '<div class="h4">${htmlUtil.escape(title)}</div>';
1170 contentString += '</div>';
1171 contentString += '</div>';
1172
1173 contentString += '<div class="row">';
1174 contentString += '<div class="col-12">';
1175 <#if validator.isNotNull(articleMainImageThumbnail1)>
1176 contentString += '<img class="pull-right mb-2 ml-2" style="max-width:80px;" src="${articleMainImageThumbnail1}" alt="${htmlUtil.escape(title)}"/>';
1177 </#if>
1178 contentString += '<dl class="mb-0">';
1179 <#if address?has_content>
1180 contentString += '<dt>${languageUtil.get(request,'address')}</dt>';
1181 contentString += '<dd>${htmlUtil.escape(address)}</dd>';
1182 </#if>
1183 <#if Contacto.Telefono.data?has_content>
1184 contentString += '<dt>${languageUtil.get(request,'phone')}</dt>';
1185 contentString += '<dd>${Contacto.Telefono.data}</dd>';
1186 </#if>
1187 <#if Contacto.Email.getData()?has_content>
1188 contentString += '<dt>${languageUtil.get(request,'email')}</dt>';
1189 <#list Contacto.Email.getSiblings() as Item>
1190 contentString += '<dd><a href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}">${Item.data}</a></dd>';
1191 </#list>
1192 </#if>
1193 <#if Contacto.Web.data?has_content>
1194 <#assign linkURL = Contacto.Web.data/>
1195 <#if !stringUtil.startsWith(linkURL, "http")>
1196 <#assign linkURL = "https://${Contacto.Web.data}"/>
1197 </#if>
1198 contentString += '<dt>${languageUtil.get(request,'site')}</dt>';
1199 contentString += '<dd><a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}">${Contacto.Web.data}</a></dd';
1200 </#if>
1201 contentString += '</dl>';
1202 contentString += '</div>';
1203 contentString += '</div>';
1204 marker.bindPopup(contentString);
1205
1206 //Contributor
1207 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
1208 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
1209 }).addTo(mapContent);
1210
1211 }); //AUI.ready
1212 </script>
1213 </div>
1214 </div>
1215 <#assign showFirstTab = false>
1216 </#if>
1217 <#if hasTab6>
1218 <div id="tab6" class="article-section accordion-item">
1219 <a href="#tabContent6" id="tabHeading6" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${getterUtil.getString(showFirstTab)}" aria-controls="tabContent6" data-toggle="liferay-collapse" data-target="#tabContent6">
1220 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-info-mascotas')}</h3>
1221 </a>
1222 <div id="tabContent6" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading6">
1223 <#if AsturiasMascotas.SuplementoMascota?? && AsturiasMascotas.SuplementoMascota.data?has_content || AsturiasMascotas.LimitacionPeso?? && AsturiasMascotas.LimitacionPeso.data?has_content || AsturiasMascotas.AdmitePPP?? && AsturiasMascotas.AdmitePPP.data?has_content || AsturiasMascotas.NumeroMaximo?? && AsturiasMascotas.NumeroMaximo.data?has_content || AsturiasMascotas.NumeroMaximoAlojamiento?? && AsturiasMascotas.NumeroMaximoAlojamiento.data?has_content || AsturiasMascotas.SolosHabitacion?? && AsturiasMascotas.SolosHabitacion.data?has_content || AsturiasMascotas.AccesoInterior?? && AsturiasMascotas.AccesoInterior.data?has_content || AsturiasMascotas.Cama?? && AsturiasMascotas.Cama.data?has_content || AsturiasMascotas.Comedero?? && AsturiasMascotas.Comedero.data?has_content || AsturiasMascotas.ZonasComunes?? && AsturiasMascotas.ZonasComunes.data?has_content || AsturiasMascotas.ZonasComunesDetalle?? && AsturiasMascotas.ZonasComunesDetalle.data?has_content || AsturiasMascotas.Guarderia?? && AsturiasMascotas.Guarderia.data?has_content || AsturiasMascotas.OtrasMascotas?? && AsturiasMascotas.OtrasMascotas.data?has_content || AsturiasMascotas.OtrosAnimales?? && AsturiasMascotas.OtrosAnimales.data?has_content || AsturiasMascotas.DetalleNormas?? && AsturiasMascotas.DetalleNormas.data?has_content>
1224 <div class="list-unstyled">
1225 <div class="list-iconos">
1226 <#if AsturiasMascotas.SuplementoMascota.data?has_content>
1227 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1228 <#if AsturiasMascotas.SuplementoMascota.getData() == "Si">
1229 <#assign SuplementoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Suplemento por mascota")/>
1230 <div ><img src="${SuplementoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}"/></div>
1231 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}</span>
1232 <#elseif AsturiasMascotas.SuplementoMascota.getData() == "No">
1233 <#assign SinSuplementoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Sin suplemento por mascota")/>
1234 <div ><img src="${SinSuplementoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}"/></div>
1235 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}</span>
1236 </#if>
1237 </div>
1238 </#if>
1239 <#if AsturiasMascotas.LimitacionPeso.data?has_content>
1240 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1241 <#assign LimitacionPesoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Limitación de tamaño")/>
1242 <div><img src="${LimitacionPesoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-peso')}"/><span class="value">${AsturiasMascotas.LimitacionPeso.data}</span></div>
1243 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-peso')}</span>
1244 </div>
1245 </#if>
1246 <#if AsturiasMascotas.NumeroMaximoAlojamiento??>
1247 <#if AsturiasMascotas.NumeroMaximoAlojamiento.data?has_content>
1248 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1249 <#assign NumeroMaximoAlojamientoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros en el alojamiento")/>
1250 <div><img src="${NumeroMaximoAlojamientoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-maximo-establecimiento')}"/><span class="value-icono">${AsturiasMascotas.NumeroMaximoAlojamiento.data}</span></div>
1251 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-maximo-establecimiento')}</span>
1252 </div>
1253 </#if>
1254 </#if>
1255 <#if AsturiasMascotas.NumeroMaximo.data?has_content>
1256 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1257 <#assign NumeroMaximoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros por reserva")/>
1258 <div><img src="${NumeroMaximoImage[0]}" alt="${languageUtil.get(request,'infoasturias-maximo-habitacion')}"/><span class="value-icono">${AsturiasMascotas.NumeroMaximo.data}</span></div>
1259 <span class="text-value">${languageUtil.get(request,'infoasturias-maximo-habitacion')}</span>
1260 </div>
1261 </#if>
1262 <#if AsturiasMascotas.SolosHabitacion.data?has_content>
1263 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1264 <#if AsturiasMascotas.SolosHabitacion.getData() == "Si">
1265 <#assign SolosHabitacionImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Se permite dejar el perro solo en la habitación")/>
1266 <div ><img src="${SolosHabitacionImage[0]}" alt="${languageUtil.get(request,'infoasturias-solas-habitacion')}"/></div>
1267 <span class="text-value">${languageUtil.get(request,'infoasturias-solas-habitacion')}</span>
1268 <#else>
1269 <#assign NoSolosHabitacionImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "No se permite dejar el perro solo en la habitación")/>
1270 <div><img src="${NoSolosHabitacionImage[0]}" alt="${languageUtil.get(request,'infoasturias-no-solas-habitacion')}"/></div>
1271 <span class="text-value">${languageUtil.get(request,'infoasturias-no-solas-habitacion')}</span>
1272 </#if>
1273 </div>
1274 </#if>
1275 </div>
1276 <div class="article-info-table">
1277 <div class="mb-4 title-normas article-info-border">${languageUtil.get(request,'infoasturias-normas-mascotas')}</div>
1278 <ul class="list-unstyled">
1279 <#if AsturiasMascotas.AdmitePPP.data?has_content>
1280 <li class="fas d-block track">
1281 <#if AsturiasMascotas.AdmitePPP.getData() == "Si">
1282 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-ppp')}.</span>
1283 <#else>
1284 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-ppp')}.</span>
1285 </#if>
1286 </li>
1287 </#if>
1288 <#if AsturiasMascotas.ZonasComunesDetalle ??>
1289 <#if AsturiasMascotas.ZonasComunes?? && AsturiasMascotas.ZonasComunes.data?has_content || AsturiasMascotas.ZonasComunesDetalle?? && AsturiasMascotas.ZonasComunesDetalle.data?has_content>
1290
1291 <#if AsturiasMascotas.ZonasComunes.getData() == "Si">
1292 <li class="fas d-block track">
1293 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-zonas-comunes')}.</span>
1294 </li>
1295 <#elseif AsturiasMascotas.ZonasComunes.getData() == "No">
1296 <li class="fas d-block track">
1297 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-zonas-comunes')}.</span>
1298 </li>
1299 <#elseif validator.isNotNull(AsturiasMascotas.ZonasComunesDetalle.data)>
1300 <li class="fas d-block track">
1301 <span class="text-rule">${AsturiasMascotas.ZonasComunesDetalle.data}</span>
1302 </li>
1303 </#if>
1304
1305 </#if>
1306 </#if>
1307 <#if AsturiasMascotas.Cama.data?has_content>
1308 <li class="fas d-block track">
1309 <#if AsturiasMascotas.Cama.getData() == "Si">
1310 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-cama')}.</span>
1311 <#else>
1312 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-mascotas-cama')}.</span>
1313 </#if>
1314 </li>
1315 </#if>
1316 <#if AsturiasMascotas.Comedero.data?has_content>
1317 <li class="fas d-block track">
1318 <#if AsturiasMascotas.Comedero.getData() == "Si">
1319 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-comedero')}.</span>
1320 <#else>
1321 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-comedero')}.</span>
1322 </#if>
1323 </li>
1324 </#if>
1325 <#if AsturiasMascotas.Guarderia.data?has_content>
1326 <li class="fas d-block track">
1327 <#if AsturiasMascotas.Guarderia.getData() == "Si">
1328 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-guarderia')}.</span>
1329 <#else>
1330 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-mascotas-guarderia')}.</span>
1331 </#if>
1332 </li>
1333 </#if>
1334 <#if AsturiasMascotas.OtrasMascotas?? && AsturiasMascotas.OtrasMascotas.data?has_content || AsturiasMascotas.OtrosAnimales?? && AsturiasMascotas.OtrosAnimales.data?has_content>
1335 <li class="fas d-block track">
1336 <#if AsturiasMascotas.OtrasMascotas.getData() == "Si">
1337 <span class="text-rule">${languageUtil.get(request,'infoasturias-otras-mascotas')}:</span>
1338 <span class="text-rule">${AsturiasMascotas.OtrosAnimales.data}</span>
1339 <#else>
1340 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-otras-mascotas')}</span>
1341 </#if>
1342 </li>
1343 </#if>
1344 <#if AsturiasMascotas.PrecioSuplemento?? && AsturiasMascotas.PrecioSuplemento.data?has_content>
1345 <li class="fas d-block track mt-2">
1346 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-suplemento')}: ${AsturiasMascotas.PrecioSuplemento.data}</span>
1347 </li>
1348 </#if>
1349 </ul>
1350 <#if AsturiasMascotas.DetalleNormas.data?has_content>
1351 <div class="rules">
1352 <#assign iconSPAN = AsturiasMascotas.DetalleNormas.data?replace('<p>','<p><span class="fas"></span>')/>
1353 ${iconSPAN}
1354 </div>
1355 </#if>
1356 </div>
1357 </div>
1358 </#if>
1359 </div>
1360 </div>
1361 <#assign showFirstTab = false>
1362 </#if>
1363
1364 </div>
1365 <div class="article-border">
1366 <#if Observaciones.Observacion.data?has_content>
1367 ${Observaciones.Observacion.data}
1368 </#if>
1369
1370 <#if stringUtil.matches(Observaciones.MasInformacion.data, "//") && Contacto.MasInformacion?? >
1371 <a class="" href="${Contacto.MasInformacion.data}" title="${languageUtil.format(request,'go-to-x', 'link')}">${Contacto.MasInformacion.data}
1372 <#elseif validator.isNotNull(Observaciones.MasInformacion.data)>
1373 <span class="">${Observaciones.MasInformacion.data}</span>
1374 </#if>
1375
1376 <#if OtrosDatos.DatosFacilitadosPor?has_content>
1377 <div class="datos-facilitados">
1378 <span class="important mr-1">${languageUtil.get(request,'infoasturias-datos-facilitados-por')}:</span><span class="text-wrapper">${OtrosDatos.DatosFacilitadosPor.data}.</span>
1379 </div>
1380 </#if>
1381
1382 <#if CodigoDGT.data?has_content>
1383 <div>
1384 <span class="text-wrapper mr-1">${languageUtil.get(request,'infoasturias-establecimiento-inscrito-en-registro')} </span><span class="important">${CodigoDGT.data}.</span>
1385 </div>
1386 </#if>
1387 <#if precioOrientativo>
1388 <div class="text-wrapper">${languageUtil.get(request,'infoasturias-precios-orientativos')}.</div>
1389 </#if>
1390 </div>
1391 <div class="row mt-5">
1392 <div class="col-xl-6 col-sm-6 col-xs-12 mb-3">
1393 <div class="text-center">
1394 <#if Contacto.Email.data?has_content>
1395 <a href="mailto:${Contacto.Email.data}?Subject=${htmlUtil.escapeURL(title)}:%20${languageUtil.get(request,'infoasturias-more-info')}" class="btn btn-default text-center text-uppercase" aria-label="${languageUtil.get(request,'infoasturias-contacto-alojamiento')}: ${Contacto.Email.data}">
1396 <span class="far fa-envelope mr-2" aria-hidden="true"></span>
1397 <span class="btn-default">${languageUtil.get(request,'infoasturias-contacto-alojamiento')}</span>
1398 </a>
1399 </#if>
1400 </div>
1401 </div>
1402 <div class="col-xl-6 col-sm-6 col-xs-12">
1403 <div class="text-center">
1404 <#if Peregrinos ??>
1405 <#if getterUtil.getBoolean(Peregrinos.AdmiteReservas.getData())>
1406 <#assign showReservaButton = false/>
1407 </#if>
1408 <#if Peregrinos.BookingWeb?? && Peregrinos.BookingWeb.data?has_content>
1409 <#assign UrlBooking = Peregrinos.BookingWeb.getData() />
1410 <#assign isExternalLink = !UrlBooking?starts_with("/") && !UrlBooking?contains(themeDisplay.getPortalURL()) />
1411 <a href="${htmlUtil.escapeHREF(UrlBooking)}" class="btn btn-primary btn-small text-center text-uppercase"
1412 <#if isExternalLink>
1413 target="_blank"
1414 rel="noopener noreferrer"
1415 aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')} (${languageUtil.get(request,'opens-new-window')})"
1416 </#if>>
1417 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="${languageUtil.format(request,'go-to-x', 'infoasturias-reservar-ahora')}" aria-hidden="true" role="presentation"/>
1418 <span class="btn-text">
1419 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1420 </span>
1421 </a>
1422 <#assign showReservaButton = false/>
1423 </#if>
1424 </#if>
1425 <#if Contacto.Email.data?has_content || CodigoDGT.data?has_content>
1426 <#if showReservaButton>
1427 <div class="article-info-table-cell align-middle">
1428 <#if Contacto.Email.data?has_content>
1429 <#assign params = {"displayStyle": "ddmTemplate_441008", "portletId": portletTool.getPortletId(request), "articleId": "${articleId}"}>
1430 <#assign portletURL = portletTool.createURL(request, "as_asac_adtvisor_portlet_AdtVisorDialogPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", params) />
1431 <button type="button" class="btn btn-primary btn-small text-center text-uppercase hide btn-availability-request" aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')}" onclick="event.preventDefault(); showDialogIframe('${portletURL}','${languageUtil.get(request,'infoasturias-solicitud-reserva')}', '', '','formularioReserva', 'formularioReservaIframe');">
1432 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="${languageUtil.format(request,'go-to-x', 'infoasturias-reservar-ahora')}" aria-hidden="true" role="presentation">
1433 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1434 </button>
1435 </#if>
1436 <#if CodigoDGT.data?has_content>
1437 <#assign paramsMap = {"accommodationCode": CodigoDGT.data, "jspPage": "/html/results/accommodation/accommodation.jsp"} />
1438 <#assign bookingURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingResultsPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", paramsMap) />
1439 <button type="button" class="btn btn-primary btn-small text-center text-uppercase hide btn-accommodation-booking" aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')}" onclick="event.preventDefault(); showDialogIframe('${bookingURL}','${languageUtil.get(request,'infoasturias-solicitud-reserva')}', '800px', '','formularioReserva', 'formularioReservaIframe');">
1440 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="" aria-hidden="true" role="presentation">
1441 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1442 </button>
1443 </#if>
1444 </div>
1445 </#if>
1446 </#if>
1447 </div>
1448 </div>
1449 </div>
1450
1451 <#-- Related -->
1452 <#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/>
1453 <#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0>
1454 <div class="article-related portlet-background-grey-container">
1455 <div class="container">
1456 <h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3>
1457 <div class="slick article-related-slick">
1458 <#list relatedJournalArticles as currentJournalArticle>
1459 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
1460 <div class="slide">
1461 <a class="card background card-background-9-14" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
1462 <span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
1463 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
1464 <span class="card-body">
1465 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
1466 </span>
1467 </span>
1468 </a>
1469 </div>
1470 </#list>
1471 </div>
1472 </div>
1473 </div>
1474 </#if>
1475
1476 <#-- Nearby -->
1477 <#assign classTypeIds = [598853,582814,584415,625593,623117,609431,593783]>
1478 <#if themeDisplay.getScopeGroupId()==assetEntry.getGroupId()>
1479 <#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! />
1480 <#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0>
1481 <div class="article-nearby portlet-container-margin">
1482 <div class="container">
1483 <div class="article-nearby-container">
1484 <h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3>
1485 <div class="slick article-nearby-slick">
1486 <#list assetsNearJournalArticles as currentJournalArticle>
1487 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
1488 <div class="slide">
1489 <a class="card" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
1490 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
1491 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
1492 <span class="card-hover">
1493 <span class="card-text">${currentJournalArticle.getDescription(locale)}</span>
1494 </span>
1495 </span>
1496 <span class="card-body">
1497 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
1498 <span class="card-subtitle">
1499 <span class="d-block">${currentJournalArticle.getVersion()} Kms</span>
1500 <span class="d-block">${journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"])}</span>
1501 </span>
1502 </span>
1503 </a>
1504 </div>
1505 </#list>
1506 </div>
1507 </div>
1508 </div>
1509 </div>
1510 </#if>
1511 </#if>
1512
1513
1514</article>
1515<#assign params = {}>
1516<#assign resourceURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingSearchPortlet", themeDisplay.getPlid(), "RESOURCE_PHASE", "normal", params) />
1517<#assign resourceURL = httpUtil.addParameter(resourceURL,"p_p_resource_id","hasCentralReservation") />
1518
1519<@liferay_aui["script"] use="aui-base,liferay-portlet-url,aui-io-request-deprecated,aui-io-plugin-deprecated">
1520
1521 Liferay.provide(window,'<@portlet.namespace/>refreshPortlet', function(uri) {
1522 location.href = uri;
1523 });
1524
1525 function checkCentralReservation() {
1526 A.io.request('${resourceURL}', {
1527 data: {
1528 _as_asac_accommodationbooking_AccommodationBookingSearchPortlet_articleId: "${articleId}"
1529 },
1530 dataType: 'JSON',
1531 method: 'GET',
1532 on: {
1533 success: function(){
1534 var response = this.get("responseData");
1535 var aniadido = parseInt(response.results);
1536 var allAvailabilityButtons = A.all('.btn-availability-request');
1537 var allAccommodationButtons = A.all('.btn-accommodation-booking');
1538
1539 var availabilityButtons = allAvailabilityButtons.filter(function(node) {
1540 var isInModal = node.ancestor('.modal, .dialog-iframe-modal, .yui3-widget-modal, [role="dialog"]');
1541 return !isInModal;
1542 });
1543
1544 var accommodationButtons = allAccommodationButtons.filter(function(node) {
1545 var isInModal = node.ancestor('.modal, .dialog-iframe-modal, .yui3-widget-modal, [role="dialog"]');
1546 return !isInModal;
1547 });
1548
1549 if(aniadido > 0){
1550 availabilityButtons.hide();
1551 accommodationButtons.show();
1552 } else {
1553 accommodationButtons.hide();
1554 availabilityButtons.show();
1555 }
1556 },
1557 error: function(){
1558 console.log('Error verificando central de reservas');
1559 }
1560 }
1561 });
1562 }
1563
1564 A.on('domready', function() {
1565 checkCentralReservation();
1566 });
1567
1568 //Show as_asac_accommodationbooking_AccommodationBookingResultsPortlet
1569 <#if validator.isNotNull(cmd) && cmd == "search" >
1570
1571 function loadAccommodationOffers(){
1572 var href = "${roomsURL}";
1573 console.log("loadAccommodationOffers");
1574 console.log(href);
1575 var node = A.one('#bookings-${articleId}');
1576 if(node){
1577 console.log("io-request");
1578 node.show();
1579 node.plug(A.Plugin.IO, {
1580 showLoading: true,
1581 method: 'GET',
1582 uri: href
1583 });
1584 }
1585 }
1586 A.on('domready', function() {
1587 loadAccommodationOffers();
1588 });
1589 </#if>
1590</@>