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