Ocorreu um erro ao processar o template.
The following has evaluated to null or missing:
==> Contacto.Instagram [in template "37703#37743#1558395" at line 524, 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 524, 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?? && Contacto.Web.getSiblings()?has_content>
416 <#assign hasValidURL = false />
417 <#list Contacto.Web.getSiblings() as web>
418 <#if web.data?trim?has_content>
419 <#assign linkURL = web.data?trim />
420 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
421 <#assign hasValidURL = true />
422 <#break>
423 </#if>
424 </#if>
425 </#list>
426 <#if hasValidURL>
427 <li class="article-list-item web">
428 <span class="fas fa-link" aria-hidden="true"></span>
429 <span class="hide-accessible">${languageUtil.get(request, "site")}</span>
430 <span class="field-wrapper d-inline-flex flex-wrap align-items-center gap-2">
431 <span class="field mr-1">${languageUtil.get(request, "site")}:</span>
432 <#assign webCount = 0 />
433 <#list Contacto.Web.getSiblings() as web>
434 <#if web.data?trim?has_content>
435 <#assign linkURL = web.data?trim />
436 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
437 <#assign webCount = webCount + 1 />
438 </#if>
439 </#if>
440 </#list>
441 <#assign validIndex = 0 />
442 <#list Contacto.Web.getSiblings() as web>
443 <#if web.data?trim?has_content>
444 <#assign linkURL = web.data?trim />
445 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
446 <#if !stringUtil.startsWith(linkURL, "http://") && !stringUtil.startsWith(linkURL, "https://")>
447 <#assign linkURL = "https://${linkURL}" />
448 </#if>
449 <#assign validIndex = validIndex + 1 />
450 <#assign linkNumber = validIndex />
451 <a href="${htmlUtil.escapeHREF(linkURL)}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.get(request, 'site')} ${linkNumber} - ${htmlUtil.escape(title)} (${languageUtil.get(request, 'opens-new-window')})" class="text d-inline-flex align-items-center gap-1 text-nowrap" itemprop="url">
452 <#if webCount gt 1>
453 ${languageUtil.get(request, "visit")} ${linkNumber}
454 <#else>
455 ${languageUtil.get(request, "visit")}
456 </#if>
457 <span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span>
458 </a>
459 <#if validIndex lt webCount>
460 <span class="mx-2 text-muted">|</span>
461 </#if>
462 </#if>
463 </#if>
464 </#list>
465 </span>
466 </li>
467 </#if>
468 </#if>
469 <#if Informacion.FechasCierre.data?has_content>
470 <li class="article-list-item mt-4">
471 <span class="fas fa-calendar" aria-hidden="true"></span>
472 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-fechas-de-cierre")}</span>
473 <span class="field-wrapper">
474 <span class="field">${languageUtil.get(request, "infoasturias-fechas-de-cierre")}:</span>
475 <span class="text">${Informacion.FechasCierre.data}</span>
476 </span>
477 </li>
478 </#if>
479 <#if Informacion.AbiertoTodoAno.data?has_content && (Informacion.AbiertoTodoAno.data == "Si" || Informacion.AbiertoTodoAno.data == "Sí" || Informacion.AbiertoTodoAno.data == "SI")>
480 <li class="article-list-item mt-4">
481 <span class="fas fa-door-open" aria-hidden="true"></span>
482 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-abierto-todo-anio")}</span>
483 <span class="field-wrapper">
484 <span class="text">${languageUtil.get(request, "infoasturias-abierto-todo-anio")}</span>
485 </span>
486 </li>
487 </#if>
488 <#if Descargas ??>
489 <#if validator.isNotNull(Descargas.Archivo.data)>
490 <#if validator.isNotNull(Descargas.Archivo.data)>
491 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Descargas.Archivo.data) />
492 <#if validator.isNotNull(dlFileEntry)>
493 <#assign ext = dlFileEntry.getExtension()!/>
494 <li class="article-list-item document document-${ext}">
495 <span class="fas fa-file" aria-hidden="true"></span>
496 <span class="hide-accessible">${languageUtil.get(request,"related-documents")}</span>
497 <span class="field-wrapper">
498 <span class="field">${languageUtil.get(request, "related-documents")}:</span>
499 <span class="text">
500 <#list Descargas.Archivo.getSiblings() as Item>
501 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) />
502 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
503 <#if validator.isNotNull(dlFileEntry)>
504 <#if Item.ArchivoTitulo.data?has_content>
505 <a href="${downloadURL}" title='${languageUtil.get(request, "${Item.ArchivoTitulo.data}")} ${htmlUtil.escape(title)}' class="">${Item.ArchivoTitulo.data}</a>
506 <#if Item_has_next>, </#if>
507 <#else>
508 <a href="${downloadURL}" title='${languageUtil.get(request, "${dlFileEntry.getTitle()}")} ${htmlUtil.escape(title)}' class="">${dlFileEntry.getTitle()}</a>
509 <#if Item_has_next>, </#if>
510 </#if>
511 </#if>
512 </#list>
513 </span>
514 </span>
515 </li>
516 </#if>
517 </#if>
518 </#if>
519 </#if>
520 </ul>
521 </div>
522 </div>
523
524 <#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)>
525 <div class="article-socials-wrapper mt-4">
526 <div class="socials-wrapper">
527 <div class="socials">
528 <ul class="list-inline items socials">
529 <#if Contacto.Facebook.data?has_content>
530 <#assign linkURL = Contacto.Facebook.data/>
531 <#if !stringUtil.startsWith(linkURL, "http")>
532 <#assign linkURL = "https://${Contacto.Facebook.data}"/>
533 </#if>
534 <li class="list-inline-item item facebook">
535 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Facebook')}" onclick="this.target='_blank'">
536 <span class="fab fa-facebook-f" aria-hidden="true"></span>
537 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span>
538 </a>
539 </li>
540 </#if>
541 <#if Contacto.Twitter.data?has_content>
542 <#assign linkURL = Contacto.Twitter.data/>
543 <#if !stringUtil.startsWith(linkURL, "http")>
544 <#assign linkURL = "https://${Contacto.Twitter.data}"/>
545 </#if>
546 <li class="list-inline-item item twitter">
547 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Twitter')}" onclick="this.target='_blank'">
548 <span class="fa-brands fa-x twitter" aria-hidden="true"></span>
549 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Twitter')}</span>
550 </a>
551 </li>
552 </#if>
553 <#if Contacto.Youtube.data?has_content>
554 <#assign linkURL = Contacto.Youtube.data/>
555 <#if !stringUtil.startsWith(linkURL, "http")>
556 <#assign linkURL = "https://${Contacto.Youtube.data}"/>
557 </#if>
558 <li class="list-inline-item item youtube">
559 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Youtube')}" onclick="this.target='_blank'">
560 <span class="fab fa-youtube" aria-hidden="true"></span>
561 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Youtube')}</span>
562 </a>
563 </li>
564 </#if>
565 <#if Contacto.TikTok??>
566 <#if Contacto.TikTok.data?has_content>
567 <#assign linkURL = Contacto.TikTok.data/>
568 <#if !stringUtil.startsWith(linkURL, "http")>
569 <#assign linkURL = "https://${Contacto.TikTok.data}"/>
570 </#if>
571 <li class="list-inline-item item tiktok">
572 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Tiktok')}" onclick="this.target='_blank'">
573 <span class="fab fa-tiktok" aria-hidden="true"></span>
574 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Tiktok')}</span>
575 </a>
576 </li>
577 </#if>
578 </#if>
579 <#if Contacto.Pinterest.data?has_content>
580 <#assign linkURL = Contacto.Pinterest.data/>
581 <#if !stringUtil.startsWith(linkURL, "http")>
582 <#assign linkURL = "https://${Contacto.Pinterest.data}"/>
583 </#if>
584 <li class="list-inline-item item pinterest">
585 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Pinterest')}" onclick="this.target='_blank'">
586 <span class="fab fa-pinterest-p" aria-hidden="true"></span>
587 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span>
588 </a>
589 </li>
590 </#if>
591 <#if Contacto.Instagram??>
592 <#if Contacto.Instagram.data?has_content>
593 <#assign linkURL = Contacto.Instagram.data/>
594 <#if !stringUtil.startsWith(linkURL, "http")>
595 <#assign linkURL = "https://${Contacto.Instagram.data}"/>
596 </#if>
597 <li class="list-inline-item item instagram">
598 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Instagram')}" onclick="this.target='_blank'">
599 <span class="fab fa-instagram" aria-hidden="true"></span>
600 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span>
601 </a>
602 </li>
603 </#if>
604 </#if>
605 </ul>
606 </div>
607 </div>
608 </div>
609 </#if>
610 <#if getterUtil.getBoolean(Informacion.QdeCalidad.getData()) || getterUtil.getBoolean(Informacion.AldeasCalidad.getData()) || getterUtil.getBoolean(Informacion.CalidadCasonasAsturianas.getData())>
611 <div class="article-info-table">
612 <ul class="article-list article-list-characteristics article-info-border">
613 <#if getterUtil.getBoolean(Informacion.QdeCalidad.getData())>
614 <li class="list-inline-item">
615 <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>
616 </#if>
617 <#if getterUtil.getBoolean(Informacion.AldeasCalidad.getData())>
618 <li class="list-inline-item">
619 <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>
620 </#if>
621 <#if getterUtil.getBoolean(Informacion.CalidadCasonasAsturianas.getData())>
622 <li class="list-inline-item">
623 <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>
624 </#if>
625 </ul>
626 </div>
627 </#if>
628 </div>
629 </div>
630 </div>
631 </div>
632 </div>
633 </header>
634
635 <div class="sheet sheet-lg">
636 <#-- as_asac_accommodationbooking_AccommodationBookingResultsPortlet -->
637 <#assign paramsMap = {
638 "cmd": cmd,
639 "startDate": paramUtil.getString(request, "p_r_p_startDate"),
640 "endDate": paramUtil.getString(request, "p_r_p_endDate"),
641 "priceMin": paramUtil.getString(request, "p_r_p_priceMin"),
642 "priceMax": paramUtil.getString(request, "p_r_p_priceMax"),
643 "rooms": paramUtil.getString(request, "p_r_p_rooms"),
644 "babys": paramUtil.getString(request, "p_r_p_babys"),
645 "kids": paramUtil.getString(request, "p_r_p_kids"),
646 "adults": paramUtil.getString(request, "p_r_p_adults"),
647 "accommodationCode": CodigoDGT.data,
648 "jspPage": "/html/results/accommodation/rooms.jsp"
649 } />
650 <#assign roomsURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingResultsPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "exclusive", paramsMap) />
651 <div id="bookings-${articleId}" class="article-border mb-5 hide">
652 <!-- box-bookings -->
653 </div>
654
655 <#if Informacion.Titulo.data?has_content>
656 <div class="article-great">
657 ${Informacion.Titulo.data}
658 </div>
659 </#if>
660
661 <#assign hasTab1 = Informacion.DescripcionLarga.data?has_content>
662 <#assign hasTab2 = ServiciosEstablecimiento.data?has_content || ServiciosHabitacion.data?has_content || ServiciosComplementarios.data?has_content || SeguridadYSanidad.data?has_content>
663 <#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>
664 <#assign hasTab4 = Informacion.TemporadaAlta.data?has_content || Informacion.TemporadaMedia.data?has_content || Informacion.TemporadaBaja.data?has_content>
665 <#assign hasTab5 = Geolocalizacion.Coordenadas.data?has_content>
666 <#assign hasTab6 = AsturiasMascotas?? && AsturiasMascotas.SuplementoMascota?? && AsturiasMascotas.SuplementoMascota.data?has_content>
667 <#if Peregrinos ??>
668 <#assign hasTab7 = Peregrinos.InfoReservas.data?has_content>
669 </#if>
670 <#assign showFirstTab = true>
671
672 <div class="article-accordion accordion">
673 <#if Visualizador.Slide.getData()?has_content>
674 <div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>">
675 <#list Visualizador.Slide.getSiblings() as Slide>
676 <#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())>
677 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
678 <#assign slideThumbnail2 = dlTool.getThumbnailByJSON(Slide.data, "2")! />
679 <#assign slidePath = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! />
680 <#assign slideUrl = Slide.SlideUrl.data />
681 <#assign dataMap = "" />
682
683 <#if slideUrl?has_content>
684 <#assign slideTitle = "${languageUtil.get(request, 'video')} ${Slide?index}" />
685 <#if Slide.SlideTitulo.data?has_content>
686 <#assign slideTitle = Slide.SlideTitulo.data />
687 </#if>
688
689 <#-- Youtube -->
690 <#assign slideUrl = stringUtil.replace(slideUrl, 'watch?v=', 'embed/') />
691 <#assign slideThumbnail2 = stringUtil.replace(slideUrl, 'www', 'img') />
692 <#assign slideThumbnail2 = stringUtil.replace(slideThumbnail2, 'embed', 'vi') />
693 <#assign slideThumbnail2 = '${slideThumbnail2}/mqdefault.jpg' />
694
695 <#-- Vimeo -->
696 <#if slideUrl?contains("vimeo")>
697 <#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') />
698 <#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') />
699 <#if slideVimeoId?has_content>
700 <#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' />
701 <#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! />
702 <#if slideVimeoJsonContent?has_content>
703 <#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) />
704 <#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) />
705 <#assign slideThumbnail2 = slideVimeoJsonItem.thumbnail_medium />
706 </#if>
707 </#if>
708 </#if>
709 <div id="slide-${Slide?index}" class="slide">
710 <a class="card card-simple card-video" href="#" onclick="javascript: event.preventDefault(); showDialogIframe('${slideUrl}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe');" title="${slideTitle}">
711 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
712 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
713 </span></a>
714 </div>
715 <#else>
716 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${Slide?index}" />
717 <#if Slide.SlideTitulo.data?has_content>
718 <#assign slideTitle = Slide.SlideTitulo.data />
719 </#if>
720 <div class="slide">
721 <a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}">
722 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
723 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
724 </span></a>
725 </div>
726 </#if>
727 </#if>
728 </#list>
729 </div>
730 </#if>
731
732 <#if hasTab1>
733 <div id="tab1" class="article-section accordion-item">
734 <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">
735 <h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3>
736 </a>
737 <div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading1">
738 <#if Informacion.DescripcionLarga.data?has_content>
739 ${Informacion.DescripcionLarga.data}
740 </#if>
741 </div>
742 </div>
743 <#assign showFirstTab = false>
744 </#if>
745
746 <#if hasTab2>
747 <div id="tab2" class="article-section accordion-item">
748 <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">
749 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-servicios-establecimiento')}</h3>
750 </a>
751 <div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2">
752 <#function getServiceIcon serviceName>
753 <#assign iconMap = {
754 "Acceso a internet": "fas fa-network-wired",
755 "Actividades para niños": "fas fa-child",
756 "Admite animales": "fas fa-paw",
757 "Admite caravanas": "fas fa-caravan",
758 "Admite tarjetas": "fas fa-credit-card",
759 "Agroturismo": "fas fa-tractor",
760 "Agua caliente en duchas": "fas fa-shower",
761 "Agua y desagüe caravanas": "fas fa-water",
762 "Aire acondicionado": "fas fa-snowflake",
763 "Almacenamiento seguro para bicicletas": "fas fa-bicycle",
764 "Almohadas": "fas fa-mattress-pillow",
765 "Alquiler de caravanas": "fas fa-caravan",
766 "Alquiler material de camping": "fas fa-campground",
767 "Aparcamiento": "fas fa-parking",
768 "Aseo": "fas fa-restroom",
769 "Balneario/Aguas termales": "fas fa-hot-tub",
770 "Baño interior/exterior": "fas fa-bath",
771 "Bar/Cafetería": "fas fa-mug-saucer",
772 "Barbacoa": "fas fa-fire",
773 "Botella de gas": "fas fa-bottle-water",
774 "Botiquín": "fas fa-first-aid",
775 "Bungalows": "fas fa-home",
776 "Buzón de correos": "fas fa-envelope",
777 "Caja fuerte": "fas fa-vault",
778 "Calefacción": "fas fa-temperature-high",
779 "Chanclas": "fas fa-shoe-prints",
780 "Chimenea": "fas fa-fire-alt",
781 "Chimenea en habitación": "fas fa-fire-alt",
782 "Cocina": "fas fa-kitchen-set",
783 "Colchones": "fas fa-bed",
784 "Comedor": "fas fa-utensils",
785 "Encargada servicios higiénicos": "fas fa-user",
786 "Enfermería": "fas fa-user-nurse",
787 "Equipo respiración artificial": "fas fa-lungs",
788 "Espacio para lavado de bicicletas": "fas fa-bicycle",
789 "Estación de esquí < 30 Km": "fas fa-skiing",
790 "Estufa de leña": "fas fa-fire",
791 "Extintores de incendio": "fas fa-fire-extinguisher",
792 "Gimnasio": "fas fa-dumbbell",
793 "Imprescindible saco de dormir": "fas fa-bed",
794 "Información sobre rutas": "fas fa-map-marked-alt",
795 "Jacuzzi en habitación": "fas fa-hot-tub",
796 "Jacuzzi/Hidromasaje": "fas fa-hot-tub",
797 "Jardín": "fas fa-tree",
798 "Lavadora": "fas fa-soap",
799 "Lavavajillas": "fas fa-sink",
800 "Luces de emergencia": "fas fa-lightbulb",
801 "Médico": "fas fa-user-doctor",
802 "Minibar": "fas fa-martini-glass",
803 "Muebles de jardín": "fas fa-couch",
804 "Nórdicos/Mantas": "fas fa-rug",
805 "Parque infantil": "fas fa-child-reaching",
806 "Piscina exterior": "fas fa-swimming-pool",
807 "Piscina climatizada": "fas fa-person-swimming",
808 "Radio - socorro": "fas fa-broadcast-tower",
809 "Restaurante": "fas fa-utensils",
810 "Saco de dormir": "fas fa-campground",
811 "Sala de audiovisuales": "fas fa-video",
812 "Salas de reuniones": "fas fa-users-line",
813 "Salón con TV": "fas fa-tv",
814 "Sauna": "fas fa-spa",
815 "Servicio de desayunos": "fas fa-bread-slice",
816 "Servicio de cenas": "fas fa-bowl-rice",
817 "Servicio de comidas": "fas fa-bowl-food",
818 "Servicio de cuna": "fas fa-baby",
819 "Servicio de habitaciones": "fas fa-bed",
820 "Servicio de habitaciones 24 hrs.": "fas fa-clock",
821 "Servicio de lavandería": "fas fa-tshirt",
822 "Servicio de limpieza": "fas fa-spray-can-sparkles",
823 "Servicio de recepción": "fas fa-concierge-bell",
824 "Socorrista": "fas fa-life-ring",
825 "Spa": "fas fa-spa",
826 "Supermercado": "fas fa-shopping-basket",
827 "Teléfono": "fas fa-phone",
828 "Televisión en habitación": "fas fa-tv",
829 "Toma de aguas incendios": "fas fa-fire-flame-simple",
830 "Transporte público < 500 m": "fas fa-bus",
831 "Wifi": "fas fa-wifi",
832 "Zona de acampada": "fas fa-campground",
833 "Zona de taller con herramientas": "fas fa-screwdriver-wrench",
834 "Zona de taquillas": "fas fa-lock"
835 } />
836 <#if iconMap[serviceName]??>
837 <#return iconMap[serviceName]>
838 </#if>
839 <#return "fas fa-check-circle">
840 </#function>
841
842 <#assign className = "com.liferay.journal.model.JournalArticle" />
843 <#assign classPK = 0 />
844 <#if (assetEntry??)>
845 <#assign classPK = assetEntry.getClassPK()?long />
846 <#elseif (journalArticle??)>
847 <#assign classPK = journalArticle.getResourcePrimKey()?long />
848 <#elseif (.vars["reserved-article-resource-prim-key"]??)>
849 <#assign classPK = .vars["reserved-article-resource-prim-key"].data?number />
850 <#elseif (request.getAttribute("articleResourcePrimKey")??)>
851 <#assign classPK = request.getAttribute("articleResourcePrimKey")?number />
852 </#if>
853
854 <#assign todasCategorias = [] />
855 <#if classPK?number gt 0>
856 <#attempt>
857 <#assign todasCategorias = assetCategoryLocalService.getCategories(className, classPK) />
858 <#recover>
859 </#attempt>
860 </#if>
861
862 <#assign NAME_TURISMO_RURAL = "Dónde dormir - Turismo rural" />
863 <#assign NAME_ALOJAMIENTOS = "Dónde dormir - Alojamientos" />
864 <#assign NAME_COMUNES = "Dónde dormir - Categorías Comunes" />
865 <#function canonSpaces s>
866 <#if !s??><#return "" /></#if>
867 <#assign t = s?string />
868 <#assign t = t?replace(" ", " ") />
869 <#assign t = t?replace("\\s+", " ", "r") />
870 <#assign t = t?trim />
871 <#return t />
872 </#function>
873
874 <#function isVocabName v targetName>
875 <#return (canonSpaces(v.getName())?lower_case == canonSpaces(targetName)?lower_case) || (canonSpaces(v.getTitle(locale))?lower_case == canonSpaces(targetName)?lower_case) />
876 </#function>
877
878 <#assign excludedTitles = {
879 "1 Estrella": true, "2 Estrellas": true, "3 Estrellas": true, "4 Estrellas": true, "5 Estrellas": true,
880 "1 trisquel": true, "2 trisqueles": true, "3 trisqueles": true,
881 "1 Llave": true, "2 Llaves": true, "3 Llaves": true, "4 Llaves": true,
882 "Primera": true, "Superior": true, "Turísticos": true, "Peregrinos": true, "Juveniles": true,
883 "1 Tienda": true, "2 Tiendas": true, "3 Tiendas": true
884 } />
885 <#assign serviciosMap = {} />
886 <#assign serviciosList = [] />
887
888 <#list todasCategorias as cat>
889 <#attempt>
890 <#assign voc = assetVocabularyLocalService.getVocabulary(cat.getVocabularyId()) />
891 <#assign tituloCat = cat.getTitle(locale) />
892 <#if isVocabName(voc, NAME_TURISMO_RURAL) || isVocabName(voc, NAME_ALOJAMIENTOS)>
893 <#if (cat.getParentCategoryId()?number gt 0) && (!excludedTitles[tituloCat]??)>
894 <#assign cid = cat.getCategoryId()?c />
895 <#if !serviciosMap[cid]??>
896 <#assign serviciosMap = serviciosMap + { cid : true } />
897 <#assign serviciosList = serviciosList + [{"id": cid, "title": tituloCat, "category": cat}] />
898 </#if>
899 </#if>
900 <#elseif isVocabName(voc, NAME_COMUNES)>
901 <#assign cid = cat.getCategoryId()?c />
902 <#if !serviciosMap[cid]??>
903 <#assign serviciosMap = serviciosMap + { cid : true } />
904 <#assign serviciosList = serviciosList + [{"id": cid, "title": tituloCat, "category": cat}] />
905 </#if>
906 </#if>
907 <#recover>
908 </#attempt>
909 </#list>
910
911 <#assign serviciosOrdenados = serviciosList?sort_by("title") />
912 <#if serviciosOrdenados?has_content>
913 <div class="servicios-iconos-wrapper">
914 <div class="servicios-grid">
915 <ul class="list-unstyled servicios-iconos-list" role="list">
916 <#list serviciosOrdenados as item>
917 <#assign servicioNombre = item.title />
918 <#assign iconClass = getServiceIcon(servicioNombre) />
919 <li class="servicio-item">
920 <div class="servicio-icono-container">
921 <span class="${iconClass} servicio-icono" aria-hidden="true"></span>
922 <span class="servicio-nombre">${servicioNombre}</span>
923 </div>
924 </li>
925 </#list>
926 </ul>
927 </div>
928 </div>
929 </#if>
930 <style>
931 .servicios-iconos-wrapper {
932 margin: 2rem 0;
933 }
934 .servicios-grid {
935 margin-top: 1.5rem;
936 }
937 .servicios-iconos-list {
938 display: grid;
939 grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
940 gap: 1rem;
941 padding: 0;
942 margin: 0;
943 }
944 .servicio-item {
945 list-style: none;
946 }
947 .servicio-icono-container {
948 display: flex;
949 flex-direction: column;
950 align-items: center;
951 text-align: center;
952 padding: 0.5rem 0.6rem;
953 border-radius: 10px;
954 transition: all 0.3s ease;
955 background-color: #fff;
956 border: 1px solid #e8e8e8;
957 height: 100%;
958 min-height: 90px;
959 }
960 .servicio-icono {
961 font-size: 1.5rem;
962 color: #36a53e !important;
963 margin-bottom: 0.75rem;
964 transition: all 0.3s ease;
965 }
966 .servicio-nombre {
967 font-size: 0.85rem;
968 font-weight: 500;
969 color: #333;
970 line-height: 1.3;
971 display: block;
972 word-break: break-word;
973 }
974
975 @media (max-width: 768px) {
976 .servicios-iconos-list {
977 grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
978 gap: 0.5rem;
979 }
980 .servicio-icono {
981 font-size: 2rem;
982 }
983 .servicio-nombre {
984 font-size: 0.8rem;
985 }
986 }
987 @media (max-width: 480px) {
988 .servicios-iconos-list {
989 grid-template-columns: repeat(2, 1fr);
990 }
991 }
992 </style>
993 </div>
994 </div>
995 <#assign showFirstTab = false>
996 </#if>
997 <#if Peregrinos ??>
998 <#if hasTab7>
999 <div id="tab7" class="article-section accordion-item">
1000 <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">
1001 <h3 class="h3 accordion-header">${languageUtil.get(request, "infoasturias-peregrinos-info-reservas")}</h3>
1002 </a>
1003 <div id="tabContent7" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading7">
1004 <#if Peregrinos.InfoReservas.data?has_content>
1005 ${Peregrinos.InfoReservas.data}
1006 </#if>
1007 </div>
1008 </div>
1009 <#assign showFirstTab = false>
1010 </#if>
1011 </#if>
1012 <#if hasTab3>
1013 <div id="tab3" class="article-section accordion-item">
1014 <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">
1015 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-tarifas')}</h3>
1016 </a>
1017 <div id="tabContent3" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3">
1018 <#if Contacto.Tarifas.Gratis ?? || Contacto.Tarifas.Donativo ??>
1019 <#if getterUtil.getBoolean(Contacto.Tarifas.Gratis.getData())>
1020 <#assign esGratis = true/>
1021 <#assign precioOrientativo = false/>
1022 </#if>
1023 <#if getterUtil.getBoolean(Contacto.Tarifas.Donativo.getData())>
1024 <#assign donativo = true/>
1025 <#assign precioOrientativo = false/>
1026 </#if>
1027 </#if>
1028 <#if esGratis>
1029 <span>${languageUtil.get(request,"infoasturias-albergues-gratuito")}</span>
1030 </#if>
1031 <#if donativo>
1032 <span>${languageUtil.get(request,"infoasturias-albergues-donativo")}</span>
1033 </#if>
1034 <#if Contacto.Tarifas.data?has_content>
1035 ${Contacto.Tarifas.data}
1036 </#if>
1037 <ul class="article-list list-unstyled article-list-info mt-4">
1038 <#if Contacto.DesayunoIncluido.data?has_content && Contacto.DesayunoIncluido.data != "Desayuno no incluido">
1039 <li class="article-list-item">
1040 <span class="fas fa-coffee" aria-hidden="true"></span>
1041 <span class="hide-accessible">${languageUtil.get(request,"breakfast")}</span>
1042 <span class="field-wrapper">
1043 <span class="field">${languageUtil.get(request, "breakfast")}:</span>
1044 <span class="text">${Contacto.DesayunoIncluido.data}</span>
1045 </span>
1046 </li>
1047 </#if>
1048
1049 <#if Contacto.LimpiezaIncluida.data?has_content && Contacto.LimpiezaIncluida.data != "Limpieza no incluida">
1050 <li class="article-list-item">
1051 <span class="fas fa-broom" aria-hidden="true"></span>
1052 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-clean")}</span>
1053 <span class="field-wrapper">
1054 <span class="field">${languageUtil.get(request, "infoasturias-clean")}:</span>
1055 <span class="text">${Contacto.LimpiezaIncluida.data}</span>
1056 </span>
1057 </li>
1058 </#if>
1059
1060 <#if Contacto.SabanasIncluidas.data?has_content && Contacto.DesayunoIncluido.data != "Sabanas no incluidas">
1061 <li class="article-list-item">
1062 <span class="fas fa-bed" aria-hidden="true"></span>
1063 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-sabanas")}</span>
1064 <span class="field-wrapper">
1065 <span class="field">${languageUtil.get(request, "infoasturias-sabanas")}:</span>
1066 <span class="text">${Contacto.SabanasIncluidas.data}</span>
1067 </span>
1068 </li>
1069 </#if>
1070
1071 <#if Informacion.FechasCierre.data?has_content>
1072 <li class="article-list-item hide">
1073 <span class="fas fa-calendar" aria-hidden="true"></span>
1074 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-fechas-de-cierre")}</span>
1075 <span class="field-wrapper">
1076 <span class="field">${languageUtil.get(request, "infoasturias-fechas-de-cierre")}:</span>
1077 <span class="text">${Informacion.FechasCierre.data}</span>
1078 </span>
1079 </li>
1080 </#if>
1081
1082 <#if Informacion.AbiertoTodoAno.data?has_content && (Informacion.AbiertoTodoAno.data == "Si" || Informacion.AbiertoTodoAno.data == "Sí" || Informacion.AbiertoTodoAno.data == "SI")>
1083 <li class="article-list-item hide">
1084 <span class="fas fa-door-open" aria-hidden="true"></span>
1085 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-abierto-todo-anio")}</span>
1086 <span class="field-wrapper">
1087 <span class="text">${languageUtil.get(request, "infoasturias-abierto-todo-anio")}</span>
1088 </span>
1089 </li>
1090 </#if>
1091 </ul>
1092 </div>
1093 </div>
1094 <#assign showFirstTab = false>
1095 </#if>
1096
1097 <#if hasTab4>
1098 <div id="tab4" class="article-section accordion-item">
1099 <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">
1100 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-temporadas')}</h3>
1101 </a>
1102 <div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4">
1103 <#if Informacion.TemporadaAlta.data?has_content || Informacion.TemporadaMedia.data?has_content || Informacion.TemporadaBaja.data?has_content>
1104 <#if Informacion.TemporadaAlta.data?has_content>
1105 <span class="field-wrapper d-block">
1106 <span class="field">${languageUtil.get(request, "infoasturias-temporada-alta")}:</span>
1107 <span class="text">${Informacion.TemporadaAlta.data}</span>
1108 </span>
1109 </#if>
1110
1111 <#if Informacion.TemporadaMedia.data?has_content>
1112 <span class="field-wrapper d-block">
1113 <span class="field">${languageUtil.get(request, "infoasturias-temporada-media")}:</span>
1114 <span class="text">${Informacion.TemporadaMedia.data}</span>
1115 </span>
1116 </#if>
1117
1118 <#if Informacion.TemporadaBaja.data?has_content>
1119 <span class="field-wrapper d-block">
1120 <span class="field">${languageUtil.get(request, "infoasturias-temporada-baja")}:</span>
1121 <span class="text">${Informacion.TemporadaBaja.data}</span>
1122 </span>
1123 </#if>
1124 </#if>
1125 </div>
1126 </div>
1127 <#assign showFirstTab = false>
1128 </#if>
1129
1130 <#if hasTab5>
1131 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
1132 <div id="tab5" class="article-section article-section-map accordion-item">
1133 <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">
1134 <h3 class="h3 accordion-header">${languageUtil.get(request,'map')}</h3>
1135 </a>
1136 <div id="tabContent5" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5">
1137 <div id="article-map-wrapper-${articleId}" class="article-map-wrapper">
1138 <h4 class="hide-accessible">${languageUtil.get(request,'map')}</h4>
1139 <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)}">
1140 <!-- MAP -->
1141 </div>
1142 <div class="hide-accessible" aria-live="polite">
1143 <p>${languageUtil.get(request,'first-name')}: ${title}</p>
1144 <p>GPS: ${Geolocalizacion.Coordenadas.data}</p>
1145 <#if Contacto.Direccion.data?has_content>
1146 <p>${languageUtil.get(request,'address')}: ${Contacto.Direccion.data} ■ ${Contacto.CP.data} - ${Contacto.Localidad.data}</p>
1147 </#if>
1148 </div>
1149 <div class="article-map-form">
1150 <div class="name important">${title}</div>
1151 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${Geolocalizacion.Coordenadas.data}</span></div>
1152 <form action="https://maps.google.es/maps" method="get" target="_blank" aria-label="${languageUtil.get(request,'infoasturias-como-llegar')}">
1153 <input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}">
1154 <label for="saddr_${articleId}" class="label">
1155 ${languageUtil.get(request,'infoasturias-from')}:
1156 </label>
1157 <input class="form-control" type="text" maxlength="40" name="saddr" id="saddr_${articleId}" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}" aria-required="true">
1158 <button class="btn btn-text" type="submit" aria-label="${languageUtil.get(request,'infoasturias-como-llegar')} (${languageUtil.get(request,'opens-new-window')})">
1159 ${languageUtil.get(request,'infoasturias-como-llegar')}
1160 <span aria-hidden="true">»</span>
1161 </button>
1162 </form>
1163 </div>
1164 </div>
1165 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
1166 <script type="text/javascript">
1167 AUI().ready('aui-base', function(A){
1168 var lat = ${coordenadas[0]},
1169 lng = ${coordenadas[1]},
1170 zoom = 16;
1171 mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16});
1172
1173 //Marker
1174 var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png';
1175 var defaultIcon = L.icon({
1176 iconUrl: defaultIconTheme,
1177 iconSize: [36, 53],
1178 iconAnchor: [18, 53],
1179 iconShadow: [0,0],
1180 popupAnchor: [0, -30]
1181 });
1182 var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent);
1183
1184 var contentString = '<div class="row">';
1185 contentString += '<div class="col-12">';
1186 contentString += '<div class="h4">${htmlUtil.escape(title)}</div>';
1187 contentString += '</div>';
1188 contentString += '</div>';
1189
1190 contentString += '<div class="row">';
1191 contentString += '<div class="col-12">';
1192 <#if validator.isNotNull(articleMainImageThumbnail1)>
1193 contentString += '<img class="pull-right mb-2 ml-2" style="max-width:80px;" src="${articleMainImageThumbnail1}" alt="${htmlUtil.escape(title)}"/>';
1194 </#if>
1195 contentString += '<dl class="mb-0">';
1196 <#if address?has_content>
1197 contentString += '<dt>${languageUtil.get(request,'address')}</dt>';
1198 contentString += '<dd>${htmlUtil.escape(address)}</dd>';
1199 </#if>
1200 <#if Contacto.Telefono.data?has_content>
1201 contentString += '<dt>${languageUtil.get(request,'phone')}</dt>';
1202 contentString += '<dd>${Contacto.Telefono.data}</dd>';
1203 </#if>
1204 <#if Contacto.Email.getData()?has_content>
1205 contentString += '<dt>${languageUtil.get(request,'email')}</dt>';
1206 <#list Contacto.Email.getSiblings() as Item>
1207 contentString += '<dd><a href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}">${Item.data}</a></dd>';
1208 </#list>
1209 </#if>
1210 <#if Contacto.Web.data?has_content>
1211 <#assign linkURL = Contacto.Web.data/>
1212 <#if !stringUtil.startsWith(linkURL, "http")>
1213 <#assign linkURL = "https://${Contacto.Web.data}"/>
1214 </#if>
1215 contentString += '<dt>${languageUtil.get(request,'site')}</dt>';
1216 contentString += '<dd><a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}">${Contacto.Web.data}</a></dd';
1217 </#if>
1218 contentString += '</dl>';
1219 contentString += '</div>';
1220 contentString += '</div>';
1221 marker.bindPopup(contentString);
1222
1223 //Contributor
1224 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
1225 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
1226 }).addTo(mapContent);
1227
1228 }); //AUI.ready
1229 </script>
1230 </div>
1231 </div>
1232 <#assign showFirstTab = false>
1233 </#if>
1234 <#if hasTab6>
1235 <div id="tab6" class="article-section accordion-item">
1236 <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">
1237 <h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-info-mascotas')}</h3>
1238 </a>
1239 <div id="tabContent6" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading6">
1240 <#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>
1241 <div class="list-unstyled">
1242 <div class="list-iconos">
1243 <#if AsturiasMascotas.SuplementoMascota.data?has_content>
1244 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1245 <#if AsturiasMascotas.SuplementoMascota.getData() == "Si">
1246 <#assign SuplementoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Suplemento por mascota")/>
1247 <div ><img src="${SuplementoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}"/></div>
1248 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}</span>
1249 <#elseif AsturiasMascotas.SuplementoMascota.getData() == "No">
1250 <#assign SinSuplementoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Sin suplemento por mascota")/>
1251 <div ><img src="${SinSuplementoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}"/></div>
1252 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}</span>
1253 </#if>
1254 </div>
1255 </#if>
1256 <#if AsturiasMascotas.LimitacionPeso.data?has_content>
1257 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1258 <#assign LimitacionPesoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Limitación de tamaño")/>
1259 <div><img src="${LimitacionPesoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-peso')}"/><span class="value">${AsturiasMascotas.LimitacionPeso.data}</span></div>
1260 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-peso')}</span>
1261 </div>
1262 </#if>
1263 <#if AsturiasMascotas.NumeroMaximoAlojamiento??>
1264 <#if AsturiasMascotas.NumeroMaximoAlojamiento.data?has_content>
1265 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1266 <#assign NumeroMaximoAlojamientoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros en el alojamiento")/>
1267 <div><img src="${NumeroMaximoAlojamientoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-maximo-establecimiento')}"/><span class="value-icono">${AsturiasMascotas.NumeroMaximoAlojamiento.data}</span></div>
1268 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-maximo-establecimiento')}</span>
1269 </div>
1270 </#if>
1271 </#if>
1272 <#if AsturiasMascotas.NumeroMaximo.data?has_content>
1273 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1274 <#assign NumeroMaximoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros por reserva")/>
1275 <div><img src="${NumeroMaximoImage[0]}" alt="${languageUtil.get(request,'infoasturias-maximo-habitacion')}"/><span class="value-icono">${AsturiasMascotas.NumeroMaximo.data}</span></div>
1276 <span class="text-value">${languageUtil.get(request,'infoasturias-maximo-habitacion')}</span>
1277 </div>
1278 </#if>
1279 <#if AsturiasMascotas.SolosHabitacion.data?has_content>
1280 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
1281 <#if AsturiasMascotas.SolosHabitacion.getData() == "Si">
1282 <#assign SolosHabitacionImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Se permite dejar el perro solo en la habitación")/>
1283 <div ><img src="${SolosHabitacionImage[0]}" alt="${languageUtil.get(request,'infoasturias-solas-habitacion')}"/></div>
1284 <span class="text-value">${languageUtil.get(request,'infoasturias-solas-habitacion')}</span>
1285 <#else>
1286 <#assign NoSolosHabitacionImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "No se permite dejar el perro solo en la habitación")/>
1287 <div><img src="${NoSolosHabitacionImage[0]}" alt="${languageUtil.get(request,'infoasturias-no-solas-habitacion')}"/></div>
1288 <span class="text-value">${languageUtil.get(request,'infoasturias-no-solas-habitacion')}</span>
1289 </#if>
1290 </div>
1291 </#if>
1292 </div>
1293 <div class="article-info-table">
1294 <div class="mb-4 title-normas article-info-border">${languageUtil.get(request,'infoasturias-normas-mascotas')}</div>
1295 <ul class="list-unstyled">
1296 <#if AsturiasMascotas.AdmitePPP.data?has_content>
1297 <li class="fas d-block track">
1298 <#if AsturiasMascotas.AdmitePPP.getData() == "Si">
1299 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-ppp')}.</span>
1300 <#else>
1301 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-ppp')}.</span>
1302 </#if>
1303 </li>
1304 </#if>
1305 <#if AsturiasMascotas.ZonasComunesDetalle ??>
1306 <#if AsturiasMascotas.ZonasComunes?? && AsturiasMascotas.ZonasComunes.data?has_content || AsturiasMascotas.ZonasComunesDetalle?? && AsturiasMascotas.ZonasComunesDetalle.data?has_content>
1307
1308 <#if AsturiasMascotas.ZonasComunes.getData() == "Si">
1309 <li class="fas d-block track">
1310 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-zonas-comunes')}.</span>
1311 </li>
1312 <#elseif AsturiasMascotas.ZonasComunes.getData() == "No">
1313 <li class="fas d-block track">
1314 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-zonas-comunes')}.</span>
1315 </li>
1316 <#elseif validator.isNotNull(AsturiasMascotas.ZonasComunesDetalle.data)>
1317 <li class="fas d-block track">
1318 <span class="text-rule">${AsturiasMascotas.ZonasComunesDetalle.data}</span>
1319 </li>
1320 </#if>
1321
1322 </#if>
1323 </#if>
1324 <#if AsturiasMascotas.Cama.data?has_content>
1325 <li class="fas d-block track">
1326 <#if AsturiasMascotas.Cama.getData() == "Si">
1327 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-cama')}.</span>
1328 <#else>
1329 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-mascotas-cama')}.</span>
1330 </#if>
1331 </li>
1332 </#if>
1333 <#if AsturiasMascotas.Comedero.data?has_content>
1334 <li class="fas d-block track">
1335 <#if AsturiasMascotas.Comedero.getData() == "Si">
1336 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-comedero')}.</span>
1337 <#else>
1338 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-comedero')}.</span>
1339 </#if>
1340 </li>
1341 </#if>
1342 <#if AsturiasMascotas.Guarderia.data?has_content>
1343 <li class="fas d-block track">
1344 <#if AsturiasMascotas.Guarderia.getData() == "Si">
1345 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-guarderia')}.</span>
1346 <#else>
1347 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-mascotas-guarderia')}.</span>
1348 </#if>
1349 </li>
1350 </#if>
1351 <#if AsturiasMascotas.OtrasMascotas?? && AsturiasMascotas.OtrasMascotas.data?has_content || AsturiasMascotas.OtrosAnimales?? && AsturiasMascotas.OtrosAnimales.data?has_content>
1352 <li class="fas d-block track">
1353 <#if AsturiasMascotas.OtrasMascotas.getData() == "Si">
1354 <span class="text-rule">${languageUtil.get(request,'infoasturias-otras-mascotas')}:</span>
1355 <span class="text-rule">${AsturiasMascotas.OtrosAnimales.data}</span>
1356 <#else>
1357 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-otras-mascotas')}</span>
1358 </#if>
1359 </li>
1360 </#if>
1361 <#if AsturiasMascotas.PrecioSuplemento?? && AsturiasMascotas.PrecioSuplemento.data?has_content>
1362 <li class="fas d-block track mt-2">
1363 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-suplemento')}: ${AsturiasMascotas.PrecioSuplemento.data}</span>
1364 </li>
1365 </#if>
1366 </ul>
1367 <#if AsturiasMascotas.DetalleNormas.data?has_content>
1368 <div class="rules">
1369 <#assign iconSPAN = AsturiasMascotas.DetalleNormas.data?replace('<p>','<p><span class="fas"></span>')/>
1370 ${iconSPAN}
1371 </div>
1372 </#if>
1373 </div>
1374 </div>
1375 </#if>
1376 </div>
1377 </div>
1378 <#assign showFirstTab = false>
1379 </#if>
1380
1381 </div>
1382 <div class="article-border">
1383 <#if Observaciones.Observacion.data?has_content>
1384 ${Observaciones.Observacion.data}
1385 </#if>
1386
1387 <#if stringUtil.matches(Observaciones.MasInformacion.data, "//") && Contacto.MasInformacion?? >
1388 <a class="" href="${Contacto.MasInformacion.data}" title="${languageUtil.format(request,'go-to-x', 'link')}">${Contacto.MasInformacion.data}
1389 <#elseif validator.isNotNull(Observaciones.MasInformacion.data)>
1390 <span class="">${Observaciones.MasInformacion.data}</span>
1391 </#if>
1392
1393 <#if OtrosDatos.DatosFacilitadosPor?has_content>
1394 <div class="datos-facilitados">
1395 <span class="important mr-1">${languageUtil.get(request,'infoasturias-datos-facilitados-por')}:</span><span class="text-wrapper">${OtrosDatos.DatosFacilitadosPor.data}.</span>
1396 </div>
1397 </#if>
1398
1399 <#if CodigoDGT.data?has_content>
1400 <div>
1401 <span class="text-wrapper mr-1">${languageUtil.get(request,'infoasturias-establecimiento-inscrito-en-registro')} </span><span class="important">${CodigoDGT.data}.</span>
1402 </div>
1403 </#if>
1404 <#if precioOrientativo>
1405 <div class="text-wrapper">${languageUtil.get(request,'infoasturias-precios-orientativos')}.</div>
1406 </#if>
1407 </div>
1408 <div class="row mt-5">
1409 <div class="col-xl-6 col-sm-6 col-xs-12 mb-3">
1410 <div class="text-center">
1411 <#if Contacto.Email.data?has_content>
1412 <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}">
1413 <span class="far fa-envelope mr-2" aria-hidden="true"></span>
1414 <span class="btn-default">${languageUtil.get(request,'infoasturias-contacto-alojamiento')}</span>
1415 </a>
1416 </#if>
1417 </div>
1418 </div>
1419 <div class="col-xl-6 col-sm-6 col-xs-12">
1420 <div class="text-center">
1421 <#if Peregrinos ??>
1422 <#if getterUtil.getBoolean(Peregrinos.AdmiteReservas.getData())>
1423 <#assign showReservaButton = false/>
1424 </#if>
1425 <#if Peregrinos.BookingWeb?? && Peregrinos.BookingWeb.data?has_content>
1426 <#assign UrlBooking = Peregrinos.BookingWeb.getData() />
1427 <#assign isExternalLink = !UrlBooking?starts_with("/") && !UrlBooking?contains(themeDisplay.getPortalURL()) />
1428 <a href="${htmlUtil.escapeHREF(UrlBooking)}" class="btn btn-primary btn-small text-center text-uppercase"
1429 <#if isExternalLink>
1430 target="_blank"
1431 rel="noopener noreferrer"
1432 aria-label="${languageUtil.get(request,'infoasturias-reservar-ahora')} (${languageUtil.get(request,'opens-new-window')})"
1433 </#if>>
1434 <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"/>
1435 <span class="btn-text">
1436 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1437 </span>
1438 </a>
1439 <#assign showReservaButton = false/>
1440 </#if>
1441 </#if>
1442 <#if Contacto.Email.data?has_content || CodigoDGT.data?has_content>
1443 <#if showReservaButton>
1444 <div class="article-info-table-cell align-middle">
1445 <#if Contacto.Email.data?has_content>
1446 <#assign params = {"displayStyle": "ddmTemplate_441008", "portletId": portletTool.getPortletId(request), "articleId": "${articleId}"}>
1447 <#assign portletURL = portletTool.createURL(request, "as_asac_adtvisor_portlet_AdtVisorDialogPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", params) />
1448 <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');">
1449 <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">
1450 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1451 </button>
1452 </#if>
1453 <#if CodigoDGT.data?has_content>
1454 <#assign paramsMap = {"accommodationCode": CodigoDGT.data, "jspPage": "/html/results/accommodation/accommodation.jsp"} />
1455 <#assign bookingURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingResultsPortlet", themeDisplay.getPlid(), themeDisplay.getLifecycle(), "pop_up", paramsMap) />
1456 <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');">
1457 <img src="/o/turismo-asturias-theme/images/icons/tickets.png" alt="" aria-hidden="true" role="presentation">
1458 ${languageUtil.get(request,'infoasturias-reservar-ahora')}
1459 </button>
1460 </#if>
1461 </div>
1462 </#if>
1463 </#if>
1464 </div>
1465 </div>
1466 </div>
1467
1468 <#-- Related -->
1469 <#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/>
1470 <#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0>
1471 <div class="article-related portlet-background-grey-container">
1472 <div class="container">
1473 <h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3>
1474 <div class="slick article-related-slick">
1475 <#list relatedJournalArticles as currentJournalArticle>
1476 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
1477 <div class="slide">
1478 <a class="card background card-background-9-14" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
1479 <span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
1480 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
1481 <span class="card-body">
1482 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
1483 </span>
1484 </span>
1485 </a>
1486 </div>
1487 </#list>
1488 </div>
1489 </div>
1490 </div>
1491 </#if>
1492
1493 <#-- Nearby -->
1494 <#assign classTypeIds = [598853,582814,584415,625593,623117,609431,593783]>
1495 <#if themeDisplay.getScopeGroupId()==assetEntry.getGroupId()>
1496 <#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! />
1497 <#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0>
1498 <div class="article-nearby portlet-container-margin">
1499 <div class="container">
1500 <div class="article-nearby-container">
1501 <h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3>
1502 <div class="slick article-nearby-slick">
1503 <#list assetsNearJournalArticles as currentJournalArticle>
1504 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
1505 <div class="slide">
1506 <a class="card" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
1507 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
1508 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
1509 <span class="card-hover">
1510 <span class="card-text">${currentJournalArticle.getDescription(locale)}</span>
1511 </span>
1512 </span>
1513 <span class="card-body">
1514 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
1515 <span class="card-subtitle">
1516 <span class="d-block">${currentJournalArticle.getVersion()} Kms</span>
1517 <span class="d-block">${journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"])}</span>
1518 </span>
1519 </span>
1520 </a>
1521 </div>
1522 </#list>
1523 </div>
1524 </div>
1525 </div>
1526 </div>
1527 </#if>
1528 </#if>
1529
1530
1531</article>
1532<#assign params = {}>
1533<#assign resourceURL = portletTool.createURL(request, "as_asac_accommodationbooking_AccommodationBookingSearchPortlet", themeDisplay.getPlid(), "RESOURCE_PHASE", "normal", params) />
1534<#assign resourceURL = httpUtil.addParameter(resourceURL,"p_p_resource_id","hasCentralReservation") />
1535
1536<@liferay_aui["script"] use="aui-base,liferay-portlet-url,aui-io-request-deprecated,aui-io-plugin-deprecated">
1537
1538 Liferay.provide(window,'<@portlet.namespace/>refreshPortlet', function(uri) {
1539 location.href = uri;
1540 });
1541
1542 function checkCentralReservation() {
1543 A.io.request('${resourceURL}', {
1544 data: {
1545 _as_asac_accommodationbooking_AccommodationBookingSearchPortlet_articleId: "${articleId}"
1546 },
1547 dataType: 'JSON',
1548 method: 'GET',
1549 on: {
1550 success: function(){
1551 var response = this.get("responseData");
1552 var aniadido = parseInt(response.results);
1553 var allAvailabilityButtons = A.all('.btn-availability-request');
1554 var allAccommodationButtons = A.all('.btn-accommodation-booking');
1555
1556 var availabilityButtons = allAvailabilityButtons.filter(function(node) {
1557 var isInModal = node.ancestor('.modal, .dialog-iframe-modal, .yui3-widget-modal, [role="dialog"]');
1558 return !isInModal;
1559 });
1560
1561 var accommodationButtons = allAccommodationButtons.filter(function(node) {
1562 var isInModal = node.ancestor('.modal, .dialog-iframe-modal, .yui3-widget-modal, [role="dialog"]');
1563 return !isInModal;
1564 });
1565
1566 if(aniadido > 0){
1567 availabilityButtons.hide();
1568 accommodationButtons.show();
1569 } else {
1570 accommodationButtons.hide();
1571 availabilityButtons.show();
1572 }
1573 },
1574 error: function(){
1575 console.log('Error verificando central de reservas');
1576 }
1577 }
1578 });
1579 }
1580
1581 A.on('domready', function() {
1582 checkCentralReservation();
1583 });
1584
1585 //Show as_asac_accommodationbooking_AccommodationBookingResultsPortlet
1586 <#if validator.isNotNull(cmd) && cmd == "search" >
1587
1588 function loadAccommodationOffers(){
1589 var href = "${roomsURL}";
1590 console.log("loadAccommodationOffers");
1591 console.log(href);
1592 var node = A.one('#bookings-${articleId}');
1593 if(node){
1594 console.log("io-request");
1595 node.show();
1596 node.plug(A.Plugin.IO, {
1597 showLoading: true,
1598 method: 'GET',
1599 uri: href
1600 });
1601 }
1602 }
1603 A.on('domready', function() {
1604 loadAccommodationOffers();
1605 });
1606 </#if>
1607</@>