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