itinerario prova bike
An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetCategoryLocalService.getAssetEntryAssetCategories [in template "20099#20135#6418874" at line 62, column 25]
----
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: #assign categoryList = assetCategoryL... [in template "20099#20135#6418874" at line 62, column 1]
----
1<#--ITINERARIO ESERCIZIO 10/06/2025-->
2<style>
3 .link-list .link-container:last-child {
4 border-bottom: 4px solid #395a3e;
5 }
6
7 .link-sidebar-1 .link .label {
8 font-size: 1.1rem;
9 }
10</style>
11<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")>
12<#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()>
13<#assign itinerarioStructureId = structureService.getStructureItinerarioId()>
14<#assign elasticService = serviceLocator.findService("it.inera.elastic.service.ElasticService")>
15<#assign journalArticleId = .vars['reserved-article-id'].data/>
16
17<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
18<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
19<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
20
21<#-- GESTIONE RALATED ASSETS IMPORTS-->
22<#assign journalArticleConverter = serviceLocator.findService("it.inera.journalarticleconverter.service.JournalArticleConverter")>
23<#assign searchService = serviceLocator.findService("it.inera.structure.search.service.SearchService")>
24<#-- FINE GESTIONE RALATED ASSETS IMPORTS-->
25
26<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") >
27
28<#if coordinate_principali.getData()?has_content && coordinate_principali.getData()?trim?length gt 0 >
29 <#assign coordinatePrincipaliJson = coordinate_principali.getData()?eval >
30 <#if coordinatePrincipaliJson.latitude?has_content && coordinatePrincipaliJson.latitude?trim?length gt 0 >
31 <#assign latitude = coordinatePrincipaliJson.latitude?c >
32 </#if>
33 <#if coordinatePrincipaliJson.longitude?has_content && coordinatePrincipaliJson.longitude?trim?length gt 0 >
34 <#assign longitude = coordinatePrincipaliJson.longitude?c >
35 </#if>
36<#else>
37 <#assign latitude = "" >
38 <#assign longitude = "" >
39</#if>
40
41<#assign currentArticle = journalArticleLocalService.getArticle(groupId, journalArticleId) />
42
43<#-- GESTIONE ASSET LINGUA DI DEFAULT -->
44<#assign currentObjectDefaultLanguage = journalArticleConverter.getItinerario(currentArticle, localeUtil.getDefault())>
45
46<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
47<#assign currentObject = journalArticleConverter.getItinerario(currentArticle, themeDisplay.getLocale())>
48<#assign relatedAssets = currentObject.getDirectRelatedAssets()>
49<#assign relatedResults = []>
50<#if relatedAssets?? && relatedAssets?has_content>
51 <#assign relatedResult = searchService.getResponse(relatedAssets, themeDisplay.getLocale(), null, themeDisplay)>
52 <#if relatedResult?? && relatedResult?has_content>
53 <#assign relatedResults = relatedResult.getData()>
54 </#if>
55</#if>
56<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
57
58<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
59<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
60<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
61
62<#assign categoryList = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) >
63
64<#assign vocabularyIdTerritori = structureService.getVocabularyIdByVocabularyName("Territori") >
65<#assign categoryListIds = [] >
66<#assign municipalityNames = [] >
67<#assign municipalityNamesString = "" >
68<#assign isTerritorio = false >
69<#assign territoryNameString = "" >
70
71<#assign hasTappe = false >
72<#assign hasTappewithGeolocation = false >
73<#if tappa.getData()?has_content>
74 <#list tappa.getSiblings() as cur_tappa>
75 <#if cur_tappa.titolo_tappa.getData()?has_content>
76 <#assign hasTappe = true >
77 </#if>
78
79 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.geolocalizzazione?has_content
80 && cur_tappa.comune.geolocalizzazione.getData() != "" && cur_tappa.comune.geolocalizzazione.getData()?has_content)>
81 <#list cur_tappa.comune.getSiblings() as comune_tappa>
82 <#if comune_tappa?has_content && comune_tappa.geolocalizzazione?has_content && comune_tappa.geolocalizzazione.getData()?has_content>
83 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(comune_tappa.geolocalizzazione.getData())>
84 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
85 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
86 <#if latitude?has_content && longitude?has_content>
87 <#assign hasTappewithGeolocation = true>
88 <#break>
89 </#if>
90 </#if>
91 </#list>
92 </#if>
93
94 </#list>
95</#if>
96
97<#if hasTappewithGeolocation>
98 <#assign latitude = "" >
99 <#assign longitude = "" >
100</#if>
101
102<#list categoryList as category>
103 <#if vocabularyIdUmbria == category.getVocabularyId() >
104 <#assign categoryListIds = categoryListIds + [category.getCategoryId()]>
105 </#if>
106</#list>
107
108
109<#list categoryList as category>
110 <#if vocabularyIdTerritori == category.getVocabularyId() >
111 <#assign municipalityName = category.getTitle(themeDisplay.getLanguageId()) >
112
113 <#assign childCategories = assetCategoryLocalService.getChildCategories(category.getCategoryId()) >
114 <#if childCategories?has_content>
115 <#assign territoryNameString = category.getTitle(themeDisplay.getLanguageId())>
116 <#list childCategories as curChildCategory>
117 <#assign isTerritorio = true >
118 <#assign municipalityNameC = curChildCategory.getTitle(themeDisplay.getLanguageId()) >
119 <#if curChildCategory?counter != 1 || municipalityNamesString?has_content>
120 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityNameC>
121 <#else>
122 <#assign municipalityNamesString = municipalityNamesString + municipalityNameC>
123 </#if>
124 <#assign municipalityNames = municipalityNames + [municipalityNameC]>
125 </#list>
126 <#else>
127 <#assign municipalityNames = municipalityNames + [municipalityName]>
128 <#if municipalityNamesString?has_content>
129 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityName>
130 <#else>
131 <#assign municipalityNamesString = municipalityNamesString + municipalityName>
132 </#if>
133 </#if>
134 </#if>
135</#list>
136
137<#assign isgu = structureService.isGroupUmbria(themeDisplay)>
138<#assign sitiESottositiCategories = "">
139<#if !isgu>
140 <#assign sitiESottositiCategories = structureService.getSiteCategoryIdsByVocabularyName(themeDisplay, "Siti-e-sottositi")>
141</#if>
142<#if validator.isNotNull(sitiESottositiCategories)>
143 <#list sitiESottositiCategories as cat>
144 <#assign categoryListIds = categoryListIds + [cat]>
145 </#list>
146</#if>
147
148<#if isgu>
149 <#assign results = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), itinerarioStructureKey, itinerarioStructureId?c, locale, "6", null , null, journalArticleId, null, null, null) />
150<#else>
151 <#assign results = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), itinerarioStructureKey, itinerarioStructureId?c, locale, "6", null , sitiESottositiCategories, journalArticleId, null, null, null) />
152</#if>
153
154<#-- per categoria -->
155
156<#assign categoryArray=[]>
157<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
158<#assign vocabularyName = "Vocabolario Umbria"/>
159<#assign specificVocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompany().getGroupId(), vocabularyName)/>
160<#if validator.isNotNull(specificVocabulary)>
161 <#assign cats = specificVocabulary.getCategories()/>
162</#if>
163
164<#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) />
165<#if validator.isNotNull(cats)>
166 <#list cats as cat>
167 <#list categories as cate>
168 <#if cat == cate>
169 <#assign categoryArray = categoryArray + [cat]>
170 </#if>
171 </#list>
172 </#list>
173</#if>
174
175<#--<#if categoryArray?? && categoryArray?has_content>
176 <#assign firstCategory = categoryArray[0] />
177 <#assign titleCategory = firstCategory.getTitle(themeDisplay.getLocale())>
178</#if>-->
179
180<#-- per categoria FINE -->
181
182<#assign widthBannerImg = propsUtil.get("image.scale.fullpage") />
183<#assign widthSliderTappaImg = propsUtil.get("image.slider.testobarra.height") />
184<#assign widthSliderImg = propsUtil.get("image.slider.testobarra.height") />
185<#assign widthCardImg = propsUtil.get("image.scale.allpage") />
186<#assign tomBaseImagePath = propsUtil.get("tom.base.image.url") />
187
188<#assign urlBanner = immagine_banner.getData() >
189<#assign testAlternativoImmagineBanner = testo_alternativo_immagine_banner.getData() >
190<#attempt>
191 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getImmagineBanner()?has_content>
192 <#assign urlBanner = currentObjectDefaultLanguage.getImmagineBanner().getUrl() >
193 </#if>
194 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner()?has_content>
195 <#assign testAlternativoImmagineBanner = currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner() >
196 </#if>
197 <#recover>
198 <#assign urlBanner = immagine_banner.getData() >
199 <#assign testAlternativoImmagineBanner = testo_alternativo_immagine_banner.getData() >
200</#attempt>
201
202<#if urlBanner?contains("?")>
203 <#assign urlBanner = urlBanner + "&width=" + widthBannerImg >
204<#else>
205 <#assign urlBanner = urlBanner + "?width=" + widthBannerImg >
206</#if>
207
208<div class="container-fluid">
209 <div class="row">
210 <div class="header-block header-block-1 header-block-image-main header-block-tagged">
211
212 <img class="bg" src="${urlBanner}" alt="${testAlternativoImmagineBanner}">
213 <div class="container title title-main">
214 <div class="row">
215 <div class="col-12">
216 <#assign titleCategory = "">
217 <#assign titleParentCategory = "">
218 <#list categoryList as category>
219 <#if vocabularyIdUmbria == category.getVocabularyId() >
220 <#assign titleCategory = category.getTitle(themeDisplay.getLocale())>
221 <#assign parentCategoryId = category.getParentCategoryId()>
222 <#if parentCategoryId?? && parentCategoryId?has_content && parentCategoryId != 0>
223 <#assign pc = assetCategoryLocalService.getCategory(parentCategoryId) >
224 <#if pc?? && pc?has_content>
225 <#assign titleParentCategory = pc.getTitle("it_IT")>
226 </#if>
227 </#if>
228 <#if titleCategory?? && titleCategory?has_content>
229 <span class="hidden" id="tagmanager_init_pagegroup">${titleParentCategory}</span>
230 <span class="hidden" id="tagmanager_init_pagecategory">${titleCategory}</span>
231 <div class="badge badge-light badge-uppercase">
232 ${titleCategory}
233 </div>
234 </#if>
235 </#if>
236 </#list>
237 <h1 class="title-1 text-weight-300 margin-top-em-0 margin-bottom-em-0">
238 ${titolo.getData()}
239 </h1>
240 </div>
241 </div>
242 </div>
243 </div>
244 </div>
245</div>
246<#assign categoryArray=[]>
247
248
249<#assign count = 0 />
250<#if dati_tecnici_chiave?? && dati_tecnici_chiave?has_content >
251 <#list dati_tecnici_chiave.getSiblings() as cur_dati_tecnici_chiave>
252 <#if cur_dati_tecnici_chiave.dati_tecnici_valore?? && cur_dati_tecnici_chiave.dati_tecnici_valore.getData()?has_content >
253 <#assign count = count + 1 />
254 </#if>
255 </#list>
256</#if>
257
258<#if count gt 0 >
259 <#assign dividendo = 12/count />
260</#if>
261
262<div class="container-fluid bg-white">
263 <#if count gt 0 && count lt 4>
264 <div class="row flex-column-reverse flex-lg">
265 <div class="container bridge bridge-top">
266 <div class="row">
267 <div class="col-12">
268 <div class="card-bar card-bar-1 card-bar-dark">
269 <div class="card-row">
270 <#list dati_tecnici_chiave.getSiblings() as cur_dati_tecnici_chiave>
271 <div class="col-${dividendo}">
272 <div class="card card-horizontal card-3">
273 <div class="card-row">
274 <div class="card-icon card-item-first">
275 <i class="fas ${cur_dati_tecnici_chiave.dati_tecnici_icona.getData()}"></i>
276 </div>
277 <div class="card-body">
278 <div class="row">
279 <div class="col-12">
280 <div class="card-subtitle title-6">
281 ${cur_dati_tecnici_chiave.getData()}
282 </div>
283 </div>
284 <div class="col-12">
285 <div class="card-title">
286 ${cur_dati_tecnici_chiave.dati_tecnici_valore.getData()}
287 </div>
288 </div>
289 </div>
290 </div>
291 </div>
292 </div>
293 </div>
294 </#list>
295 </div>
296 </div>
297 </div>
298 </div>
299 </div>
300 </div>
301 </#if>
302
303 <div class="row">
304 <article class="container padding-bottom-em-4">
305 <div class="row">
306
307 <div class="col-12">
308 <div class="text-left link-back-container margin-left-rem-1"><a class="link-1 link-back margin-top-em-2 padding-left-rem-1" id="backLink" href="#"><i class="im im-angle-left"></i><span class="hidden display-inline-lg"><@liferay.language key="label.indietro" /></span></a></div>
309 <div class="text-center padding-top-em-2">
310 <div class="link-1 link-toggle-map"></div>
311 </div>
312 <div class="link-tripplanner-container">
313 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
314 <a data-id="${journalArticleId}" class="link link-tripplanner link-tripplanner-1 link-tripplanner-extended link-tripplanner-top-right margin-right-em-1 padding-right-rem-1" href="${currentUrl}" data-tom="false">
315 <i class="far fa-heart text-red"></i>
316 <i class="fas fa-heart text-red" style="display:none"></i>
317 <span class="label hidden display-inline-lg"><@liferay.language key="label.aggiungi.al.mio.viaggio" /></span>
318 </a>
319 </div>
320
321 <div class="hidden infos">
322 <div class="hidden" id="tagmanager_item_">
323 <span id="tagmanager_item_id">${currentArticleAssetEntryId}</span>
324 <span id="tagmanager_item_category">${titleCategory}</span>
325 <span id="tagmanager_item_name">${titolo.getData()}</span>
326 <span id="tagmanager_item_list_name">${titleCategory}</span>
327 <span id="tagmanager_item_list_id"></span>
328 <span id="tagmanager_item_brand">${titleParentCategory}</span>
329 <span id="tagmanager_index">1</span>
330 </div>
331 </div>
332 </div>
333
334
335 <div class="col-12 col-md-8">
336 <div class="text-block text-block-left">
337 <div class="title-4 padding-bottom-em-1 mt-5 e mt-lg-0">
338 ${sottotitolo.getData()}
339 </div>
340 <div class="text">
341 ${descrizione.getData()}
342 </div>
343
344
345 <#if hasTappe?c = "false">
346 <br>
347 <#if validator.isNotNull(descrizione_due.getData()) && descrizione_due.getData() != '<p>null</p>'>
348 <div class="text">
349 ${descrizione_due.getData()}
350 </div>
351 </#if>
352 </#if>
353 </div>
354 </div>
355
356
357 <#assign fileKml = "" />
358 <#assign checkFileKml = false />
359 <#assign urlFileKml = "" />
360
361 <#assign fileGps = "" />
362 <#assign checkFileGps = false />
363 <#assign urlFileGps = "" />
364 <#assign urlFileGpsNoWaypoints = "">
365
366 <#assign countFile = 0 />
367 <#if file_tecnici?? && file_tecnici?has_content>
368 <#list file_tecnici.getSiblings() as cur_file_tecnici>
369 <#if cur_file_tecnici.file.getData()?? && cur_file_tecnici.file.getData()?has_content >
370
371 <#assign counter = 0 >
372
373 <#list cur_file_tecnici.file.getData()?split("/") as x>
374 <#if counter == 2>
375 <#assign groupIdd = x?number >
376 </#if>
377 <#if counter == 5>
378 <#assign uuId = x >
379 <#if uuId?contains("?t=") >
380 <#assign uuid = uuId?keep_before("?t=") />
381 </#if>
382 </#if>
383 <#assign counter = counter + 1 >
384 </#list>
385
386 <#assign fileEntry = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
387 <#assign file=fileEntry.getFileEntryByUuidAndGroupId(uuid,groupIdd) >
388
389 <#if file.getExtension() == "kml" >
390 <#assign fileKml = file />
391 <#assign checkFileKml = true />
392 <#assign countFile = countFile - 1 />
393 <#assign urlFileKml = "/documents/"+ fileKml.getGroupId() +"/" +fileKml.getClassPK() +"/"+ fileKml.getTitle() +"/"+fileKml.getUuid() >
394 </#if>
395
396 <#if file.getExtension() == "gpx" >
397 <#assign fileGps = file />
398 <#if fileGps?has_content>
399 <#assign fileGpsNoWaypoints = currentObject.removeMarkerFromGpxItinerario(fileGps, themeDisplay)>
400 <#else>
401 <#assign fileGpsNoWaypoints = "">
402 </#if>
403
404 <#assign checkFileGps = true />
405 <#assign urlFileGps = "/documents/"+ fileGps.getGroupId() +"/" +fileGps.getClassPK() +"/"+ fileGps.getTitle() +"/"+fileGps.getUuid() >
406 <#if fileGpsNoWaypoints?has_content>
407 <#assign urlFileGpsNoWaypoints = "/documents/"+ fileGpsNoWaypoints.getGroupId() +"/" +fileGpsNoWaypoints.getClassPK() +"/"+ fileGpsNoWaypoints.getTitle() +"/"+fileGpsNoWaypoints.getUuid()>
408 </#if>
409
410 </#if>
411
412 <#assign countFile = countFile + 1 />
413 </#if>
414 </#list>
415 </#if>
416
417 <div class="col-md-4" style="margin-top:5rem;">
418 <#if countFile gt 0>
419 <div class="text-block text-block-1">
420 <div class="link-sidebar link-sidebar-1">
421 <div class="title" style="border-top: 4px solid #395a3e; margin-top: 40px; padding-top: 1.5rem;">
422 <@liferay.language key="label.download"/>
423 </div>
424 <ul class="link-list">
425 <#list file_tecnici.getSiblings() as cur_file_tecnici>
426 <#if !cur_file_tecnici.getData()?contains("kml")>
427 <li class="link-container">
428 <a class="link" href="${cur_file_tecnici.file.getData()}">
429 <i class="fas fa-angle-right"></i>
430 <span class="label">
431 <#if cur_file_tecnici.getData()?? && cur_file_tecnici.getData()?has_content>
432 ${cur_file_tecnici.getData()}
433 <#else>
434 Scarica traccia completa
435 </#if>
436 </span>
437 </a>
438 </li>
439 </#if>
440 </#list>
441 </ul>
442 </div>
443 </div>
444 </#if>
445 <#if titolo_link_card?? && titolo_link_card.getData()?has_content>
446
447 <#assign titoloLinkCardList = titolo_link_card.getSiblings()![]>
448
449 <#list titoloLinkCardList as item>
450 <#assign titoloLink = item.getData()?string!"" />
451 <#assign sottotitoloLink = item.getChild("sottotitolo_link_card")?has_content?then(item.getChild("sottotitolo_link_card").getData()?string, "") />
452 <#assign urlLink = item.getChild("url_link_card").getData()?string!"" />
453 <#assign immagineLink = item.getChild("immagine_link_card").getData()?string!"" />
454
455 <#if urlLink?has_content && titoloLink?has_content && immagineLink?has_content>
456 <div class="mb-4">
457 <div class="card card-horizontal card-event-1 card-event-default h-100">
458 <a class="card-link" href="${urlLink}" aria-label="${titoloLink}"></a>
459 <span class="card-row">
460 <span class="card-image aspect-ratio card-item-first">
461 <img class="aspect-ratio-item aspect-ratio-item-center-ceil aspect-ratio-item-fluid bike-card"
462 src="${immagineLink}" alt="${titoloLink}">
463 </span>
464 <span class="card-body">
465 <div class="row">
466 <div class="col-12">
467 <span class="card-title" style="font-size:20px;">${titoloLink}</span>
468 </div>
469 <#if sottotitoloLink?has_content>
470 <div class="col-12">
471 <span class="card-subtitle title-6">${sottotitoloLink}</span>
472 </div>
473 </#if>
474 </div>
475 </span>
476 </span>
477 </div>
478 </div>
479 </#if>
480 </#list>
481 </#if>
482 </div>
483 </div>
484 </article>
485 </div>
486 <#assign non_visualizzare_la_mappa = non_visualizzare_la_mappa!false>
487
488 <#if non_visualizzare_la_mappa?is_hash>
489 <#assign non_visualizzare_la_mappa_value = non_visualizzare_la_mappa.getData()?trim>
490 <#if non_visualizzare_la_mappa_value?has_content>
491 <#assign non_visualizzare_la_mappa_bool = non_visualizzare_la_mappa_value?boolean>
492 <#else>
493 <#assign non_visualizzare_la_mappa = false>
494 <#assign non_visualizzare_la_mappa_bool = false>
495 </#if>
496 <#else>
497 <#assign non_visualizzare_la_mappa_bool = false>
498 </#if>
499
500 <#-- Mostra campo accessibilita -->
501 <#if accessibilita.getData()?? && accessibilita.getData()?has_content>
502 <div class="container-fluid bg-white">
503 <div class="row">
504 <article class="container">
505 <div class="row">
506 <div class="col-12 col-md-8">
507 <div class="text-block text-block-left">
508 <div class="text">
509 <strong><@liferay.language key="label.accessibilita" /></strong>
510 ${accessibilita.getData()}
511 </div>
512 </div>
513 </div>
514 </div>
515 </article>
516 </div>
517 </div>
518 </#if>
519
520 <#-- Mostra campo sicurezza -->
521 <#if sicurezza.getData()?? && sicurezza.getData()?has_content>
522 <div class="container-fluid bg-white">
523 <div class="row">
524 <article class="container">
525 <div class="row">
526 <div class="col-12 col-md-8">
527 <div class="text-block text-block-left">
528 <div class="text">
529 <strong><@liferay.language key="label.sicurezza" /></strong>
530 ${sicurezza.getData()}
531 </div>
532 </div>
533 </div>
534 </div>
535 </article>
536 </div>
537 </div>
538 </#if>
539
540 <#if non_visualizzare_la_mappa_bool>
541 <!-- mappa non visualizzata -->
542
543 <#else>
544
545 <div class="container-fluid">
546 <div class="row">
547 <div class="map map-container map-banner">
548 <div class="map-content">
549 <div class="leaflet-interactive-map map-summary-itinerary" id="map-itinerary" data-config="{"otherTemplate":true, "isItinerary":true}" data-kml="${urlFileKml}" data-gpx="${urlFileGpsNoWaypoints}"></div>
550 </div>
551 </div>
552 </div>
553 </div>
554 <#if (latitude?has_content && longitude?has_content)>
555 <div class="itinerary-stage" id="" data-lat="${latitude}" data-lng="${longitude}" data-img="" data-title="${titolo.getData()}" data-info="${titolo.getData()}" style="display:none;" data-altri-data="{"data-altri-data":true}"></div>
556 </#if>
557 </#if>
558
559 <#if tappa.getData()?has_content>
560 <div class="container-fluid bg-white">
561 <div class="row padding-top-em-5">
562 <div class="container">
563 <div class="row">
564 <div class="col-12 col-md-10 col-lg-8">
565 <#list tappa.getSiblings() as cur_tappa>
566 <#assign latitude = 0>
567 <#assign longitude = 0>
568
569 <#--CICLO COORDINATE TAPPA-->
570 <#assign coords = []>
571 <#assign coordsObj = "">
572 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.geolocalizzazione?has_content && cur_tappa.comune.geolocalizzazione.getData() != "" && cur_tappa.comune.geolocalizzazione.getData()?has_content)>
573 <#list cur_tappa.comune.getSiblings() as comune_tappa>
574
575 <#if comune_tappa?has_content && comune_tappa.geolocalizzazione?has_content && comune_tappa.geolocalizzazione.getData()?has_content>
576
577 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(comune_tappa.geolocalizzazione.getData())>
578 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
579 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
580
581 <#assign info = "">
582 <#if (comune_tappa.via_piazza?has_content && comune_tappa.via_piazza.getData() != "")>
583 <#assign info = info + comune_tappa.via_piazza.getData()>
584 </#if>
585
586 <#if (comune_tappa.localita?has_content && comune_tappa.localita.getData() != "")>
587 <#assign info = info + " " + comune_tappa.localita.getData()>
588 </#if>
589
590 <#if (comune_tappa.cap?has_content && comune_tappa.cap.getData() != "")>
591 <#assign info = info + " " + comune_tappa.cap.getData()>
592 </#if>
593
594 <#if (comune_tappa.getData() != "")>
595 <#assign info = info + " " + comune_tappa.getData()>
596 </#if>
597
598 <#assign info = info?replace("\"",""")>
599 <#assign info = info?replace("'","'")>
600
601 <#assign coord = {"lat" : latitude, "lng" : longitude, "info": info}>
602 <#assign coords = coords + [coord]>
603
604 </#if>
605
606 </#list>
607 <#assign coordsObj = jsonFactoryUtil.looseSerializeDeep(coords)>
608 </#if>
609 <#--FINE CICLO COORDINATE TAPPA-->
610
611 <#if (cur_tappa?has_content &&
612 cur_tappa.comune?has_content &&
613 cur_tappa.comune.geolocalizzazione?has_content &&
614 cur_tappa.comune.geolocalizzazione.getData() != "")>
615 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(cur_tappa.comune.geolocalizzazione.getData())>
616 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
617 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
618 </#if>
619
620 <#assign info = "">
621
622 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.via_piazza?has_content &&
623 cur_tappa.comune.via_piazza.getData() != "")>
624 <#assign info = info + cur_tappa.comune.via_piazza.getData()>
625 </#if>
626
627 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.localita?has_content &&
628 cur_tappa.comune.localita.getData() != "")>
629 <#assign info = info + " " + cur_tappa.comune.localita.getData()>
630 </#if>
631
632 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.cap?has_content &&
633 cur_tappa.comune.cap.getData() != "")>
634 <#assign info = info + " " + cur_tappa.comune.cap.getData()>
635 </#if>
636
637 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.getData() != "")>
638 <#assign info = info + " " + cur_tappa.comune.getData()>
639 </#if>
640
641 <#if cur_tappa.titolo_immagine_tappa.immagine_tappa.getData()?? && cur_tappa.titolo_immagine_tappa.immagine_tappa.getData()?has_content>
642 <#assign data_img = cur_tappa.titolo_immagine_tappa.immagine_tappa.getData()>
643 <#else>
644 <#assign data_img = ""/>
645 </#if>
646
647 <#assign dataMarkerLabel = cur_tappa.getData()>
648
649 <div class="itinerary-stage" id="${cur_tappa.titolo_tappa.getData()?replace("’","-")?replace(" ", "-")?replace("(", "")?replace(")", "")}" data-img="${data_img}" data-title="${cur_tappa.titolo_tappa.getData()}" data-lat="${latitude}" data-lng="${longitude}" data-info="${info}" data-coords='${coordsObj}' data-altri-data="{"data-altri-data":true}" data-marker-label="${dataMarkerLabel}">
650 <div class="row">
651 <div class="col-2">
652 <div class="itinerary-sidebar">
653 <div class="marker">
654 <img src="/o/umbria-theme/images/icons/leaflet/marker-icon.svg" alt="Marker">
655 <div class="marker-label text-red">${cur_tappa.getData()}</div>
656 </div>
657 <div class="track"></div>
658 </div>
659 </div>
660 <div class="col-10">
661 <div class="itinerary-body padding-bottom-em-5">
662 <div class="title">${cur_tappa.titolo_tappa.getData()}</div>
663 <#if cur_tappa.titolo_immagine_tappa.getData()?has_content>
664 <div class="image-container" style="margin-bottom:3rem;">
665 <div class="carousel-container transparent">
666 <div class="tns-carousel tns-carousel-default" data-tns-config="{"items":1,"autoplay":true,"autoplayHoverPause":true,"autoplayButtonOutput":false,"speed":1000}">
667 <#list cur_tappa.titolo_immagine_tappa.getSiblings() as titolo_immagine_tappa>
668 <div>
669 <#assign linkImmagine = "">
670 <#if titolo_immagine_tappa.immagine_tappa.getData()?contains("?")>
671 <#assign linkImmagine = titolo_immagine_tappa.immagine_tappa.getData() + "&width=" + widthSliderTappaImg >
672 <#else>
673 <#assign linkImmagine = titolo_immagine_tappa.immagine_tappa.getData() + "?width=" + widthSliderTappaImg >
674 </#if>
675
676 <#assign altImg = ""/>
677 <#if titolo_immagine_tappa.testo_alternativo_tappa?? && titolo_immagine_tappa.testo_alternativo_tappa.getData()?has_content && titolo_immagine_tappa.testo_alternativo_tappa.getData() != "null">
678 <#assign altImg = titolo_immagine_tappa.testo_alternativo_tappa.getData()/>
679 <#else>
680 <#if cur_tappa.titolo_tappa.getData()?has_content>
681 <#assign altImg = "Immagine: " + cur_tappa.titolo_tappa.getData()/>
682 </#if>
683 </#if>
684 <img class="slide-image" src="${linkImmagine}" alt="${altImg}">
685 <#if titolo_immagine_tappa.didascalia_immagine_tappa.getData()??
686 && titolo_immagine_tappa.didascalia_immagine_tappa.getData()?has_content
687 && titolo_immagine_tappa.didascalia_immagine_tappa.getData()?trim?length gt 0
688 && titolo_immagine_tappa.didascalia_immagine_tappa.getData()?trim != "null">
689 <p class="caption" style="margin-bottom: 12px;">${titolo_immagine_tappa.didascalia_immagine_tappa.getData()}</p>
690 </#if>
691 </div>
692 </#list>
693 </div>
694 </div>
695 </div>
696 </#if>
697 <#if cur_tappa.descrizione_tappa.getData()?has_content && cur_tappa.descrizione_tappa.getData()?trim != "null">
698 <div class="text-block-expandable">
699 <div class="text">
700 ${cur_tappa.descrizione_tappa.getData()}
701 </div>
702 </div>
703 <div class="margin-top-em-2 btn btn-flat btn-default btn-small btn-text-block-expand show-more" data-showmore="<@liferay.language key="label.leggi.di.piu" />" data-showless="<@liferay.language key="label.leggi.di.meno" />"><@liferay.language key="label.leggi.di.piu" /></div>
704 </#if>
705 </div>
706 </div>
707 </div>
708 </div>
709 </#list>
710 </div>
711 </div>
712 </div>
713 </div>
714 </div>
715 </#if>
716
717
718 <#if hasTappe?c = "true">
719 <#if validator.isNotNull(descrizione_due.getData()) && descrizione_due.getData() != '<p>null</p>'>
720 <div class="container-fluid bg-white">
721 <div class="row">
722 <article class="container padding-bottom-em-3">
723 <div class="row">
724 <div class="col-12 col-md-8">
725 <div class="text-block text-block-left">
726 <div class="text">
727 ${descrizione_due.getData()}
728 </div>
729 </div>
730 </div>
731 </div>
732 </article>
733 </div>
734 </div>
735 </#if>
736 </#if>
737
738
739
740
741
742 <#if descrizione_immagine?? && descrizione_immagine.getSiblings()?has_content && descrizione_immagine.getSiblings()?size gt 0 && descrizione_immagine.getSiblings()[0].immagine.getData()?? && descrizione_immagine.getSiblings()[0].immagine.getData()?has_content>
743 <div class="container-fluid bg-white">
744 <div class="row">
745 <div class="carousel-container carousel-no-ctrl transparent margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
746 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,
747 "responsive":{"768":{"items":3},"992":{"items":4}}}">
748 <#if descrizione_immagine?? && descrizione_immagine.getSiblings()?has_content>
749 <#list descrizione_immagine.getSiblings() as cur_descrizione_immagine>
750 <div class="item-with-caption">
751
752 <#assign linkImmagine = "">
753 <#if cur_descrizione_immagine.immagine.getData()?contains("?")>
754 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "&width=1082">
755 <#else>
756 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "?width=1082">
757 </#if>
758
759 <img class="slide-image" src="${linkImmagine}" alt="${cur_descrizione_immagine.testo_alternativo.getData()}">
760 <#if cur_descrizione_immagine.didascalia.getData()?? && cur_descrizione_immagine.didascalia.getData()?has_content && cur_descrizione_immagine.didascalia.getData()?trim?length gt 0 && cur_descrizione_immagine.didascalia.getData()?trim != "null">
761 <p class="caption">${cur_descrizione_immagine.didascalia.getData()}</p>
762 </#if>
763 </div>
764 </#list>
765 </#if>
766 </div>
767 </div>
768 </div>
769 </div>
770 <#else>
771 <#attempt>
772 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getImmagini()?has_content>
773 <div class="container-fluid bg-white">
774 <div class="row">
775 <div class="carousel-container carousel-no-ctrl transparent margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
776 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,"responsive":{"768":{"items":3},"992":{"items":4}}}">
777 <#list currentObjectDefaultLanguage.getImmagini() as imm>
778 <div class="item-with-caption">
779 <#if imm.getImmagine()?? && imm.getImmagine()?has_content && imm.getImmagine().getUrl()?? && imm.getImmagine().getUrl()?has_content>
780 <img class="slide-image" src="${imm.getImmagine().getUrl()}?width=1082" alt="${imm.getTestoAlternativo()}">
781 <#if imm.getDidascalia()?? && imm.getDidascalia()?has_content && imm.getDidascalia()?trim?length gt 0 && imm.getDidascalia()?trim != "null">
782 <p class="caption">${imm.getDidascalia()}</p>
783 </#if>
784 </#if>
785 </div>
786 </#list>
787 </div>
788 </div>
789 </div>
790 </div>
791 </#if>
792 <#recover>
793
794 </#attempt>
795 </#if>
796
797
798 <#assign lang = "it"/>
799 <#if themeDisplay.getLanguageId()?contains("_")>
800 <#assign lang = themeDisplay.getLanguageId()?split("_")[0]/>
801 <#else>
802 <#assign lang = themeDisplay.getLanguageId()/>
803 </#if>
804 <#assign tomApi = serviceLocator.findService("it.inera.tom.api.TOMAPI")>
805
806 <#if municipalityNames?has_content && municipalityNames?size gt 0 && lang?has_content && lang?trim?length gt 0 && tomApi?has_content>
807
808 <#assign offerResults = [] />
809
810 <#-- Recupera e assegna il parametro solo se presente -->
811 <#if request.getParameter("OFFERSELECTPORTALTAGS")?? && request.getParameter("OFFERSELECTPORTALTAGS")?has_content>
812 <#assign OFFERSELECTPORTALTAGS = request.getParameter("OFFERSELECTPORTALTAGS")?split(",") />
813 </#if>
814
815 <#attempt>
816 <#if OFFERSELECTPORTALTAGS?? && OFFERSELECTPORTALTAGS?size gt 0>
817 <#assign offerResults = tomApi.getJsonOffersListResultByMunicipalitiesAndTag(municipalityNames, lang, OFFERSELECTPORTALTAGS) />
818 <#else>
819 <#assign offerResults = tomApi.getJsonOffersListResultByMunicipalities(municipalityNames, lang) />
820 </#if>
821 <#recover>
822 <#-- Eventuale gestione errore -->
823 </#attempt>
824
825
826
827
828 <#if offerResults?? && offerResults?has_content>
829 <#assign offerResponse = offerResults.getResponse()>
830 <#if offerResponse?? && offerResponse?has_content>
831 <#assign offerResults = offerResponse.getResults()>
832 <#if offerResults?? && offerResults?has_content>
833 <aside class="container-fluid bg-white" id="hideable">
834 <div class="row">
835 <div class="container padding-top-em-3">
836 <div class="row">
837 <div class="col-12 col-md-10 offset-md-1 margin-bottom-lg-em-0 margin-bottom-em-2">
838 <div class="text-block text-block-center">
839 <div class="title-2">
840 <@liferay.language key="label.migliori.offerte" />
841 </div>
842 <div class="text">
843 <@liferay.language key="label.proposte.vivere.umbria" />
844 </div>
845 </div>
846 </div>
847 </div>
848
849 <div class="row">
850 <div class="col-12">
851 <div class="d-flex flex-justify-content-end">
852 <a class="link-showall" href="/lista-offerte?municipality=${municipalityNamesString}&territory=${territoryNameString}&tags=bike"><@liferay.language key="label.vedi.tutte" />
853 <i class="fas fa-angle-right"></i>
854 </a>
855 </div>
856 </div>
857 <div class="col-12">
858 <div class="row">
859 <div class="col-12 padding-bottom-em-3">
860 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
861 <div class="tns-carousel tns-carousel-default">
862 <#list offerResults as offerResult>
863
864 <div>
865 <div class="card card-1 card-offerta has-info-commercial">
866 <a class="card-link" href="/dettaglio-offerta/-/dettaglio/${offerResult.getSlug()}_${offerResult.getId()}_${offerResult.getType()}" aria-label="${offerResult.getTitle()}"></a>
867 <div class="card-header">
868
869 <div class="hidden" id="tagmanager_item_card">
870 <span id="tagmanager_item_id">${offerResult.getId()}</span>
871 <span id="tagmanager_item_category_card">${offerResult.getType()}</span>
872 <span id="tagmanager_item_name">${offerResult.getTitle()}</span>
873 <span id="tagmanager_item_list_name_card">Le migliori offerte per te</span>
874 <span id="tagmanager_item_list_id"></span>
875 <span id="tagmanager_item_brand">${offerResult.getType()}</span>
876 <span id="tagmanager_index">${offerResult_index}</span>
877 </div>
878 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
879 <#if offerResult.getGalleries()?has_content>
880 <#if offerResult.getGalleries().getImages()?has_content && offerResult.getGalleries().getImages()?size gt 0>
881 <#assign file = ""/>
882 <#assign alt = ""/>
883 <#if offerResult.getGalleries().getImages()[0].getFile()?has_content>
884 <#assign file = tomBaseImagePath + offerResult.getGalleries().getImages()[0].getFile()/>
885 <#else>
886 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
887 </#if>
888 <#if offerResult.getGalleries().getImages()[0].getAlt()?has_content>
889 <#assign alt = offerResult.getGalleries().getImages()[0].getAlt()/>
890 </#if>
891
892 <#if !offerResult.getGalleries().getImages()[0].getAlt()?has_content>
893 <#assign alt ="Titolo: " + offerResult.getTitle()/>
894 </#if>
895 <img src="${file}?params[width]=354" alt="${alt}">
896 </#if>
897 <#else>
898 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
899 <img src="${file}?params[width]=354" alt="logo_no_image">
900 </#if>
901 </div>
902
903 <#if offerResult.getType()?? && offerResult.getType()?has_content && offerResult.getType()?trim?length gt 0 && offerResult.getType()?trim != "accommodation">
904 <button class="link link-tripplanner link-tripplanner-1 link-tripplanner-top-right margin-top-em-2 margin-right-em-1" data-detail-type="${offerResult.getType()}/offer" data-id="${offerResult.getId()}" data-tom="true" aria-label="<@liferay.language key="label.aggiungi.elimina.viaggio"/>">
905 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
906 </button>
907 <#else>
908 <button class="link link-tripplanner link-tripplanner-1 link-tripplanner-top-right margin-top-em-2 margin-right-em-1" data-detail-type="${offerResult.getType()}" data-id="${offerResult.getId()}" data-tom="true" aria-label="<@liferay.language key="label.aggiungi.elimina.viaggio"/>">
909 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
910 </button>
911 </#if>
912 <div class="card-header-info">
913 <div class="card-badges">
914 <div class="badge badge-light-blue">
915 <#if offerResult.getType() == 'guide'>
916 <@liferay.language key="label.guide" />
917 </#if>
918 <#if offerResult.getType() == 'travelagency'>
919 <@liferay.language key="label.pacchetti.turistici" />
920 </#if>
921 <#if offerResult.getType() == 'consortium'>
922 <@liferay.language key="label.pacchetti.turistici" />
923 </#if>
924 <#if offerResult.getType() == 'accommodation'>
925 <@liferay.language key="label.accommodation" />
926 </#if>
927 <#if offerResult.getType() == 'service'>
928 <@liferay.language key="label.esperienze.in.azienda" />
929 </#if>
930 <#if offerResult.getType() == 'educationalfarm'>
931 <@liferay.language key="label.percorsi.didattici" />
932 </#if>
933 </div>
934 </div>
935 <div class="header-title title-5">${offerResult.getTitle()}</div>
936 </div>
937 </div>
938 <#if offerResult?has_content>
939 <div class="card-body">
940 <div class="card-body-title title-4">
941 ${offerResult.getTitle()}
942 </div>
943 <#if offerResult.getSubtitle()?has_content>
944 <div class="card-body-subtitle">
945 ${offerResult.getSubtitle()}
946 </div>
947 </#if>
948 </div>
949 </#if>
950 <div class="card-info card-info-readmore">
951 <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div>
952 </div>
953 <div class="card-info">
954 <span class="info">
955 <!--<a href="#" class="text-light-blue text-bold">
956 <i class="fas fa-map-pin"></i>
957 </a>-->
958 </span>
959 </div>
960 <div class="card-info card-info-commercial">
961 <#if offerResult.getDuration()?has_content && offerResult.getDuration().getCount()?has_content && offerResult.getDuration().getType()?has_content>
962 <div class="info info-commercial">
963 <div class="label"><@liferay.language key="label.durata" /></div>
964 <div class="title text-bold">
965 ${offerResult.getDuration().getCount()} ${offerResult.getDuration().getType()}
966 </div>
967 </div>
968 <#else>
969 <div class="info info-commercial">
970 <div class="label"> </div>
971 <div class="title text-bold">
972
973 </div>
974 </div>
975 </#if>
976 <div class="info info-commercial">
977 <#if offerResult.getMinimumPrice()?has_content && offerResult.getMinimumPrice()!=0>
978 <div class="label">
979 <@liferay.language key="label.a.partire.da" />
980 </div>
981 <div class="title text-bold">
982 <@liferay.language key="label.euro" /> ${offerResult.getMinimumPrice()}
983 </div>
984 <#else>
985 <div class="label">
986 <@liferay.language key="label.prezzo.su.richiesta" />
987 </div>
988 <div class="title text-bold">
989
990 </div>
991 </#if>
992 </div>
993 </div>
994 </div>
995 </div>
996
997 </#list>
998 </div>
999 </div>
1000 </div>
1001 </div>
1002 </div>
1003 </div>
1004 </div>
1005 </div>
1006 </aside>
1007 </#if>
1008 </#if>
1009 </#if>
1010
1011 </#if>
1012
1013 <#if results?size gt 0 || relatedResults?size gt 0>
1014 <aside class="container-fluid bg-gray">
1015 <div class="row">
1016 <div class="container padding-top-em-3 padding-bottom-em-5">
1017 <div class="row">
1018 <div class="col-12 col-md-10 offset-md-1 margin-bottom-em-2 margin-bottom-lg-em-0">
1019 <div class="text-block text-block-center">
1020 <div class="title-2">
1021 <@liferay.language key="label.potrebbe.interessarti.anche"/>
1022 </div>
1023 <div class="text">
1024 <@liferay.language key="label.scopri.proposte.uniche"/>
1025 </div>
1026 </div>
1027 </div>
1028
1029 <div class="col-12">
1030 <div class="row">
1031 <div class="col-12 padding-bottom-em-3">
1032 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
1033 <div class="tns-carousel tns-carousel-default">
1034
1035 <#-- GESTIONE RALATED ASSETS RENDERIZZAZIONE-->
1036 <#list relatedResults as relatedResult>
1037 <div>
1038 <div class="card card-1 card-offerta">
1039
1040 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
1041 <a class="card-link" href="${relatedResult.getHref()}" aria-label="${relatedResult.getTitle()}"></a>
1042
1043 <div class="card-header">
1044 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
1045 <#assign alternativeAlt = relatedResult.getImg().getAlt()>
1046 <#if !relatedResult.getImg().getAlt()?trim?has_content>
1047 <#assign alternativeAlt = "Titolo: " + relatedResult.getTitle()>
1048 </#if>
1049 <img src="${relatedResult.getImg().getSrc()}" alt="${alternativeAlt}">
1050 </div>
1051 <button class="link link-tripplanner link-tripplanner-1 link-tripplanner-top-right margin-top-em-2 margin-right-em-1" data-id="${relatedResult.getId()}" data-tom="false" aria-label="<@liferay.language key="label.aggiungi.elimina.viaggio"/>">
1052 <i class="far fa-heart text-red"></i>
1053 <i class="fas fa-heart text-red" style="display:none"></i>
1054 </button>
1055 <div class="card-header-info">
1056 <div class="card-badges">
1057 <#assign categoryNames = relatedResult.getHeader().getInfo() >
1058 <#list categoryNames as categoryName>
1059 <div class="badge badge-red">
1060 ${categoryName}
1061 </div>
1062 <a class="header-title title-5" href="#">${relatedResult.getTitle()}</a>
1063 </#list>
1064 </div>
1065 </div>
1066 </div>
1067 <div class="card-body">
1068 <a class="card-body-title title-4" href="${relatedResult.getHref()}">
1069 ${relatedResult.getTitle()}
1070 </a>
1071 <div class="card-body-subtitle">
1072 <#if relatedResult.getSubtitle()?? && relatedResult.getSubtitle()?has_content && relatedResult.getSubtitle()?trim?length gt 0 && relatedResult.getSubtitle()?trim != "null">
1073 ${relatedResult.getSubtitle()}
1074 </#if>
1075 </div>
1076
1077 </div>
1078 <div class="card-info">
1079 <span class="info"></span>
1080 </div>
1081 </div>
1082 </div>
1083 </#list>
1084 <#-- GESTIONE RALATED ASSETS FINE RENDERIZZAZIONE-->
1085
1086 <#list results as related>
1087 <#assign langId = themeDisplay.getLanguageId() />
1088 <#assign contentByLocale = related.getContentByLocale(themeDisplay.getLanguageId()) />
1089 <#assign contentGroupId = related.getGroupId() />
1090 <#assign document = saxReaderUtil.read(contentByLocale) >
1091 <#assign rootElement = document.getRootElement()>
1092
1093 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
1094 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
1095
1096 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
1097 <#assign relatedSottotitolo = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()>
1098
1099 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
1100 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
1101
1102 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
1103 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
1104
1105 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
1106
1107 <#attempt>
1108 <#assign immagineBannerJson = relatedImmagineBanner?eval >
1109 <#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
1110 <#recover>
1111 <#assign url = "" >
1112 </#attempt>
1113
1114 <#else>
1115 <#assign url = "" >
1116 </#if>
1117
1118 <#assign resourcePrimKey = related.getResourcePrimKey() />
1119 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
1120 <#assign assetEntryId = assetEntry.getEntryId() />
1121
1122 <#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) >
1123
1124 <#assign categoryNames = [] >
1125
1126 <#list categories as category>
1127 <#if vocabularyIdUmbria == category.getVocabularyId() >
1128 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
1129 </#if>
1130 </#list>
1131
1132 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
1133
1134 <div>
1135 <div class="card card-1 card-offerta">
1136 <a class="card-link" href="${detailBaseUrl}/-/${related.getUrlTitle(locale)}" aria-label="${related.getTitle()}"></a>
1137 <div class="card-header">
1138
1139 <div class="hidden" id="tagmanager_item_card_potrebbe_interessarti">
1140 <span id="tagmanager_item_id_potrebbe_interessarti">${related.getId()}</span>
1141 <span id="tagmanager_item_category_card_potrebbe_interessarti">${titleCategory}</span>
1142 <span id="tagmanager_item_name_potrebbe_interessarti">${related.getTitle()}</span>
1143 <span id="tagmanager_item_list_name_potrebbe_interessarti">Potrebbe interessarti</span>
1144 <span id="tagmanager_item_list_id_potrebbe_interessarti"></span>
1145 <span id="tagmanager_item_brand_potrebbe_interessarti">${titleCategory}</span>
1146 <span id="tagmanager_index_potrebbe_interessarti">${related_index}</span>
1147 </div>
1148
1149 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
1150 <#if !relatedTestoAlternativoImmagineBanner?? || !relatedTestoAlternativoImmagineBanner?trim?has_content>
1151 <#assign relatedTestoAlternativoImmagineBanner = "Titolo: " + related.getTitle()>
1152 </#if>
1153 <img src="${url}" alt="${relatedTestoAlternativoImmagineBanner}">
1154 </div>
1155 <button class="link link-tripplanner link-tripplanner-1 link-tripplanner-top-right margin-top-em-2 margin-right-em-1" data-id="${related.getArticleId()}" data-tom="false" aria-label="<@liferay.language key="label.aggiungi.elimina.viaggio"/>">
1156 <i class="far fa-heart text-red"></i>
1157 <i class="fas fa-heart text-red" style="display:none"></i>
1158 </button>
1159 <div class="card-header-info">
1160 <div class="card-badges">
1161 <#list categoryNames as categoryName>
1162 <div class="badge badge-red">
1163 ${categoryName}
1164 </div>
1165 <a class="header-title title-5" href="#">${related.getTitle()}</a>
1166 </#list>
1167 </div>
1168 </div>
1169 </div>
1170 <div class="card-body">
1171 <a class="card-body-title title-4" href="/-/${related.getUrlTitle(locale)}">
1172 ${relatedTitolo}
1173 </a>
1174 <div class="card-body-subtitle">
1175 ${relatedSottotitolo}
1176 </div>
1177 </div>
1178 <div class="card-info">
1179 <span class="info"></span>
1180 </div>
1181 </div>
1182 </div>
1183 <#assign categoryNames = [] >
1184 <#assign categories = [] >
1185 </#list>
1186 </div>
1187 </div>
1188 </div>
1189 </div>
1190 </div>
1191 </div>
1192 </div>
1193 </div>
1194 </aside>
1195 </#if>
1196
1197 <script>
1198 $("#backLink").click(function(event) {
1199 event.preventDefault();
1200 history.back(1);
1201 });
1202 </script>
1203
1204
1205 <script id="map-popup-1-template" type="text/x-handlebars-template">
1206 <div class="map-popup map-popup-1 map-popup-detail">
1207 <div class="row">
1208 <div class="col-12 col-lg-3">
1209 <div class="img">
1210 <div class="img-wrapper"><img src="{{img.src}}" alt="{{img.alt}}"/></div>
1211 </div>
1212 </div>
1213 <div class="col-12 col-lg-9">
1214 <div class="row">
1215 <div class="col-12">
1216 <div class="title">{{title}}</div>
1217 <div class="subtitle">{{subtitle}}</div>
1218 </div>
1219 </div>
1220 <div class="row">
1221 <div class="col-12 col-lg-6">
1222 <div class="title">Orari</div>
1223 <div class="info">
1224 <ul>{{#each openings}}
1225 <li>
1226 <div class="row">
1227 <div class="col-3">{{@key}}</div>
1228 <div class="col-9">
1229 <ul>{{#each this}}
1230 <li>{{this}}</li>{{/each}}
1231 </ul>
1232 </div>
1233 </div>
1234 </li>{{/each}}
1235 </ul>
1236 </div>
1237 </div>
1238 <div class="col-12 col-lg-6">
1239 <div class="title">Contatti</div>
1240 <div class="info">
1241 <ul>{{#each info}}
1242 <li><a href="{{../href}}">{{this}}</a></li>{{/each}}
1243 </ul>
1244 </div>
1245 </div>
1246 </div>
1247 </div>
1248 </div>
1249 </div>
1250 </script>
1251 <script id="map-popup-2-template" type="text/x-handlebars-template">
1252 <div class="map-popup map-popup-1" style="width:301px">
1253 <a class="card card-5" href="#" aria-label="{{title}}">
1254 {{#if image}}
1255 <div class="card-header">
1256 <div class="card-image"><img src="{{image}}" alt="{{alt}}"/></div>
1257 </div>
1258 {{/if}}
1259 <div class="card-body{{#unless image}} card-body-no-image{{/unless}}">
1260 <div class="card-info">{{type}}</div>
1261 <div class="card-title" id="button-popup" data-href="{{href}}">{{title}}</div>
1262 <div class="card-text">{{text}}</div>
1263 </div>
1264 </a>
1265 </div>
1266 </script>
1267 <script id="map-popup-3-template" type="text/x-handlebars-template">
1268 <div class="map-popup map-popup-1" style="width:301px">
1269 <a class="card card-5" href="#" aria-label="{{title}}">
1270 {{#if image}}
1271 <div class="card-header">
1272 <div class="card-image"><img src="{{image}}" alt="{{alt}}"/></div>
1273 </div>
1274 {{/if}}
1275 <div class="card-body{{#unless image}} card-body-no-image{{/unless}}">
1276 <div class="card-info">{{type}}</div>
1277 <div class="card-title">{{title}}</div>
1278 <div class="card-text">{{text}}</div>
1279 </div>
1280 <div class="card-footer">
1281 <div class="card-info">
1282 </div>
1283 </div>
1284 </a>
1285 </div>
1286 </script>
1287
1288
1289 <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5c5d3c404544fcaf"></script>
1290
1291 <style>
1292 .card-body-no-image {
1293 padding-top: 15px;
1294 }
1295 </style>