Ocorreu um erro ao processar o template.
Java method "as.asac.template.tools.DLToolImpl.getDLFileEntryByPath(String)" threw an exception when invoked on as.asac.template.tools.DLToolImpl object "as.asac.template.tools.DLToolImpl@4d706ea9"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign dlFileEntry = dlTool.getDLFil... [in template "37703#37743#1558463" at line 186, column 81]
----
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
6<#-- Reserved vbles -->
7<#assign title = .vars['reserved-article-title'].data>
8<#assign articleId=.vars["reserved-article-id"].data />
9<#assign description=.vars["reserved-article-description"].data />
10<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
11<#assign date=.vars["reserved-article-display-date"].data />
12<#assign request = .vars['request']>
13
14<#-- Init -->
15<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)>
16<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)>
17<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
18<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!>
19<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!>
20<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! />
21<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! />
22
23<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" />
24
25<#-- Build -->
26<#if Nombre.data?has_content>
27 <#assign title = Nombre.data>
28</#if>
29<#assign altImgDestacada = title />
30<#if AltImagenDestacada ??>
31 <#if validator.isNotNull(AltImagenDestacada.getData())>
32 <#assign altImgDestacada = AltImagenDestacada.getData() />
33 </#if>
34</#if>
35<article class="template ${ddmStructureNameNormalize}" role="article" itemscope itemtype="http://schema.org/Museum">
36
37 <header class="article-header-wrapper row no-gutters">
38
39 <div class="article-header-container article-header-container-static">
40 <div class="container">
41 <div class="row no-gutters">
42 <div class="col-md-6">
43 <div class="article-image" style="background-image: url('${articleMainImageThumbnail3}')">
44 <img class="sr-only" src="${articleMainImageThumbnail3}" alt="${altImgDestacada}" itemprop="image"/>
45 </div>
46 </div>
47 <div class="article-info-wrapper col-md-6">
48 <div class="article-info">
49 <h2 class="article-title" itemprop="name">${title}</h2>
50 <div class="article-list-wrapper">
51
52 <ul class="article-list list-unstyled article-list-info">
53 <li class="article-list-item mb-4">
54 <span class="fas fa-map-marker-alt">
55 <span class="hide-accessible">${languageUtil.get(request,"title")}</span>
56 </span>
57 <span class="field-wrapper">
58 <#if Contacto.Concejo.data?has_content>
59 <span class="important">${Contacto.Concejo.data}</span>
60 </#if>
61 <#if Contacto.Zona.data?has_content>
62 <span class="text d-block">${Contacto.Zona.data}</span>
63 </#if>
64 </span>
65 </li>
66
67 <#if validator.isNotNull(Contacto.Direccion.data) || validator.isNotNull(Contacto.CP.data) || validator.isNotNull(Contacto.Localidad.data)>
68 <li class="article-list-item">
69 <span class="far fa-address-card">
70 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
71 </span>
72 <span class="field-wrapper">
73 <span class="field">${languageUtil.get(request, "address")}:</span>
74 <span class="text">${Contacto.Direccion.data} ■ </span>
75
76 <#if Contacto.CP ??>
77 <#if validator.isNotNull(Contacto.CP.getData())>
78 <span class="text">${Contacto.CP.data} - ${Contacto.Localidad.data}</span>
79 </#if>
80 </#if>
81 </span>
82 </li>
83 </#if>
84
85 <#if Contacto.Telefono.data?has_content>
86 <li class="article-list-item">
87 <span class="fas fa-phone-alt">
88 <span class="hide-accessible">${languageUtil.get(request,"phone")}</span>
89 </span>
90 <span class="field-wrapper">
91 <span class="field">${languageUtil.get(request, "phone")}:</span>
92 <#list Contacto.Telefono.getSiblings() as telephone>
93 <#assign rawTelefono = telephone.data />
94 <#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") />
95 <#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") />
96 <#assign numberLength = numberTelefono?length />
97 <#if numberLength == 9>
98 <#assign hrefNumber = "+34${numberTelefono}" />
99 <#else>
100 <#assign hrefNumber = numberTelefono />
101 </#if>
102 <span class="text">
103 <a href="tel:${hrefNumber}" itemprop="telephone">${rawTelefono}</a>
104 <#if !telephone?is_last>|</#if>
105 </span>
106 </#list>
107 </span>
108 </li>
109 </#if>
110
111 <#if Contacto.Email.getData()?has_content>
112 <li class="article-list-item">
113 <span class="far fa-envelope">
114 <span class="hide-accessible">${languageUtil.get(request,"email")}</span>
115 </span>
116 <span class="field-wrapper">
117 <span class="field">${languageUtil.get(request, "email")}:</span>
118 <span class="text">
119 <#list Contacto.Email.getSiblings() as Item>
120 <#if validator.isNotNull(Item.data)>
121 <a class="" href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}" itemprop="email">${Item.data}</a><#if Item_has_next>, </#if>
122 </#if>
123 </#list>
124 </span>
125 </span>
126 </li>
127 </#if>
128
129 <#if Contacto.Web?? && Contacto.Web.getSiblings()?has_content>
130 <#assign hasValidURL = false />
131 <#list Contacto.Web.getSiblings() as web>
132 <#if web.data?trim?has_content>
133 <#assign linkURL = web.data?trim />
134 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
135 <#assign hasValidURL = true />
136 <#break>
137 </#if>
138 </#if>
139 </#list>
140 <#if hasValidURL>
141 <li class="article-list-item web">
142 <span class="fas fa-link" aria-hidden="true"></span>
143 <span class="hide-accessible">${languageUtil.get(request, "site")}</span>
144 <span class="field-wrapper d-inline-flex flex-wrap align-items-center gap-2">
145 <span class="field mr-1">${languageUtil.get(request, "site")}:</span>
146 <#assign webCount = 0 />
147 <#list Contacto.Web.getSiblings() as web>
148 <#if web.data?trim?has_content>
149 <#assign linkURL = web.data?trim />
150 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
151 <#assign webCount = webCount + 1 />
152 </#if>
153 </#if>
154 </#list>
155 <#assign validIndex = 0 />
156 <#list Contacto.Web.getSiblings() as web>
157 <#if web.data?trim?has_content>
158 <#assign linkURL = web.data?trim />
159 <#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")>
160 <#if !stringUtil.startsWith(linkURL, "http://") && !stringUtil.startsWith(linkURL, "https://")>
161 <#assign linkURL = "https://${linkURL}" />
162 </#if>
163 <#assign validIndex = validIndex + 1 />
164 <#assign linkNumber = validIndex />
165 <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">
166 <#if webCount gt 1>
167 ${languageUtil.get(request, "visit")} ${linkNumber}
168 <#else>
169 ${languageUtil.get(request, "visit")}
170 </#if>
171 <span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span>
172 </a>
173 <#if validIndex lt webCount>
174 <span class="mx-2 text-muted">|</span>
175 </#if>
176 </#if>
177 </#if>
178 </#list>
179 </span>
180 </li>
181 </#if>
182 </#if>
183
184 <#if Descargas.Archivo.data?has_content ??>
185 <#if validator.isNotNull(Descargas.Archivo.data)>
186 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Descargas.Archivo.data) />
187 <#if validator.isNotNull(dlFileEntry)>
188 <#assign ext = dlFileEntry.getExtension()!/>
189 <li class="article-list-item document document-${ext}">
190 <span class="fas fa-file">
191 <span class="hide-accessible">${languageUtil.get(request,"related-documents")}</span>
192 </span>
193 <span class="field-wrapper">
194 <span class="field">${languageUtil.get(request, "related-documents")}:</span>
195 <span class="text">
196 <#list Descargas.Archivo.getSiblings() as Item>
197 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) />
198 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
199 <#if validator.isNotNull(dlFileEntry)>
200 <#if Item.ArchivoTitulo.data?has_content>
201 <a href="${downloadURL}" title='${languageUtil.get(request, "${Item.ArchivoTitulo.data}")} ${htmlUtil.escape(title)}' class="">${Item.ArchivoTitulo.data}</a>
202 <#if Item_has_next>, </#if>
203 <#else>
204 <a href="${downloadURL}" title='${languageUtil.get(request, "${dlFileEntry.getTitle()}")} ${htmlUtil.escape(title)}' class="">${dlFileEntry.getTitle()}</a>
205 <#if Item_has_next>, </#if>
206 </#if>
207 </#if>
208 </#list>
209 </span>
210 </span>
211 </li>
212 </#if>
213 </#if>
214 </#if>
215 </ul>
216 </div>
217
218 <#if validator.isNotNull(RedesSociales.Facebook.data) || validator.isNotNull(RedesSociales.Twitter.data) || validator.isNotNull(RedesSociales.Youtube.data) || validator.isNotNull(RedesSociales.Pinterest.data) || validator.isNotNull(RedesSociales.Instagram.data) || validator.isNotNull(RedesSociales.Rss.data) || validator.isNotNull(RedesSociales.OtrosCanales.NombreCanal.data)>
219 <div class="article-socials-wrapper mt-4">
220 <div class="socials-wrapper">
221 <div class="socials">
222 <ul class="list-inline items socials">
223 <#if RedesSociales.Facebook.data?has_content>
224 <#assign linkURL = RedesSociales.Facebook.data/>
225
226 <#if !stringUtil.startsWith(linkURL, "http")>
227 <#assign linkURL = "https://${RedesSociales.Facebook.data}"/>
228 </#if>
229 <li class="list-inline-item item facebook">
230 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Facebook')}" onclick="this.target='_blank'">
231 <span class="fab fa-facebook-f">
232 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span>
233 </span>
234 </a>
235 </li>
236 </#if>
237 <#if RedesSociales.Twitter.data?has_content>
238 <#assign linkURL = RedesSociales.Twitter.data/>
239
240 <#if !stringUtil.startsWith(linkURL, "http")>
241 <#assign linkURL = "https://${RedesSociales.Twitter.data}"/>
242 </#if>
243 <li class="list-inline-item item twitter">
244 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Twitter')}" onclick="this.target='_blank'">
245 <span class="fa-brands fa-x twitter">
246 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Twitter')}</span>
247 </span>
248 </a>
249 </li>
250 </#if>
251 <#if RedesSociales.Youtube.data?has_content>
252 <#assign linkURL = RedesSociales.Youtube.data/>
253
254 <#if !stringUtil.startsWith(linkURL, "http")>
255 <#assign linkURL = "https://${RedesSociales.Youtube.data}"/>
256 </#if>
257 <li class="list-inline-item item youtube">
258 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Youtube')}" onclick="this.target='_blank'">
259 <span class="fab fa-youtube">
260 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Youtube')}</span>
261 </span>
262 </a>
263 </li>
264 </#if>
265 <#if RedesSociales.Pinterest.data?has_content>
266 <#assign linkURL = RedesSociales.Pinterest.data/>
267
268 <#if !stringUtil.startsWith(linkURL, "http")>
269 <#assign linkURL = "https://${RedesSociales.Pinterest.data}"/>
270 </#if>
271 <li class="list-inline-item item pinterest">
272 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Pinterest')}" onclick="this.target='_blank'">
273 <span class="fab fa-pinterest-p">
274 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span>
275 </span>
276 </a>
277 </li>
278 </#if>
279 <#if RedesSociales.Instagram.data?has_content>
280 <#assign linkURL = RedesSociales.Instagram.data/>
281
282 <#if !stringUtil.startsWith(linkURL, "http")>
283 <#assign linkURL = "https://${RedesSociales.instagram.data}"/>
284 </#if>
285 <li class="list-inline-item item instagram">
286 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Instagram')}" onclick="this.target='_blank'">
287 <span class="fab fa-instagram">
288 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span>
289 </span>
290 </a>
291 </li>
292 </#if>
293 <#if RedesSociales.Rss.data?has_content>
294 <#assign linkURL = RedesSociales.Rss.data/>
295
296 <#if !stringUtil.startsWith(linkURL, "http")>
297 <#assign linkURL = "https://${RedesSociales.Rss.data}"/>
298 </#if>
299 <li class="list-inline-item item rss">
300 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Rss')}" onclick="this.target='_blank'">
301 <span class="fas fa-rss">
302 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Rss')}</span>
303 </span>
304 </a>
305 </li>
306 </#if>
307 <#list RedesSociales.OtrosCanales.NombreCanal.getSiblings() as Canal>
308 <#if Canal.CanalUrl.data?has_content>
309 <#assign linkURL = Canal.CanalUrl.data/>
310
311 <#if !stringUtil.startsWith(linkURL, "http")>
312 <#assign linkURL = "https://${Canal.CanalUrl.data}"/>
313 </#if>
314 <li class="list-inline-item item instagram">
315 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x',Canal.data)}" onclick="this.target='_blank'">
316 <span class="fas fa-share-alt">
317 <span class="hide-accessible">${languageUtil.format(request,'go-to-x',Canal.data)}</span>
318 </span>
319 </a>
320 </li>
321 </#if>
322 </#list>
323 </ul>
324 </div>
325 </div>
326 </div>
327 </#if>
328
329 </div>
330 </div>
331 </div>
332 </div>
333 </div>
334 </header>
335
336 <div class="sheet sheet-lg">
337 <div class="article-section">
338 <#if Informacion.Titulo.data?has_content>
339 <div class="article-great">
340 ${Informacion.Titulo.data}
341 </div>
342 </#if>
343 <#if Contenido??>
344 <#list Contenido.getSiblings() as Item>
345 <#if Item.ContenidoTitulo.data?has_content || Item.ContenidoTexto.data?has_content || Item.ContenidoTexto.ContentImagen.data?has_content>
346 <#assign tipoHeading = ""/>
347 <#if Item.ContenidoTitulo.headingTipo??>
348 <#if validator.isNotNull(Item.ContenidoTitulo.headingTipo.getData())>
349 <#assign tipoHeading = Item.ContenidoTitulo.headingTipo.getData()/>
350 </#if>
351 </#if>
352 <div class="article-section-content">
353 <#if themeDisplay.isSignedIn()>
354 <div class="portlet-msg-info infoparrafo">
355 <p class="text-center">
356 <#assign cIndex = Item?index + 1 />
357 <span class="important">Contenido <#if Item?index gt 0> ${cIndex}</#if></span>
358 (Información visible únicamente para usuarios logueados)
359 </p>
360 </div>
361 </#if>
362 <#if Item.ContenidoTitulo.data?has_content>
363 <#if tipoHeading == "h2">
364 <h2 class="h3 text-center mt-6 mb-5">
365 ${Item.ContenidoTitulo.data}
366 </h2>
367 <#elseif tipoHeading == "h3">
368 <h3 class="h3 font-weight-semi-bold mt-6 mb-4">
369 ${Item.ContenidoTitulo.data}
370 </h3>
371 <#elseif tipoHeading == "h4">
372 <h4 class="h4 font-weight-semi-bold mt-6 mb-4">
373 ${Item.ContenidoTitulo.data}
374 </h4>
375 <#else>
376 <div class="h4 font-weight-normal mt-6 mb-4">
377 ${Item.ContenidoTitulo.data}
378 </div>
379 </#if>
380 </#if>
381 <div class="article-section-info">
382 <#if Item.ContenidoTexto??>
383 <#list Item.ContenidoTexto.getSiblings() as secc>
384 <#assign curImgAlt = "" />
385 <#if secc.ContentImagen.AltImage?? && validator.isNotNull(secc.ContentImagen.AltImage.getData())>
386 <#assign curImgAlt = secc.ContentImagen.AltImage.getData() />
387 </#if>
388 <#assign curImgTitle = "" />
389 <#if secc.ContentImagen.TitleImage?? && validator.isNotNull(secc.ContentImagen.TitleImage.getData())>
390 <#assign curImgTitle = secc.ContentImagen.TitleImage.getData() />
391 </#if>
392 <#if secc.data?has_content>
393 ${secc.data}
394 </#if>
395 <#if secc.ContentImagen.data?has_content>
396 <div class="article-section-image-wrapper">
397 <div class="article-section-image">
398 <img src="${dlTool.getThumbnail(secc.ContentImagen.data, '3')}" class="rounded" alt="${curImgAlt}" title="${curImgTitle}" loading="lazy" />
399 <#if secc.ContentImagen.PieImage.data?has_content>
400 <div class="article-section-image-footer">
401 ${secc.ContentImagen.PieImage.data}
402 </div>
403 </#if>
404 </div>
405 </div>
406 </#if>
407 </#list>
408 </#if>
409 </div>
410 </div>
411 </#if>
412 </#list>
413 </#if>
414 </div>
415 <#assign hasTab1 = Informacion.Texto.data?has_content>
416 <#assign hasTab2 = Geolocalizacion.Coordenadas.data?has_content>
417 <#assign hasTab3 = Contacto.Temporadas?? && Contacto.Temporadas?has_content>
418 <#assign hasTab4 = Contacto.FechasDeCierre?? && Contacto.FechasDeCierre?has_content>
419 <#assign hasTab5 = Informacion.Horario?has_content || Informacion.Tarifas?has_content>
420 <#assign hasTab6 = Reservas?? && (Reservas.CompraEntradas.data?? && Reservas.CompraEntradas.data?has_content || Reservas.ReservasPhone.data?? && Reservas.ReservasPhone.data?has_content || Reservas.ReservasEmail.data?? && Reservas.ReservasEmail.data?has_content || Reservas.ReservasWhatsapp.data?? && Reservas.ReservasWhatsapp.data?has_content)>
421 <#assign hasTab7 = AsturiasMascotas?? && AsturiasMascotas.LimitacionPeso?? && AsturiasMascotas.LimitacionPeso.data?has_content>
422 <#assign showFirstTab = true>
423
424 <div class="article-accordion accordion">
425
426 <#if Visualizador.Slide.getData()?has_content>
427 <h3 class="h3">${languageUtil.get(locale,"model.resource.com.liferay.portlet.imagegallery")}</h3>
428 <div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>">
429 <#list Visualizador.Slide.getSiblings() as Slide>
430 <#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())>
431 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
432 <#assign slideThumbnail2 = dlTool.getThumbnailByJSON(Slide.data, "2")! />
433 <#assign slidePath = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! />
434 <#assign slideUrl = Slide.SlideUrl.data />
435 <#assign dataMap = "" />
436
437 <#if slideUrl?has_content>
438
439 <#assign slideTitle = "${languageUtil.get(request, 'video')} ${Slide?index}" />
440 <#if Slide.SlideTitulo.data?has_content>
441 <#assign slideTitle = Slide.SlideTitulo.data />
442 </#if>
443
444 <#-- Youtube -->
445 <#assign slideUrl = stringUtil.replace(slideUrl, 'watch?v=', 'embed/') />
446 <#assign slideThumbnail2 = stringUtil.replace(slideUrl, 'www', 'img') />
447 <#assign slideThumbnail2 = stringUtil.replace(slideThumbnail2, 'embed', 'vi') />
448 <#assign slideThumbnail2 = '${slideThumbnail2}/mqdefault.jpg' />
449
450 <#-- Vimeo -->
451 <#if slideUrl?contains("vimeo")>
452 <#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') />
453 <#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') />
454 <#if slideVimeoId?has_content>
455 <#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' />
456 <#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! />
457 <#if slideVimeoJsonContent?has_content>
458 <#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) />
459 <#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) />
460 <#assign slideThumbnail2 = slideVimeoJsonItem.thumbnail_medium />
461 </#if>
462 </#if>
463 </#if>
464
465 <div id="slide-${Slide?index}" class="slide">
466 <a class="card card-simple card-video" href="#" onclick="javascript: event.preventDefault(); showDialogIframe('${slideUrl}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe');" title="${slideTitle}">
467 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
468 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
469 </a>
470 </div>
471 <#else>
472
473 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${Slide?index}" />
474 <#if Slide.SlideTitulo.data?has_content>
475 <#assign slideTitle = Slide.SlideTitulo.data />
476 </#if>
477 <#assign slideAlt = "${slideTitle}" />
478 <#if Slide.ImagenAlt ??>
479 <#if Slide.ImagenAlt.data?has_content>
480 <#assign slideAlt = Slide.ImagenAlt.data />
481 </#if>
482 </#if>
483 <div class="slide">
484 <a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}">
485 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
486 <img class="hide-accessible" alt="${slideAlt}" src="${slideThumbnail2}">
487 </a>
488 </div>
489 </#if>
490 </#if>
491 </#list>
492 </div>
493 </#if>
494
495 <#if hasTab1>
496 <div id="tab1" class="article-section accordion-item">
497 <a href="#tabContent1" id="tabHeading" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent1" role="button">
498 <h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3>
499 </a>
500 <div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading" itemprop="description">
501 <#if Informacion.Texto.data?has_content>
502 ${Informacion.Texto.data}
503 </#if>
504 <#if Informacion.FechaDeConstruccion.data?has_content>
505 <span class="field">${languageUtil.get(request, "infoasturias-fecha-de-construccion")}:</span>
506 <span class="text">${htmlUtil.extractText(Informacion.FechaDeConstruccion.data)}</span>
507 </#if>
508 </div>
509 </div>
510 <#assign showFirstTab = false>
511 </#if>
512
513 <#if hasTab2>
514 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
515 <div id="tab2" class="article-section article-section-map accordion-item">
516 <a href="#tabContent2" id="tabHeading2" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent2" role="button">
517 <h3 class="h3 accordion-header">${languageUtil.get(request,'map')}</h3>
518 </a>
519 <div id="tabContent2" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2">
520 <div id="article-map-wrapper-${articleId}" class="article-map-wrapper">
521 <div id="article-map-content-${articleId}" style="width: 100%; height: 388px; z-index:1"><!-- MAP --></div>
522 <div class="article-map-form">
523 <div class="name important">${title}</div>
524 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${Geolocalizacion.Coordenadas.data}</span></div>
525 <form action="https://maps.google.es/maps" method="get" target="_blank">
526 <input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}">
527 <label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label>
528 <label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label>
529 <input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
530 <input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
531 <button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} »</button>
532 </form>
533 </div>
534 </div>
535 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
536 <script type="text/javascript">
537 AUI().ready('aui-base', function(A){
538 var lat = ${coordenadas[0]},
539 lng = ${coordenadas[1]},
540 zoom = 16;
541 mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16});
542
543 //Marker
544 var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png';
545 var defaultIcon = L.icon({
546 iconUrl: defaultIconTheme,
547 iconSize: [36, 53],
548 iconAnchor: [18, 53],
549 iconShadow: [0,0],
550 popupAnchor: [0, -30]
551 });
552 var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent);
553
554 var contentString = '<div class="row">';
555 contentString += '<div class="col-12">';
556 contentString += '<div class="h4">${htmlUtil.escape(title)}</div>';
557 contentString += '</div>';
558 contentString += '</div>';
559
560 contentString += '<div class="row">';
561 contentString += '<div class="col-12">';
562 <#if validator.isNotNull(articleMainImageThumbnail1)>
563 contentString += '<img class="pull-right mb-2 ml-2" src="${articleMainImageThumbnail1}" alt="$title"/>';
564 </#if>
565 contentString += '<dl class="mb-0">';
566 <#if address?has_content>
567 contentString += '<dt>${languageUtil.get(request,'address')}</dt>';
568 contentString += '<dd>${htmlUtil.escape(address)}</dd>';
569 </#if>
570 <#if Contacto.Telefono.data?has_content>
571 contentString += '<dt>${languageUtil.get(request,'phone')}</dt>';
572 contentString += '<dd>${Contacto.Telefono.data}</dd>';
573 </#if>
574 <#if Contacto.Email.getData()?has_content>
575 contentString += '<dt>${languageUtil.get(request,'email')}</dt>';
576 <#list Contacto.Email.getSiblings() as Item>
577 contentString += '<dd><a href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}">${Item.data}</a></dd>';
578 </#list>
579 </#if>
580 <#if Contacto.Web.data?has_content>
581 <#assign linkURL = Contacto.Web.data/>
582
583 <#if !stringUtil.startsWith(linkURL, "http")>
584 <#assign linkURL = "https://${Contacto.Web.data}"/>
585 </#if>
586 contentString += '<dt>${languageUtil.get(request,'site')}</dt>';
587 contentString += '<dd><a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}">${Contacto.Web.data}</a></dd';
588 </#if>
589 contentString += '</dl>';
590 contentString += '</div>';
591 contentString += '</div>';
592 <#if validator.isNotNull(description)>
593 contentString += '<div class="row"><div class="col-12">${htmlUtil.escape(description)}</div></div>';
594 </#if>
595 marker.bindPopup(contentString);
596
597 //Contributor
598 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
599 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
600 }).addTo(mapContent);
601
602 }); //AUI.ready
603 </script>
604 </div>
605 </div>
606 <#assign showFirstTab = false>
607 </#if>
608
609 <#if hasTab3>
610 <div id="tab3" class="article-section accordion-item">
611 <a href="#tabContent3" id="tabHeading3" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent3" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-temporadas')}</h3></a>
612 <div id="tabContent3" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3">
613 <#if Contacto.Temporadas.data?has_content>
614 ${Contacto.Temporadas.data}
615 </#if>
616 </div>
617 </div>
618 <#assign showFirstTab = false>
619 </#if>
620
621 <#if hasTab4>
622 <div id="tab4" class="article-section accordion-item">
623 <a href="#tabContent4" id="tabHeading4" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent4" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-fechas-de-cierre')}</h3></a>
624 <div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4">
625 <#if Contacto.FechasDeCierre.data?has_content>
626 ${Contacto.FechasDeCierre.data}
627 </#if>
628 </div>
629 </div>
630 <#assign showFirstTab = false>
631 </#if>
632
633 <#if hasTab5>
634 <div id="tab5" class="article-section accordion-item">
635 <a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent5" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-horarios-y-tarifas')}</h3></a>
636 <div id="tabContent5" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5">
637 <#if Informacion.Horario.data?has_content>
638 <div class="mb-1 font-weight-semi-bold text-success"><span class="far fa-clock mr-2 text-success"></span>${languageUtil.get(request,'infoasturias-horario')}:</div>
639 <div class="mb-4">${Informacion.Horario.data}</div>
640 </#if>
641 <#if Informacion.Tarifas.data?has_content>
642 <div class="mb-1 font-weight-semi-bold text-success"><span class="fas fa-coins mr-2 text-success"></span>${languageUtil.get(request,'infoasturias-tarifas')}:</div>
643 <div>${Informacion.Tarifas.data}</div>
644 </#if>
645 </div>
646 </div>
647 <#assign showFirstTab = false>
648 </#if>
649 <#if hasTab6>
650 <#if Reservas.CompraEntradas?? && Reservas.CompraEntradas?has_content || Reservas.ReservasPhone?? && Reservas.ReservasPhone?has_content || Reservas.ReservasEmail?? && Reservas.ReservasEmail?has_content || Reservas.ReservasWhatsapp?? && Reservas.ReservasWhatsapp?has_content>
651 <div id="tab6" class="article-section accordion-item">
652 <a href="#tabContent6" id="tabHeading6" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent6" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'booking-action')}</h3></a>
653 <div id="tabContent6" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading6">
654 <#if Reservas.CompraEntradas.data?has_content>
655 <div class="text-center">
656 <a class="btn btn-primary mb-3" href="${Reservas.CompraEntradas.data}">${languageUtil.get(request,'infoasturias-compra-entradas')}</a>
657 </div>
658 </#if>
659 <#if Reservas.ReservasPhone.data?has_content>
660 <div class="text-center">
661 <a class="btn btn-primary mb-3" href="tel:+${Reservas.ReservasPhone.data}"><i class="fas fa-phone-alt"></i> ${languageUtil.get(request,'infoasturias-telefono')}</a>
662 </div>
663 </#if>
664 <#if Reservas.ReservasEmail.data?has_content>
665 <div class="text-center">
666 <a class="btn btn-primary mb-3" href="mailto:${Reservas.ReservasEmail.data}"><i class="fas fa-envelope"></i> ${languageUtil.get(request,'infoasturias-email')}</a>
667 </div>
668 </#if>
669 <#if Reservas.ReservasWhatsapp.data?has_content>
670 <div class="text-center">
671 <a class="btn btn-primary mb-3" href="https://wa.me/34${Reservas.ReservasWhatsapp.data}"><i class="fab fa-whatsapp"></i> Whatsapp</a>
672 </div>
673 </#if>
674 </div>
675 </div>
676 </#if>
677 <#assign showFirstTab = false>
678 </#if>
679 <#if hasTab7>
680 <div id="tab7" class="article-section accordion-item">
681 <a href="#tabContent7" id="tabHeading7" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent7" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-info-mascotas')}</h3></a>
682 <div id="tabContent7" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading7">
683 <#if AsturiasMascotas.LimitacionPeso?? && AsturiasMascotas.LimitacionPeso.data?has_content || AsturiasMascotas.AdmitePPP?? && AsturiasMascotas.AdmitePPP.data?has_content ||
684 AsturiasMascotas.NumeroMaximoPersona?? && AsturiasMascotas.NumeroMaximoPersona.data?has_content || AsturiasMascotas.NumeroMaximoInterior?? && AsturiasMascotas.NumeroMaximoInterior.data?has_content || AsturiasMascotas.AccesoInterior?? && AsturiasMascotas.AccesoInterior.data?has_content || AsturiasMascotas.AccesoTerraza?? && AsturiasMascotas.AccesoTerraza.data?has_content || AsturiasMascotas.DetalleNormas?? && AsturiasMascotas.DetalleNormas.data?has_content>
685 <div class="list-unstyled">
686 <div class="list-iconos">
687 <#if AsturiasMascotas.LimitacionPeso.data?has_content>
688 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
689 <#assign LimitacionPesoKey = journalTool.getDDMStructureSelectKeyByJournalArticle(journalArticle, "LimitacionPeso", AsturiasMascotas.LimitacionPeso.getData(), locale)/>
690 <#assign LimitacionPesoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Limitación de tamaño")/>
691 <#if AsturiasMascotas.LimitacionPeso.getData() != "">
692 <div><img src="${LimitacionPesoImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-peso')}"/><span class="value">${LimitacionPesoKey}</span></div>
693 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-peso')}</span>
694 </#if>
695 </div>
696 </#if>
697 <#if AsturiasMascotas.NumeroMaximoPersona.data?has_content>
698 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
699 <#assign NumeroMaximoKey = journalTool.getDDMStructureSelectKeyByJournalArticle(journalArticle, "NumeroMaximoPersona", AsturiasMascotas.NumeroMaximoPersona.getData(), locale)/>
700 <#assign NumeroMaximoImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros por persona")/>
701 <#if AsturiasMascotas.NumeroMaximoPersona.getData() != "">
702 <div><img src="${NumeroMaximoImage[0]}" alt="${languageUtil.get(request,'infoasturias-maximo-persona')}"/><span class="value-icono"> ${NumeroMaximoKey}</span></div>
703 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}</span>
704
705 </#if>
706 </div>
707 </#if>
708 <#if AsturiasMascotas.NumeroMaximoInterior.data?has_content>
709 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
710 <#assign NumeroMaximoInteriorImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Cupo máximo de perros en el interior")/>
711 <div><img src="${NumeroMaximoInteriorImage[0]}" alt="${languageUtil.get(request,'infoasturias-maximo-interior')}"/><span class="value-icono"> ${AsturiasMascotas.NumeroMaximoInterior.data}</span></div>
712 <span class="text-value">${languageUtil.get(request,'infoasturias-maximo-interior')}</span>
713 </div>
714 </#if>
715 <#if AsturiasMascotas.AccesoInterior.data?has_content>
716 <#assign AccesoInteriorImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Accesso al interior")/>
717 <#assign SinAccesoInteriorImage = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Sin acceso interior")/>
718 <div class="col-xl-2 col-sm-6 col-xs-12 text-center list-inline-item icono">
719 <#if AsturiasMascotas.AccesoInterior.getData() == "Si">
720 <div ><img src="${AccesoInteriorImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-interior')}"/></div>
721 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-interior')}</span>
722 <#else>
723 <div><img src="${SinAccesoInteriorImage[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-interior')}"/></div>
724 <span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-interior')}</span>
725 </#if>
726 </div>
727 </#if>
728 </div>
729 <div class="article-info-table">
730 <div class="mb-4 title-normas article-info-border">${languageUtil.get(request,'infoasturias-normas-mascotas')}</div>
731 <ul class="list-unstyled">
732 <#if AsturiasMascotas.AdmitePPP.data?has_content>
733 <li class="fas d-block track">
734 <#if AsturiasMascotas.AdmitePPP.getData() == "Si">
735 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-ppp')}.</span>
736 <#else>
737 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-ppp')}.</span>
738 </#if>
739 </li>
740 </#if>
741 <#if AsturiasMascotas.AccesoTerraza.data?has_content>
742 <li class="fas d-block track">
743 <#if AsturiasMascotas.AccesoTerraza.getData() == "Si">
744 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-terraza')}.</span>
745 <#else>
746 <span class="text-rule">${languageUtil.get(request,'infoasturias-mascotas-no-terraza')}.</span>
747 </#if>
748 </li>
749 </#if>
750 <#if AsturiasMascotas.OtrasMascotas.data?has_content || AsturiasMascotas.OtrosAnimales.data?has_content>
751 <li class="fas d-block track">
752 <#if AsturiasMascotas.OtrasMascotas.getData() == "Si">
753 <span class="text-rule">${languageUtil.get(request,'infoasturias-otras-mascotas')}:</span>
754 <span class="text-rule">${AsturiasMascotas.OtrosAnimales.data}</span>
755 <#else>
756 <span class="text-rule">${languageUtil.get(request,'infoasturias-no-otras-mascotas')}</span>
757 </#if>
758 </li>
759 </#if>
760 </ul>
761 <#if AsturiasMascotas.DetalleNormas.data?has_content>
762 <div class="rules mt-2">
763 <#assign iconSPAN = AsturiasMascotas.DetalleNormas.data?replace('<p>','<p><span class="fas"></span>')/>
764 ${iconSPAN}
765 </div>
766 </#if>
767 </div>
768 </div>
769 </#if>
770 </div>
771 </div>
772 <#assign showFirstTab = false>
773 </#if>
774 </div>
775
776 <#if validator.isNotNull(Informacion.Observaciones.data) || validator.isNotNull(Contacto.MasInformacion.data) >
777 <div class="article-border">
778 <#if Informacion.Observaciones?has_content>
779 ${Informacion.Observaciones.data}
780 </#if>
781 <#if Contacto.MasInformacion?has_content>
782 <#list Contacto.MasInformacion.getSiblings() as Item>
783 <#if stringUtil.matches(Item.data, "//") >
784 <div><a class="link" href="${Item.data}" title="${languageUtil.format(request,'go-to-x', 'link')}">${Item.data}</a></div>
785 <#else>
786 <div><span class="">${Item.data}</span></div>
787 </#if>
788 </#list>
789 </#if>
790 </div>
791 </#if>
792 </div>
793
794 <#-- Related -->
795 <#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/>
796 <#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0>
797 <div class="article-related portlet-background-grey-container">
798 <div class="container">
799 <h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3>
800 <div class="slick article-related-slick">
801 <#list relatedJournalArticles as currentJournalArticle>
802 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
803 <div class="slide">
804 <a class="card background card-background-9-14" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
805 <span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
806 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
807 <span class="card-body">
808 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
809 </span>
810 </span>
811 </a>
812 </div>
813 </#list>
814 </div>
815 </div>
816 </div>
817 </#if>
818
819 <#-- Nearby -->
820 <#assign classTypeIds = [598853,582814,625593,623117,609431,593783]>
821 <#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! />
822 <#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0>
823 <div class="article-nearby portlet-container-margin">
824 <div class="container">
825 <div class="article-nearby-container">
826 <h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3>
827 <div class="slick article-nearby-slick">
828 <#list assetsNearJournalArticles as currentJournalArticle>
829 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
830 <div class="slide">
831 <a class="card" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
832 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
833 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
834 <span class="card-hover">
835 <span class="card-text">${currentJournalArticle.getDescription(locale)}</span>
836 </span>
837 </span>
838 <span class="card-body">
839 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
840 <span class="card-subtitle">
841 <span class="d-block">${currentJournalArticle.getVersion()} Kms</span>
842 <span class="d-block">${journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"])}</span>
843 </span>
844 </span>
845 </a>
846 </div>
847 </#list>
848 </div>
849 </div>
850 </div>
851 </div>
852 </#if>
853</article>