Ciclovia del Fiume Nera - Ciclovia del Fiume Nera
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing: ==> contentGroupId [in template "20099#20135#33911" at line 804, column 58] ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if contentGroupId = groupId [in template "20099#20135#33911" at line 804, column 53] ----
1<#--ITINERARIO 27062022-->
2<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")>
3<#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()>
4<#assign itinerarioStructureId = structureService.getStructureItinerarioId()>
5<#assign elasticService = serviceLocator.findService("it.inera.elastic.service.ElasticService")>
6<#assign journalArticleId = .vars['reserved-article-id'].data/>
7
8<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
9<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
10<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
11
12<#-- GESTIONE RALATED ASSETS IMPORTS-->
13<#assign journalArticleConverter = serviceLocator.findService("it.inera.journalarticleconverter.service.JournalArticleConverter")>
14<#assign searchService = serviceLocator.findService("it.inera.structure.search.service.SearchService")>
15<#-- FINE GESTIONE RALATED ASSETS IMPORTS-->
16
17<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") >
18
19<#if coordinate_principali.getData()?has_content && coordinate_principali.getData()?trim?length gt 0 >
20 <#assign coordinatePrincipaliJson = coordinate_principali.getData()?eval >
21 <#if coordinatePrincipaliJson.latitude?has_content && coordinatePrincipaliJson.latitude?trim?length gt 0 >
22 <#assign latitude = coordinatePrincipaliJson.latitude?c >
23 </#if>
24 <#if coordinatePrincipaliJson.longitude?has_content && coordinatePrincipaliJson.longitude?trim?length gt 0 >
25 <#assign longitude = coordinatePrincipaliJson.longitude?c >
26 </#if>
27<#else>
28 <#assign latitude = "" >
29 <#assign longitude = "" >
30</#if>
31
32<#assign currentArticle = journalArticleLocalService.getArticle(groupId, journalArticleId) />
33
34<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
35<#assign currentObject = journalArticleConverter.getItinerario(currentArticle, themeDisplay.getLocale())>
36<#assign relatedAssets = currentObject.getDirectRelatedAssets()>
37<#assign relatedResults = []>
38<#if relatedAssets?? && relatedAssets?has_content>
39 <#assign relatedResult = searchService.getResponse(relatedAssets, themeDisplay.getLocale(), null, themeDisplay)>
40 <#if relatedResult?? && relatedResult?has_content>
41 <#assign relatedResults = relatedResult.getData()>
42 </#if>
43</#if>
44<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
45
46<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
47<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
48<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
49
50<#assign categoryList = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) >
51
52<#assign vocabularyIdTerritori = structureService.getVocabularyIdByVocabularyName("Territori") >
53<#assign categoryListIds = [] >
54<#assign municipalityNames = [] >
55<#assign municipalityNamesString = "" >
56<#assign isTerritorio = false >
57<#assign territoryNameString = "" >
58
59<#assign hasTappe = false >
60<#if tappa.getData()?has_content>
61 <#list tappa.getSiblings() as cur_tappa>
62 <#if cur_tappa.titolo_tappa.getData()?has_content>
63 <#assign hasTappe = true >
64 </#if>
65 </#list>
66</#if>
67
68<#list categoryList as category>
69 <#if vocabularyIdUmbria == category.getVocabularyId() >
70 <#assign categoryListIds = categoryListIds + [category.getCategoryId()]>
71 </#if>
72</#list>
73
74
75<#list categoryList as category>
76 <#if vocabularyIdTerritori == category.getVocabularyId() >
77 <#assign municipalityName = category.getTitle(themeDisplay.getLanguageId()) >
78
79 <#assign childCategories = assetCategoryLocalService.getChildCategories(category.getCategoryId()) >
80 <#if childCategories?has_content>
81 <#assign territoryNameString = category.getTitle(themeDisplay.getLanguageId())>
82 <#list childCategories as curChildCategory>
83 <#assign isTerritorio = true >
84 <#assign municipalityNameC = curChildCategory.getTitle(themeDisplay.getLanguageId()) >
85 <#if curChildCategory?counter != 1 || municipalityNamesString?has_content>
86 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityNameC>
87 <#else>
88 <#assign municipalityNamesString = municipalityNamesString + municipalityNameC>
89 </#if>
90 <#assign municipalityNames = municipalityNames + [municipalityNameC]>
91 </#list>
92 <#else>
93 <#assign municipalityNames = municipalityNames + [municipalityName]>
94 <#if municipalityNamesString?has_content>
95 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityName>
96 <#else>
97 <#assign municipalityNamesString = municipalityNamesString + municipalityName>
98 </#if>
99 </#if>
100 </#if>
101</#list>
102
103<#assign isgu = structureService.isGroupUmbria(themeDisplay)>
104<#assign sitiESottositiCategories = "">
105<#if !isgu>
106 <#assign sitiESottositiCategories = structureService.getSiteCategoryIdsByVocabularyName(themeDisplay, "Siti-e-sottositi")>
107</#if>
108<#if validator.isNotNull(sitiESottositiCategories)>
109 <#list sitiESottositiCategories as cat>
110 <#assign categoryListIds = categoryListIds + [cat]>
111 </#list>
112</#if>
113
114<#assign results = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, "100", itinerarioStructureKey, itinerarioStructureId?c, locale, "6", null , categoryListIds, journalArticleId, null, null, null) />
115
116<#-- per categoria -->
117
118<#assign categoryArray=[]>
119<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
120<#assign vocabularyName = "Vocabolario Umbria"/>
121<#assign specificVocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompany().getGroupId(), vocabularyName)/>
122<#if validator.isNotNull(specificVocabulary)>
123 <#assign cats = specificVocabulary.getCategories()/>
124</#if>
125
126<#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) />
127<#if validator.isNotNull(cats)>
128 <#list cats as cat>
129 <#list categories as cate>
130 <#if cat == cate>
131 <#assign categoryArray = categoryArray + [cat]>
132 </#if>
133 </#list>
134 </#list>
135</#if>
136
137<#--<#if categoryArray?? && categoryArray?has_content>
138 <#assign firstCategory = categoryArray[0] />
139 <#assign titleCategory = firstCategory.getTitle(themeDisplay.getLocale())>
140</#if>-->
141
142<#-- per categoria FINE -->
143
144<#assign widthBannerImg = propsUtil.get("image.scale.fullpage") />
145<#assign widthSliderTappaImg = propsUtil.get("image.slider.testobarra.height") />
146<#assign widthSliderImg = propsUtil.get("image.slider.testobarra.height") />
147<#assign widthCardImg = propsUtil.get("image.scale.allpage") />
148<#assign tomBaseImagePath = propsUtil.get("tom.base.image.url") />
149
150
151<div class="container-fluid">
152 <div class="row">
153 <div class="header-block header-block-1 header-block-image-main header-block-tagged">
154
155 <#assign linkImmagineB = "">
156 <#if immagine_banner.getData()?contains("?")>
157 <#assign linkImmagineB = immagine_banner.getData() + "&width=" + widthBannerImg >
158 <#else>
159 <#assign linkImmagineB = immagine_banner.getData() + "?width=" + widthBannerImg >
160 </#if>
161
162 <img class="bg" src="${linkImmagineB}" alt="${testo_alternativo_immagine_banner.getData()}">
163 <div class="container title title-main">
164 <div class="row">
165 <div class="col-12">
166 <#list categoryList as category>
167 <#if vocabularyIdUmbria == category.getVocabularyId() >
168 <#assign titleCategory = category.getTitle(themeDisplay.getLocale())>
169 <#if titleCategory?? && titleCategory?has_content>
170 <div class="badge badge-light badge-uppercase">
171 ${titleCategory}
172 </div>
173 </#if>
174 </#if>
175 </#list>
176 <h1 class="title-1 text-weight-300 margin-top-em-0 margin-bottom-em-0">
177 ${titolo.getData()}
178 </h1>
179 </div>
180 </div>
181 </div>
182 </div>
183 </div>
184</div>
185<#assign categoryArray=[]>
186
187
188<#assign count = 0 />
189<#if dati_tecnici_chiave?? && dati_tecnici_chiave?has_content >
190 <#list dati_tecnici_chiave.getSiblings() as cur_dati_tecnici_chiave>
191 <#if cur_dati_tecnici_chiave.dati_tecnici_valore?? && cur_dati_tecnici_chiave.dati_tecnici_valore.getData()?has_content >
192 <#assign count = count + 1 />
193 </#if>
194 </#list>
195</#if>
196
197<#if count gt 0 >
198 <#assign dividendo = 12/count />
199</#if>
200
201<div class="container-fluid bg-white">
202 <#if count gt 0 && count lt 4>
203 <div class="row flex-column-reverse flex-lg">
204 <div class="container bridge bridge-top">
205 <div class="row">
206 <div class="col-12">
207 <div class="card-bar card-bar-1 card-bar-dark">
208 <div class="card-row">
209 <#list dati_tecnici_chiave.getSiblings() as cur_dati_tecnici_chiave>
210 <div class="col-${dividendo}">
211 <div class="card card-horizontal card-3">
212 <div class="card-row">
213 <div class="card-icon card-item-first">
214 <i class="fas ${cur_dati_tecnici_chiave.dati_tecnici_icona.getData()}"></i>
215 </div>
216 <div class="card-body">
217 <div class="row">
218 <div class="col-12">
219 <div class="card-subtitle title-6">
220 ${cur_dati_tecnici_chiave.getData()}
221 </div>
222 </div>
223 <div class="col-12">
224 <div class="card-title">
225 ${cur_dati_tecnici_chiave.dati_tecnici_valore.getData()}
226 </div>
227 </div>
228 </div>
229 </div>
230 </div>
231 </div>
232 </div>
233 </#list>
234 </div>
235 </div>
236 </div>
237 </div>
238 </div>
239 </div>
240 </#if>
241
242 <div class="row">
243 <article class="container padding-bottom-em-3">
244 <div class="row">
245
246 <div class="col-12">
247 <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>
248 <div class="text-center padding-top-em-2">
249 <div class="link-1 link-toggle-map"></div>
250 </div>
251 <div class="link-tripplanner-container">
252 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
253 <a data-id="${journalArticleId}" class="link link-tripplanner link-tripplanner-extended link-tripplanner-top-right margin-right-em-1 padding-right-rem-1" href="${currentUrl}" data-tom="false">
254 <i class="far fa-heart text-red"></i>
255 <i class="fas fa-heart text-red" style="display:none"></i>
256 <span class="label hidden display-inline-lg"><@liferay.language key="label.aggiungi.al.mio.viaggio" /></span>
257 </a>
258 </div>
259 </div>
260
261
262 <div class="col-12 col-md-8">
263 <div class="text-block text-block-left">
264 <div class="title-4 padding-bottom-em-1 mt-5 e mt-lg-0">
265 ${sottotitolo.getData()}
266 </div>
267 <div class="text">
268 ${descrizione.getData()}
269 </div>
270 <#if hasTappe?c = "false">
271 <br>
272 <#if validator.isNotNull(descrizione_due.getData()) && descrizione_due.getData() != '<p>null</p>'>
273 <div class="text">
274 ${descrizione_due.getData()}
275 </div>
276 </#if>
277 </#if>
278 </div>
279 </div>
280
281
282 <#assign fileKml = "" />
283 <#assign checkFileKml = false />
284 <#assign urlFileKml = "" />
285
286 <#assign fileGps = "" />
287 <#assign checkFileGps = false />
288 <#assign urlFileGps = "" />
289
290 <#assign countFile = 0 />
291 <#if file_tecnici?? && file_tecnici?has_content>
292 <#list file_tecnici.getSiblings() as cur_file_tecnici>
293 <#if cur_file_tecnici.file.getData()?? && cur_file_tecnici.file.getData()?has_content >
294
295 <#assign counter = 0 >
296
297 <#list cur_file_tecnici.file.getData()?split("/") as x>
298 <#if counter == 2>
299 <#assign groupIdd = x?number >
300 </#if>
301 <#if counter == 5>
302 <#assign uuId = x >
303 <#if uuId?contains("?t=") >
304 <#assign uuid = uuId?keep_before("?t=") />
305 </#if>
306 </#if>
307 <#assign counter = counter + 1 >
308 </#list>
309
310 <#assign fileEntry = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
311 <#assign file=fileEntry.getFileEntryByUuidAndGroupId(uuid,groupIdd) >
312
313 <#if file.getExtension() == "kml" >
314 <#assign fileKml = file />
315 <#assign checkFileKml = true />
316 <#assign countFile = countFile - 1 />
317 <#assign urlFileKml = "/documents/"+ fileKml.getGroupId() +"/" +fileKml.getClassPK() +"/"+ fileKml.getTitle() +"/"+fileKml.getUuid() >
318 </#if>
319
320 <#if file.getExtension() == "gpx" >
321 <#assign fileGps = file />
322 <#assign checkFileGps = true />
323 <#assign urlFileGps = "/documents/"+ fileGps.getGroupId() +"/" +fileGps.getClassPK() +"/"+ fileGps.getTitle() +"/"+fileGps.getUuid() >
324 </#if>
325
326 <#assign countFile = countFile + 1 />
327 </#if>
328 </#list>
329 </#if>
330
331 <#if countFile gt 0>
332 <aside class="col-12 col-md-4 margin-top-em-3 margin-top-md-em-0">
333 <div class="text-block text-block-1">
334 <div class="link-sidebar link-sidebar-1">
335 <div class="title">
336 <@liferay.language key="label.download"/>
337 </div>
338 <ul class="link-list">
339 <#list file_tecnici.getSiblings() as cur_file_tecnici>
340 <#if !cur_file_tecnici.getData()?contains("kml")>
341 <li class="link-container">
342 <a class="link" href="${cur_file_tecnici.file.getData()}">
343 <i class="fas fa-angle-right"></i>
344 <span class="label">
345 ${cur_file_tecnici.getData()}
346 </span>
347 </a>
348 </li>
349 </#if>
350 </#list>
351 </ul>
352 </div>
353 </div>
354 </aside>
355 </#if>
356 </div>
357 </article>
358 </div>
359</div>
360
361<#-- <#if tappa.getData()?has_content> -->
362 <div class="container-fluid">
363 <div class="row">
364 <div class="map map-container map-banner">
365 <div class="map-content">
366 <div class="leaflet-interactive-map map-summary-itinerary" id="map-itinerary" data-kml="${urlFileKml}" data-gpx="${urlFileGps}"></div>
367 </div>
368 </div>
369 </div>
370 </div>
371 <#if (coordinate_principali.getData() != "")>
372 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(coordinate_principali.getData())>
373 <#assign latitudine = geolocationJSONObject.getDouble("latitude")>
374 <#assign longitudine = geolocationJSONObject.getDouble("longitude")>
375 <div class="itinerary-stage" id="" data-lat="${latitudine}" data-lng="${longitudine}" data-info="${titolo.getData()}" style="display:none;">
376 </div>
377 </#if>
378 <#-- <#else>
379 <#assign latitude = 0>
380 <#assign longitude = 0>
381 <#if (coordinate_principali.getData() != "")>
382 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(coordinate_principali.getData())>
383 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
384 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
385 </#if>
386
387 <div class="container-fluid">
388 <div class="row">
389 <div class="map map-container map-banner">
390 <div class="map-content">
391 <div class="leaflet-interactive-map map-summary-results" id="map-header" data-results="${themeDisplay.getPortalURL()}/o/geolocation/get-positions?articleId=${journalArticleId}&languageId=${themeDisplay.getLanguageId()}" data-config="{"clustering":true}"></div>
392 </div>
393 </div>
394 </div>
395 </div>
396</#if> -->
397
398<#if tappa.getData()?has_content>
399 <div class="container-fluid bg-white">
400 <div class="row padding-top-em-5">
401 <div class="container">
402 <div class="row">
403 <div class="col-12 col-md-10 col-lg-8">
404 <#list tappa.getSiblings() as cur_tappa>
405 <#assign latitude = 0>
406 <#assign longitude = 0>
407
408 <#--CICLO COORDINATE TAPPA-->
409 <#assign coords = []>
410 <#assign coordsObj = "">
411 <#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)>
412 <#list cur_tappa.comune.getSiblings() as comune_tappa>
413
414 <#if comune_tappa?has_content && comune_tappa.geolocalizzazione?has_content && comune_tappa.geolocalizzazione.getData()?has_content>
415
416 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(comune_tappa.geolocalizzazione.getData())>
417 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
418 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
419
420 <#assign info = "">
421 <#if (comune_tappa.via_piazza?has_content && comune_tappa.via_piazza.getData() != "")>
422 <#assign info = info + comune_tappa.via_piazza.getData()>
423 </#if>
424
425 <#if (comune_tappa.localita?has_content && comune_tappa.localita.getData() != "")>
426 <#assign info = info + " " + comune_tappa.localita.getData()>
427 </#if>
428
429 <#if (comune_tappa.cap?has_content && comune_tappa.cap.getData() != "")>
430 <#assign info = info + " " + comune_tappa.cap.getData()>
431 </#if>
432
433 <#if (comune_tappa.getData() != "")>
434 <#assign info = info + " " + comune_tappa.getData()>
435 </#if>
436
437 <#assign info = info?replace("\"",""")>
438 <#assign info = info?replace("'","'")>
439
440 <#assign coord = {"lat" : latitude, "lng" : longitude, "info": info}>
441 <#assign coords = coords + [coord]>
442
443 </#if>
444
445 </#list>
446 <#assign coordsObj = jsonFactoryUtil.looseSerializeDeep(coords)>
447 </#if>
448 <#--FINE CICLO COORDINATE TAPPA-->
449
450 <#if (cur_tappa?has_content &&
451 cur_tappa.comune?has_content &&
452 cur_tappa.comune.geolocalizzazione?has_content &&
453 cur_tappa.comune.geolocalizzazione.getData() != "")>
454 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(cur_tappa.comune.geolocalizzazione.getData())>
455 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
456 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
457 </#if>
458
459 <#assign info = "">
460
461 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.via_piazza?has_content &&
462 cur_tappa.comune.via_piazza.getData() != "")>
463 <#assign info = info + cur_tappa.comune.via_piazza.getData()>
464 </#if>
465
466 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.localita?has_content &&
467 cur_tappa.comune.localita.getData() != "")>
468 <#assign info = info + " " + cur_tappa.comune.localita.getData()>
469 </#if>
470
471 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.cap?has_content &&
472 cur_tappa.comune.cap.getData() != "")>
473 <#assign info = info + " " + cur_tappa.comune.cap.getData()>
474 </#if>
475
476 <#if (cur_tappa?has_content && cur_tappa.comune?has_content && cur_tappa.comune.getData() != "")>
477 <#assign info = info + " " + cur_tappa.comune.getData()>
478 </#if>
479
480 <div class="itinerary-stage" id="${cur_tappa.titolo_tappa.getData()?replace("’","-")?replace(" ", "-")?replace("(", "")?replace(")", "")}" data-lat="${latitude}" data-lng="${longitude}" data-info="${info}" data-coords='${coordsObj}'>
481 <div class="row">
482 <div class="col-2">
483 <div class="itinerary-sidebar">
484 <div class="marker">
485 <img src="/o/umbria-theme/images/icons/leaflet/marker-icon.svg" alt="Marker">
486 <div class="marker-label text-red">${cur_tappa.getData()}</div>
487 </div>
488 <div class="track"></div>
489 </div>
490 </div>
491 <div class="col-10">
492 <div class="itinerary-body padding-bottom-em-5">
493 <div class="title">${cur_tappa.titolo_tappa.getData()}</div>
494 <#if cur_tappa.titolo_immagine_tappa.getData()?has_content>
495 <div class="image-container" style="margin-bottom:3rem;">
496 <div class="carousel-container transparent">
497 <div class="tns-carousel tns-carousel-default" data-tns-config="{"items":1,"autoplay":true,"autoplayHoverPause":true,"autoplayButtonOutput":false,"speed":1000}">
498 <#list cur_tappa.titolo_immagine_tappa.getSiblings() as titolo_immagine_tappa>
499 <div>
500 <#assign linkImmagine = "">
501 <#if titolo_immagine_tappa.immagine_tappa.getData()?contains("?")>
502 <#assign linkImmagine = titolo_immagine_tappa.immagine_tappa.getData() + "&width=" + widthSliderTappaImg >
503 <#else>
504 <#assign linkImmagine = titolo_immagine_tappa.immagine_tappa.getData() + "?width=" + widthSliderTappaImg >
505 </#if>
506
507 <img class="slide-image" src="${linkImmagine}" alt="${titolo_immagine_tappa.testo_alternativo_tappa.getData()}">
508 <p class="caption" style="margin-bottom: 12px;">${titolo_immagine_tappa.didascalia_immagine_tappa.getData()}</p>
509 </div>
510 </#list>
511 </div>
512 </div>
513 </div>
514 </#if>
515 <#if cur_tappa.descrizione_tappa.getData()?has_content && cur_tappa.descrizione_tappa.getData()?trim != "null">
516 <div class="text-block-expandable">
517 <div class="text">
518 ${cur_tappa.descrizione_tappa.getData()}
519 </div>
520 </div>
521 <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>
522 </#if>
523 </div>
524 </div>
525 </div>
526 </div>
527 </#list>
528 </div>
529 </div>
530 </div>
531 </div>
532 </div>
533</#if>
534
535<#if hasTappe?c = "true">
536 <#if validator.isNotNull(descrizione_due.getData()) && descrizione_due.getData() != '<p>null</p>'>
537 <div class="container-fluid bg-white">
538 <div class="row">
539 <article class="container padding-bottom-em-3">
540 <div class="row">
541 <div class="col-12 col-md-8">
542 <div class="text-block text-block-left">
543 <div class="text">
544 ${descrizione_due.getData()}
545 </div>
546 </div>
547 </div>
548 </div>
549 </article>
550 </div>
551 </div>
552 </#if>
553</#if>
554
555<#if descrizione_immagine?? && descrizione_immagine.getSiblings()?has_content>
556 <div class="container-fluid bg-white">
557 <div class="row">
558 <div class="carousel-container carousel-no-ctrl transparent margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
559 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,
560 "responsive":{"768":{"items":3},"992":{"items":4}}}">
561 <#if descrizione_immagine?? && descrizione_immagine.getSiblings()?has_content>
562 <#list descrizione_immagine.getSiblings() as cur_descrizione_immagine>
563 <div class="item-with-caption">
564
565 <#assign linkImmagine = "">
566 <#if cur_descrizione_immagine.immagine.getData()?contains("?")>
567 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "&width=" + widthSliderImg >
568 <#else>
569 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "?width=" + widthSliderImg >
570 </#if>
571
572 <img class="slide-image" src="${linkImmagine}" alt="${cur_descrizione_immagine.testo_alternativo.getData()}">
573 <#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">
574 <p class="caption">${cur_descrizione_immagine.didascalia.getData()}</p>
575 </#if>
576 </div>
577 </#list>
578 </#if>
579 </div>
580 </div>
581 </div>
582 </div>
583</#if>
584
585<#assign lang = "it"/>
586<#if themeDisplay.getLanguageId()?contains("_")>
587 <#assign lang = themeDisplay.getLanguageId()?split("_")[0]/>
588<#else>
589 <#assign lang = themeDisplay.getLanguageId()/>
590</#if>
591<#assign tomApi = serviceLocator.findService("it.inera.tom.api.TOMAPI")>
592
593<#if municipalityNames?has_content && municipalityNames?size gt 0 && lang?has_content && lang?trim?length gt 0 && tomApi?has_content>
594
595<#assign offerResults = [] />
596<#attempt>
597 <#assign offerResults = tomApi.getJsonOffersListResultByMunicipalities(municipalityNames, lang) />
598<#recover>
599
600</#attempt>
601
602
603<#if offerResults?? && offerResults?has_content>
604 <#assign offerResponse = offerResults.getResponse()>
605 <#if offerResponse?? && offerResponse?has_content>
606 <#assign offerResults = offerResponse.getResults()>
607 <#if offerResults?? && offerResults?has_content>
608 <aside class="container-fluid bg-white" id="hideable">
609 <div class="row">
610 <div class="container padding-top-em-3">
611 <div class="row">
612 <div class="col-12 col-md-10 offset-md-1 margin-bottom-lg-em-0 margin-bottom-em-2">
613 <div class="text-block text-block-center">
614 <div class="title-2">
615 <@liferay.language key="label.migliori.offerte" />
616 </div>
617 <div class="text">
618 <@liferay.language key="label.proposte.vivere.umbria" />
619 </div>
620 </div>
621 </div>
622 </div>
623
624 <div class="row">
625 <div class="col-12">
626 <div class="d-flex flex-justify-content-end">
627 <a class="link-showall" href="/offerte-luogo?municipality=${municipalityNamesString}&territory=${territoryNameString}"><@liferay.language key="label.vedi.tutte" />
628 <i class="fas fa-angle-right"></i>
629 </a>
630 </div>
631 </div>
632 <div class="col-12">
633 <div class="row">
634 <div class="col-12 padding-bottom-em-3">
635 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
636 <div class="tns-carousel tns-carousel-default">
637 <#list offerResults as offerResult>
638 <#if offerResult.getGalleries()?has_content && offerResult.getGalleries().getImages()?has_content
639 && offerResult.getGalleries().getImages()?size gt 0
640 && offerResult.getGalleries().getImages()[0].getFile()?has_content>
641 <div>
642 <div class="card card-1 card-offerta has-info-commercial">
643 <a class="card-link" href="/dettaglio-offerta/-/dettaglio/${offerResult.getSlug()}_${offerResult.getId()}_${offerResult.getType()}"></a>
644 <div class="card-header">
645 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
646 <#if offerResult.getGalleries()?has_content>
647 <#if offerResult.getGalleries().getImages()?has_content && offerResult.getGalleries().getImages()?size gt 0>
648 <#assign file = ""/>
649 <#assign alt = ""/>
650 <#if offerResult.getGalleries().getImages()[0].getFile()?has_content>
651 <#assign file = tomBaseImagePath + offerResult.getGalleries().getImages()[0].getFile()/>
652 <#else>
653 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
654 </#if>
655 <#if offerResult.getGalleries().getImages()[0].getAlt()?has_content>
656 <#assign alt = offerResult.getGalleries().getImages()[0].getAlt()/>
657 </#if>
658 <img src="${file}?params[width]=354" alt="${alt}">
659 </#if>
660 <#else>
661 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
662 <img src="${file}?params[width]=354" alt="logo_no_image">
663 </#if>
664 </div>
665
666 <#if offerResult.getType()?? && offerResult.getType()?has_content && offerResult.getType()?trim?length gt 0 && offerResult.getType()?trim != "accommodation">
667 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="#" data-detail-type="${offerResult.getType()}/offer" data-id="${offerResult.getId()}" data-tom="true">
668 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
669 </a>
670 <#else>
671 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="#" data-detail-type="${offerResult.getType()}" data-id="${offerResult.getId()}" data-tom="true">
672 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
673 </a>
674 </#if>
675 <div class="card-header-info">
676 <div class="card-badges">
677 <div class="badge badge-light-blue">
678 <#if offerResult.getType() == 'guide'>
679 <@liferay.language key="label.guide" />
680 </#if>
681 <#if offerResult.getType() == 'travelagency'>
682 <@liferay.language key="label.pacchetti.turistici" />
683 </#if>
684 <#if offerResult.getType() == 'consortium'>
685 <@liferay.language key="label.pacchetti.turistici" />
686 </#if>
687 <#if offerResult.getType() == 'accommodation'>
688 <@liferay.language key="label.accommodation" />
689 </#if>
690 </div>
691 </div>
692 <div class="header-title title-5">
693 </div>
694 </div>
695 </div>
696 <#if offerResult?has_content>
697 <div class="card-body">
698 <div class="card-body-title title-4">
699 ${offerResult.getTitle()}
700 </div>
701 <#if offerResult.getSubtitle()?has_content>
702 <div class="card-body-subtitle">
703 ${offerResult.getSubtitle()}
704 </div>
705 </#if>
706 </div>
707 </#if>
708 <div class="card-info card-info-readmore">
709 <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div>
710 </div>
711 <div class="card-info">
712 <span class="info">
713 <!--<a href="#" class="text-light-blue text-bold">
714 <i class="fas fa-map-pin"></i>
715 </a>-->
716 </span>
717 </div>
718 <div class="card-info card-info-commercial">
719 <#if offerResult.getDuration()?has_content && offerResult.getDuration().getCount()?has_content && offerResult.getDuration().getType()?has_content>
720 <div class="info info-commercial">
721 <div class="label"><@liferay.language key="label.durata" /></div>
722 <div class="title text-bold">
723 ${offerResult.getDuration().getCount()} ${offerResult.getDuration().getType()}
724 </div>
725 </div>
726 <#else>
727 <div class="info info-commercial">
728 <div class="label"> </div>
729 <div class="title text-bold">
730
731 </div>
732 </div>
733 </#if>
734 <div class="info info-commercial">
735 <#if offerResult.getMinimumPrice()?has_content && offerResult.getMinimumPrice()!=0>
736 <div class="label">
737 <@liferay.language key="label.a.partire.da" />
738 </div>
739 <div class="title text-bold">
740 <@liferay.language key="label.euro" /> ${offerResult.getMinimumPrice()}
741 </div>
742 <#else>
743 <div class="label">
744 <@liferay.language key="label.prezzo.su.richiesta" />
745 </div>
746 <div class="title text-bold">
747
748 </div>
749 </#if>
750 </div>
751 </div>
752 </div>
753 </div>
754 </#if>
755 </#list>
756 </div>
757 </div>
758 </div>
759 </div>
760 </div>
761 </div>
762 </div>
763 </div>
764 </aside>
765 </#if>
766 </#if>
767</#if>
768
769</#if>
770
771<#if results?size gt 0 || relatedResults?size gt 0>
772 <aside class="container-fluid bg-gray">
773 <div class="row">
774 <div class="container padding-top-em-3 padding-bottom-em-5">
775 <div class="row">
776 <div class="col-12 col-md-10 offset-md-1 margin-bottom-em-2 margin-bottom-lg-em-0">
777 <div class="text-block text-block-center">
778 <div class="title-2">
779 <@liferay.language key="label.potrebbe.interessarti.anche"/>
780 </div>
781 <div class="text">
782 <@liferay.language key="label.scopri.proposte.uniche"/>
783 </div>
784 </div>
785 </div>
786 <!--<div class="col-12">
787 <div class="d-flex flex-justify-content-end">
788 <a class="link-showall" href="#">
789 <@liferay.language key="label.scopri.tutte"/>
790 <i class="fas fa-angle-right"></i>
791 </a>
792 </div>
793 </div>-->
794 <div class="col-12">
795 <div class="row">
796 <div class="col-12 padding-bottom-em-3">
797 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
798 <div class="tns-carousel tns-carousel-default">
799
800 <#-- GESTIONE RALATED ASSETS RENDERIZZAZIONE-->
801 <#list relatedResults as relatedResult>
802 <div>
803 <div class="card card-1 card-offerta">
804 <#if contentGroupId = groupId>
805 <#assign detailBaseUrl = searchService.getDetailBaseUrl(themeDisplay, groupId)>
806 <a class="card-link" href="${detailBaseUrl}${relatedResult.getUrlTitle()}"></a>
807 <#else>
808 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
809 <a class="card-link" href="${detailBaseUrl}/search/-/search/itinerario/${relatedResult.getUrlTitle()}_${contentGroupId}"></a>
810 </#if>
811 <div class="card-header">
812 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
813 <img src="${relatedResult.getImg().getSrc()}" alt="${relatedResult.getImg().getAlt()}">
814 </div>
815 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="${relatedResult.getHref()}" data-id="${relatedResult.getId()}" data-tom="false">
816 <i class="far fa-heart text-red"></i>
817 <i class="fas fa-heart text-red" style="display:none"></i>
818 </a>
819 <div class="card-header-info">
820 <div class="card-badges">
821 <#assign categoryNames = relatedResult.getHeader().getInfo() >
822 <#list categoryNames as categoryName>
823 <div class="badge badge-red">
824 ${categoryName}
825 </div>
826 <a class="header-title title-5" href="#"></a>
827 </#list>
828 </div>
829 </div>
830 </div>
831 <div class="card-body">
832 <a class="card-body-title title-4" href="${relatedResult.getHref()}">
833 ${relatedResult.getTitle()}
834 </a>
835 <div class="card-body-subtitle">
836 <#if relatedResult.getSubtitle()?? && relatedResult.getSubtitle()?has_content && relatedResult.getSubtitle()?trim?length gt 0 && relatedResult.getSubtitle()?trim != "null">
837 ${relatedResult.getSubtitle()}
838 </#if>
839 </div>
840
841 </div>
842 <div class="card-info">
843 <span class="info"></span>
844 </div>
845 </div>
846 </div>
847 </#list>
848 <#-- GESTIONE RALATED ASSETS FINE RENDERIZZAZIONE-->
849
850 <#list results as related>
851 <#assign langId = themeDisplay.getLanguageId() />
852 <#assign contentByLocale = related.getContentByLocale(themeDisplay.getLanguageId()) />
853 <#assign contentGroupId = related.getGroupId() />
854 <#assign document = saxReaderUtil.read(contentByLocale) >
855 <#assign rootElement = document.getRootElement()>
856
857 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
858 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
859
860 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
861 <#assign relatedSottotitolo = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()>
862
863 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
864 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
865
866 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
867 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
868
869 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
870
871 <#attempt>
872 <#assign immagineBannerJson = relatedImmagineBanner?eval >
873 <#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
874 <#recover>
875 <#assign url = "" >
876 </#attempt>
877
878 <#else>
879 <#assign url = "" >
880 </#if>
881
882 <#assign resourcePrimKey = related.getResourcePrimKey() />
883 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
884 <#assign assetEntryId = assetEntry.getEntryId() />
885
886 <#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) >
887
888 <#assign categoryNames = [] >
889
890 <#list categories as category>
891 <#if vocabularyIdUmbria == category.getVocabularyId() >
892 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
893 </#if>
894 </#list>
895
896 <#assign detailBaseUrl = searchService.getDetailBaseUrl(themeDisplay, contentGroupId)>
897
898 <div>
899 <div class="card card-1 card-offerta">
900 <a class="card-link" href="${detailBaseUrl}${related.getUrlTitle()}"></a>
901 <div class="card-header">
902 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
903 <img src="${url}" alt="${relatedTestoAlternativoImmagineBanner}">
904 </div>
905 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="/-/${related.getUrlTitle()}" data-id="${related.getArticleId()}" data-tom="false">
906 <i class="far fa-heart text-red"></i>
907 <i class="fas fa-heart text-red" style="display:none"></i>
908 </a>
909 <div class="card-header-info">
910 <div class="card-badges">
911 <#list categoryNames as categoryName>
912 <div class="badge badge-red">
913 ${categoryName}
914 </div>
915 <a class="header-title title-5" href="#"></a>
916 </#list>
917 </div>
918 </div>
919 </div>
920 <div class="card-body">
921 <a class="card-body-title title-4" href="/-/${related.getUrlTitle()}">
922 ${relatedTitolo}
923 </a>
924 <div class="card-body-subtitle">
925 ${relatedSottotitolo}
926 </div>
927 </div>
928 <div class="card-info">
929 <span class="info"></span>
930 </div>
931 </div>
932 </div>
933 <#assign categoryNames = [] >
934 <#assign categories = [] >
935 </#list>
936 </div>
937 </div>
938 </div>
939 </div>
940 </div>
941 </div>
942 </div>
943 </div>
944 </aside>
945</#if>
946
947<script>
948$("#backLink").click(function(event) {
949 event.preventDefault();
950 history.back(1);
951});
952</script>
953<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5c5d3c404544fcaf"></script>