Pinacoteca comunale - Pinacoteca comunale
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> serviceLocator.findService("it.inera.structure.service.StructureService") [in template "20099#20135#33814" at line 2, column 29] ---- 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 structureService = serviceLoc... [in template "20099#20135#33814" at line 2, column 1] ----
1<#--ATTRATTORE 09022024-->
2<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")>
3<#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()>
4<#assign attrattoreStructureId = structureService.getStructureAttrattoreId()>
5<#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()>
6<#assign itinerarioStructureId = structureService.getStructureItinerarioId()>
7
8<#-- GESTIONE RALATED ASSETS IMPORTS-->
9<#assign journalArticleConverter = serviceLocator.findService("it.inera.journalarticleconverter.service.JournalArticleConverter")>
10<#assign searchService = serviceLocator.findService("it.inera.structure.search.service.SearchService")>
11<#-- FINE GESTIONE RALATED ASSETS IMPORTS-->
12
13<#assign elasticService = serviceLocator.findService("it.inera.elastic.service.ElasticService")>
14<#assign journalArticleId = .vars['reserved-article-id'].data/>
15
16<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
17<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
18<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
19
20<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") >
21<#assign vocabularyIdTerritori = structureService.getVocabularyIdByVocabularyName("Territori") >
22
23<#if coordinate_principali.getData()?has_content && coordinate_principali.getData()?trim?length gt 0 >
24 <#assign coordinatePrincipaliJson = coordinate_principali.getData()?eval >
25 <#if coordinatePrincipaliJson.latitude?has_content && coordinatePrincipaliJson.latitude?trim?length gt 0 >
26 <#assign latitude = coordinatePrincipaliJson.latitude?c >
27 </#if>
28 <#if coordinatePrincipaliJson.longitude?has_content && coordinatePrincipaliJson.longitude?trim?length gt 0 >
29 <#assign longitude = coordinatePrincipaliJson.longitude?c >
30 </#if>
31<#else>
32 <#assign latitude = "" >
33 <#assign longitude = "" >
34</#if>
35
36<#assign currentArticle = journalArticleLocalService.getArticle(groupId, journalArticleId) />
37
38<#-- GESTIONE ASSET LINGUA DI DEFAULT -->
39<#assign currentObjectDefaultLanguage = journalArticleConverter.getAttrattore(currentArticle, localeUtil.getDefault())>
40
41<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
42<#assign currentObject = journalArticleConverter.getItinerario(currentArticle, themeDisplay.getLocale())>
43<#assign relatedAssets = currentObject.getDirectRelatedAssets()>
44<#assign relatedResults = []>
45<#if relatedAssets?? && relatedAssets?has_content>
46 <#assign relatedResult = searchService.getResponse(relatedAssets, themeDisplay.getLocale(), null, themeDisplay)>
47 <#if relatedResult?? && relatedResult?has_content>
48 <#assign relatedResults = relatedResult.getData()>
49 </#if>
50</#if>
51<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
52
53<#assign titolo1 = "" />
54<#assign testo1 = "" />
55
56<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("titolo_fascia_1")?has_content>
57 <#assign titolo1_custom_field = currentArticle.getExpandoBridge().getAttribute("titolo_fascia_1") />
58 <#list titolo1_custom_field?keys as key>
59 <#if key == locale>
60 <#assign titolo1 = titolo1_custom_field?values[key_index] />
61 </#if>
62 </#list>
63</#if>
64
65<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("testo_fascia_1")?has_content>
66 <#assign testo1_custom_field = currentArticle.getExpandoBridge().getAttribute("testo_fascia_1") />
67 <#list testo1_custom_field?keys as key>
68 <#if key == locale>
69 <#assign testo1 = testo1_custom_field?values[key_index] />
70 </#if>
71 </#list>
72</#if>
73
74<#assign titolo2 = "" />
75<#assign testo2 = "" />
76
77<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("titolo_fascia_2")?has_content>
78 <#assign titolo2_custom_field = currentArticle.getExpandoBridge().getAttribute("titolo_fascia_2") />
79 <#list titolo2_custom_field?keys as key>
80 <#if key == locale>
81 <#assign titolo2 = titolo2_custom_field?values[key_index] />
82 </#if>
83 </#list>
84</#if>
85
86<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("testo_fascia_2")?has_content>
87 <#assign testo2_custom_field = currentArticle.getExpandoBridge().getAttribute("testo_fascia_2") />
88 <#list testo2_custom_field?keys as key>
89 <#if key == locale>
90 <#assign testo2 = testo2_custom_field?values[key_index] />
91 </#if>
92 </#list>
93</#if>
94
95<#assign titolo3 = "" />
96<#assign testo3 = "" />
97
98<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("titolo_fascia_3")?has_content>
99 <#assign titolo3_custom_field = currentArticle.getExpandoBridge().getAttribute("titolo_fascia_3") />
100 <#list titolo3_custom_field?keys as key>
101 <#if key == locale>
102 <#assign titolo3 = titolo3_custom_field?values[key_index] />
103 </#if>
104 </#list>
105</#if>
106
107<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("testo_fascia_3")?has_content>
108 <#assign testo3_custom_field = currentArticle.getExpandoBridge().getAttribute("testo_fascia_3") />
109 <#list testo3_custom_field?keys as key>
110 <#if key == locale>
111 <#assign testo3 = testo3_custom_field?values[key_index] />
112 </#if>
113 </#list>
114</#if>
115
116<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
117<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
118<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
119
120<#assign categoryList = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) >
121
122<#assign categoryListIds = [] >
123<#assign municipalityName = "" >
124<#assign municipalityNames = [] >
125<#assign municipalityNamesString = "" >
126<#assign territoryNameString = "" >
127<#assign isTerritorio = false >
128
129<#list categoryList as category>
130 <#assign categoryListIds = categoryListIds + [category.getCategoryId()]>
131</#list>
132
133<#list categoryList as category>
134 <#if vocabularyIdTerritori == category.getVocabularyId() >
135 <#assign municipalityName = category.getTitle(themeDisplay.getLanguageId()) >
136
137 <#assign childCategories = assetCategoryLocalService.getChildCategories(category.getCategoryId()) >
138 <#if childCategories?has_content>
139 <#assign territoryNameString = category.getTitle(themeDisplay.getLanguageId())>
140 <#list childCategories as curChildCategory>
141 <#assign isTerritorio = true >
142 <#assign municipalityNameC = curChildCategory.getTitle(themeDisplay.getLanguageId()) >
143 <#if curChildCategory?counter != 1 || municipalityNamesString?has_content>
144 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityNameC>
145 <#else>
146 <#assign municipalityNamesString = municipalityNamesString + municipalityNameC>
147 </#if>
148 <#assign municipalityNames = municipalityNames + [municipalityNameC]>
149 </#list>
150 <#else>
151 <#assign municipalityNames = municipalityNames + [municipalityName]>
152 <#if municipalityNamesString?has_content>
153 <#assign municipalityNamesString = municipalityNamesString + "," + municipalityName>
154 <#else>
155 <#assign municipalityNamesString = municipalityNamesString + municipalityName>
156 </#if>
157 </#if>
158 </#if>
159</#list>
160
161<#if !municipalityName?has_content>
162 <#if comune.getSiblings()?has_content>
163 <#list comune.getSiblings() as cur_comune>
164 <#assign municipalityName = cur_comune.getData() >
165 <#break>
166 </#list>
167 </#if>
168</#if>
169
170<#if isTerritorio>
171 <#assign municipalityName = territoryNameString >
172</#if>
173
174
175<#assign isgu = structureService.isGroupUmbria(themeDisplay)>
176<#assign sitiESottositiCategories = "">
177<#if !isgu>
178 <#assign sitiESottositiCategories = structureService.getSiteCategoryIdsByVocabularyName(themeDisplay, "Siti-e-sottositi")>
179</#if>
180
181<#assign attrattoriNeiDintorni = []>
182<#assign itinerariNeiDintorni = []>
183
184<#if isgu>
185 <#assign attrattoriNeiDintorni = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), attrattoreStructureKey, attrattoreStructureId?c, locale, "12", null , null, journalArticleId, null, null, null) />
186 <#assign itinerariNeiDintorni = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), itinerarioStructureKey, itinerarioStructureId?c, locale, "6", null , null, journalArticleId, null, null, null) />
187<#else>
188 <#assign attrattoriNeiDintorni = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), attrattoreStructureKey, attrattoreStructureId?c, locale, "12", null , sitiESottositiCategories, journalArticleId, null, null, null) />
189 <#assign itinerariNeiDintorni = elasticService.getRelatedArticlesOrderByPriority(themeDisplay, latitude, longitude, distanza.getData(), itinerarioStructureKey, itinerarioStructureId?c, locale, "6", null , sitiESottositiCategories, journalArticleId, null, null, null) />
190</#if>
191
192<#assign widthBannerImg = propsUtil.get("image.scale.fullpage") />
193<#assign widthSliderImg = propsUtil.get("image.slider.testobarra.height") />
194<#assign tomBaseImagePath = propsUtil.get("tom.base.image.url") />
195<#assign widthCardImg = propsUtil.get("image.scale.allpage") />
196
197<#assign urlBanner = immagine_banner.getData() >
198<#assign testAlternativoImmagineBanner = testo_alternativo_immagine_banner.getData() >
199<#attempt>
200 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getImmagineBanner()?has_content>
201 <#assign urlBanner = currentObjectDefaultLanguage.getImmagineBanner().getUrl() >
202 </#if>
203 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner()?has_content>
204 <#assign testAlternativoImmagineBanner = currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner() >
205 </#if>
206 <#recover>
207 <#assign urlBanner = immagine_banner.getData() >
208 <#assign testAlternativoImmagineBanner = testo_alternativo_immagine_banner.getData() >
209</#attempt>
210
211<#if !testAlternativoImmagineBanner?? || !testAlternativoImmagineBanner?trim?has_content>
212 <#if titolo.getData()?? && titolo.getData()?has_content>
213 <#assign testAlternativoImmagineBanner = "Titolo: "+ titolo.getData()>
214 </#if>
215</#if>
216
217<div class="container-fluid">
218 <div class="row">
219 <div class="header-block header-block-1 padding-top-em-5 padding-bottom-em-5 header-block-image-main">
220 <img class="bg" src="${urlBanner}?width=${widthBannerImg}" alt="${testAlternativoImmagineBanner}">
221 <div class="container title title-main">
222 <div class="row">
223 <div class="col-12">
224 </div>
225 </div>
226 </div>
227 </div>
228 <div class="map map-container map-container-header hidden">
229 <div class="map-content">
230 <div class="leaflet-interactive-map map-summary-results" id="header-map" data-results="${themeDisplay.getPortalURL()}/o/geolocation/get-positions?articleId=${journalArticleId}" data-config="{"clustering":true}"></div>
231 </div>
232 </div>
233 </div>
234</div>
235
236<#assign titleParentCategory = "">
237<#assign titleCategory = "">
238<#attempt>
239 <#list categoryList as category>
240 <#if vocabularyIdUmbria == category.getVocabularyId() >
241 <#assign titleCategory = category.getTitle(themeDisplay.getLocale())>
242 <#assign parentCategoryId = category.getParentCategoryId()>
243 <#if parentCategoryId?? && parentCategoryId?has_content>
244 <#assign pc = assetCategoryLocalService.getCategory(parentCategoryId) >
245 <#if pc?? && pc?has_content>
246 <#assign titleParentCategory = pc.getTitle("it_IT")>
247 </#if>
248 </#if>
249 <#if titleCategory?? && titleCategory?has_content>
250 <#-- <span class="hidden" id="tagmanager-item_category">${titleParentCategory}</span>-->
251 <#-- <span class="hidden" id="tagmanager-item_category2">${titleCategory}</span>-->
252 <span class="hidden" id="tagmanager_init_pagegroup">${titleParentCategory}</span>
253 <span class="hidden" id="tagmanager_init_pagecategory">${titleCategory}</span>
254 </#if>
255 </#if>
256 </#list>
257 <#recover>
258</#attempt>
259
260<div class="container-fluid bg-white">
261 <div class="row">
262 <article class="container bridge bg-white translate-top-md-rem-5 translate-top-lg-rem-10">
263 <div class="row">
264 <div class="col-12">
265 <div class="text-left link-back-container margin-left-rem-1"><a style="color:#919191;" 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>
266 <div class="text-center padding-top-em-2">
267 <div style="color:#919191;" class="link-1 link-toggle-map" data-target="#header-map" data-inactive="<@liferay.language key="label.visualizza.sulla.mappa" />" data-active="<@liferay.language key="label.visualizza.foto" />"><@liferay.language key="label.visualizza.sulla.mappa" /></div>
268 </div>
269 <div class="link-tripplanner-container">
270 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
271 <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">
272 <i class="far fa-heart text-red"></i>
273 <i class="fas fa-heart text-red" style="display:none"></i>
274 <span class="label hidden display-inline-lg"><@liferay.language key="label.aggiungi.al.mio.viaggio" /></span>
275 </a>
276 </div>
277 <div class="hidden infos">
278 <div class="hidden" id="tagmanager_item_">
279 <span id="tagmanager_item_id">${currentArticleAssetEntryId}</span>
280 <span id="tagmanager_item_category">${titleParentCategory}</span>
281 <span id="tagmanager_item_name">${titolo.getData()}</span>
282 <span id="tagmanager_item_list_name"></span>
283 <span id="tagmanager_item_list_id"></span>
284 <span id="tagmanager_item_brand">${titleParentCategory}</span>
285 <span id="tagmanager_index">1</span>
286 </div>
287 </div>
288
289 </div>
290 <div class="col-12 col-md-10 offset-md-1">
291 <div class="text-block text-block-center">
292
293 <h1 class="title-2 margin-top-em-0">${titolo.getData()}</h1>
294 <div class="text text-block-left padding-top-em-1">${descrizione.getData()}</div>
295 </div>
296 </div>
297 </div>
298 </article>
299 </div>
300</div>
301
302
303<#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>
304 <div class="container-fluid bg-white">
305 <div class="row">
306 <div class="carousel-container carousel-no-ctrl transparent margin-top-md-em-minus-4 margin-top-lg-em-minus-9 margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
307 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,"responsive":{"768":{"items":3},"992":{"items":4}}}">
308 <#if descrizione_immagine?? && descrizione_immagine.getSiblings()?has_content>
309 <#-- immagini della document library presenti -->
310 <#list descrizione_immagine.getSiblings() as cur_descrizione_immagine>
311 <div class="item-with-caption">
312
313 <#assign linkImmagine = "">
314 <#if cur_descrizione_immagine.immagine.getData()?contains("?")>
315 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "&width=" + widthSliderImg >
316 <#else>
317 <#assign linkImmagine = cur_descrizione_immagine.immagine.getData() + "?width=" + widthSliderImg >
318 </#if>
319
320 <img class="slide-image" src="${linkImmagine}" alt="${cur_descrizione_immagine.testo_alternativo.getData()}">
321 <#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">
322 <p class="caption">${cur_descrizione_immagine.didascalia.getData()}</p>
323 </#if>
324 </div>
325 </#list>
326 </#if>
327 </div>
328 </div>
329 </div>
330 </div>
331<#else>
332 <#attempt>
333 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getImmagini()?has_content>
334 <div class="container-fluid bg-white">
335 <div class="row">
336 <div class="carousel-container carousel-no-ctrl transparent margin-top-md-em-minus-4 margin-top-lg-em-minus-9 margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
337 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,"responsive":{"768":{"items":3},"992":{"items":4}}}">
338 <#list currentObjectDefaultLanguage.getImmagini() as imm>
339 <div class="item-with-caption">
340 <#if imm.getImmagine()?? && imm.getImmagine()?has_content && imm.getImmagine().getUrl()?? && imm.getImmagine().getUrl()?has_content>
341 <img class="slide-image" src="${imm.getImmagine().getUrl()}?width=${widthSliderImg}" alt="${imm.getTestoAlternativo()}">
342 <#if imm.getDidascalia()?? && imm.getDidascalia()?has_content && imm.getDidascalia()?trim?length gt 0 && imm.getDidascalia()?trim != "null">
343 <p class="caption">${imm.getDidascalia()}</p>
344 </#if>
345 </#if>
346 </div>
347 </#list>
348 </div>
349 </div>
350 </div>
351 </div>
352 </#if>
353 <#recover>
354
355 </#attempt>
356</#if>
357
358<div class="container-fluid bg-white">
359 <div class="row">
360 <div class="container">
361 <div class="row">
362 <div class="col-12 col-md-10 offset-md-1">
363 <div class="text-block text-block-center">
364 <div class="text text-block-left">
365 ${descrizione_due.getData()}
366 </div>
367
368 <#if accessibilita.getData()?? && accessibilita.getData()?has_content && accessibilita.getData()?trim?length gt 0 && accessibilita.getData()?trim != "null">
369 <div class="text text-block-left">
370 <strong>Accessibilità</strong>
371 ${accessibilita.getData()}
372 </div>
373 </#if>
374
375 <#if sicurezza.getData()?? && sicurezza.getData()?has_content && sicurezza.getData()?trim?length gt 0 && sicurezza.getData()?trim != "null">
376 <div class="text text-block-left">
377 <strong>Sicurezza</strong>
378 ${sicurezza.getData()}
379 </div>
380 </#if>
381
382 <#assign showdates = false>
383
384 <#if descrizione_orario.getSiblings()?has_content>
385 <#list descrizione_orario.getSiblings() as cur_descrizione_orario>
386 <#if cur_descrizione_orario.getData()?? && cur_descrizione_orario.getData()?has_content && cur_descrizione_orario.getData()?trim?length gt 0 && cur_descrizione_orario.getData()?trim != "null">
387 <#if cur_descrizione_orario.orario_apertura.getData()?? && cur_descrizione_orario.orario_apertura.getData()?has_content && cur_descrizione_orario.orario_apertura.getData()?trim?length gt 0 && cur_descrizione_orario.orario_apertura.getData()?trim != "null">
388 <#assign showdates = true>
389 </#if>
390 </#if>
391 </#list>
392 </#if>
393
394
395 <#if descrizione_orario.getSiblings()?has_content>
396 <#if showdates>
397 <div class="text text-block-left">
398 <strong><@liferay.language key="label.orari" /></strong>
399 </div>
400 </#if>
401 <#list descrizione_orario.getSiblings() as cur_descrizione_orario>
402 <#if cur_descrizione_orario.getData()?? && cur_descrizione_orario.getData()?has_content && cur_descrizione_orario.getData()?trim?length gt 0 && cur_descrizione_orario.getData()?trim != "null">
403 <div class="text text-block-left">
404 ${cur_descrizione_orario.getData()}
405 </div>
406 <#assign curorarioapertura = "">
407 <#if cur_descrizione_orario.orario_apertura.getData()?? && cur_descrizione_orario.orario_apertura.getData()?has_content && cur_descrizione_orario.orario_apertura.getData()?trim?length gt 0 && cur_descrizione_orario.orario_apertura.getData()?trim != "null">
408 <#assign curorarioapertura = cur_descrizione_orario.orario_apertura.getData()>
409 </#if>
410
411 <#assign curorariochiusura = "">
412 <#if cur_descrizione_orario.orario_chiusura.getData()?? && cur_descrizione_orario.orario_chiusura.getData()?has_content && cur_descrizione_orario.orario_chiusura.getData()?trim?length gt 0 && cur_descrizione_orario.orario_chiusura.getData()?trim != "null">
413 <#assign curorariochiusura = cur_descrizione_orario.orario_chiusura.getData()>
414 </#if>
415
416 <#if curorarioapertura?? && curorarioapertura?has_content && curorariochiusura?? && curorariochiusura?has_content>
417 <div class="text text-block-left">
418 ${curorarioapertura} - ${curorariochiusura}
419 </div>
420 <#elseif curorarioapertura?? && curorarioapertura?has_content>
421 <div class="text text-block-left">
422 ${curorarioapertura}
423 </div>
424 </#if>
425
426 </#if>
427 </#list>
428 </#if>
429
430 </div>
431 </div>
432 </div>
433 </div>
434 </div>
435</div>
436
437<div class="container-fluid bg-white">
438 <div class="row">
439 <div class="container">
440 <div class="row">
441 <div class="col-12 col-md-10 offset-md-1">
442 <div class="text-block text-block-center">
443 <div class="title-2">
444 <#if titolo1?has_content && titolo1?trim?length gt 0 >
445 ${titolo1}
446 <#else>
447 <@liferay.language key="label.esplora.i.dintorni" />
448 </#if>
449 </div>
450 <div class="text">
451 <#if testo1?has_content && testo1?trim?length gt 0 >
452 ${testo1}
453 <#else>
454 <@liferay.language key="label.principali.attrazioni" />
455 </#if>
456 </div>
457 </div>
458 </div>
459 </div>
460 </div>
461 </div>
462</div>
463
464<div class="container-fluid bg-white">
465 <div class="row">
466 <div class="container bridge bridge-md-bottom margin-top-em-2 margin-bottom-em-2 margin-top-md-em-minus-10 margin-bottom-md-em-0">
467 <div class="row">
468 <div class="col-12">
469 <div class="carousel-container transparent carousel-no-nav">
470 <div class="tns-carousel tns-carousel-default" data-tns-config="{"nav":false,"loop":true,"items":2,"responsive":{"768":{"items":3},"991":{"items":4}}}">
471 <#list attrattoriNeiDintorni as relatedCoord>
472 <#assign langId = themeDisplay.getLanguageId() />
473 <#assign contentGroupId = relatedCoord.getGroupId() />
474 <#assign contentByLocale = relatedCoord.getContentByLocale(themeDisplay.getLanguageId()) />
475 <#assign document = saxReaderUtil.read(contentByLocale) >
476 <#assign rootElement = document.getRootElement()>
477
478 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
479 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
480
481 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
482 <#assign relatedSottotitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
483
484 <#assign xPathCoordinatePrincipali = saxReaderUtil.createXPath("dynamic-element[@name='coordinate_principali']")>
485 <#assign relatedCoordinatePrincipali = xPathCoordinatePrincipali.selectSingleNode(rootElement).getStringValue()>
486
487 <#if relatedCoordinatePrincipali?has_content && relatedCoordinatePrincipali?trim?length gt 0 >
488 <#assign coordinatePrincipaliRelatedJson = relatedCoordinatePrincipali?eval >
489 <#assign latitudeRelated = coordinatePrincipaliRelatedJson.latitude >
490 <#assign longitudeRelated = coordinatePrincipaliRelatedJson.longitude >
491 <#else>
492 <#assign latitudeRelated = "" >
493 <#assign longitudeRelated = "" >
494 </#if>
495
496 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
497 <#assign relatedImmagineBanner = "" >
498
499 <#if xPathImmagineBanner?? && xPathImmagineBanner?has_content>
500 <#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content>
501 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
502 </#if>
503 </#if>
504
505 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
506 <#assign relatedTestoAlternativoImmagineBanner = "" >
507 <#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content>
508 <#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content>
509 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
510 </#if>
511 </#if>
512
513
514 <#if !relatedTestoAlternativoImmagineBanner?? || !relatedTestoAlternativoImmagineBanner?trim?has_content || relatedTestoAlternativoImmagineBanner?trim == "null">
515 <#if relatedTitolo?? && relatedTitolo?has_content>
516 <#assign relatedTestoAlternativoImmagineBanner = relatedTitolo?trim>
517 </#if>
518 </#if>
519
520
521 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
522 <#assign immagineBannerJson = relatedImmagineBanner?eval >
523 <#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
524 <#else>
525 <#assign url = "" >
526 </#if>
527
528 <div>
529 <div class="card card-type-asset image-card card-2 no-desc card-small card-geolocalized card-territory" data-lat="${latitudeRelated}" data-lng="${longitudeRelated}" data-url="/-/${relatedCoord.getUrlTitle(locale)}" data-title="${relatedTitolo}">
530 <#if contentGroupId = groupId>
531 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
532 <#assign langID = themeDisplay.getLanguageId()>
533 <#if langID?has_content && langID?contains("_")>
534 <#assign langID = langID?split("_")[0]>
535 </#if>
536 <a class="aspect-ratio card-item-first aspect-ratio-16-20" href="${detailBaseUrl}/-/${relatedCoord.getUrlTitle(locale)}" draggable data-id="${relatedCoord.getArticleId()}" data-tom="false">
537 <#else>
538 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
539 <a class="aspect-ratio card-item-first aspect-ratio-16-20" href="${detailBaseUrl}/search/-/search/attrazione/${relatedCoord.getUrlTitle(locale)}_${contentGroupId}" draggable data-id="${relatedCoord.getArticleId()}" data-tom="false">
540 </#if>
541 <img class="aspect-ratio-item aspect-ratio-item-center-middle aspect-ratio-item-fluid" src="${url}" alt="Immagine: ${relatedTestoAlternativoImmagineBanner}">
542 <span class="sticker sticker-bottom-left">
543 <div class="title title-4">
544 ${relatedTitolo}
545 </div>
546 <div class="text description"></div>
547 </span>
548 </a>
549 </div>
550 </div>
551 </#list>
552 </div>
553 </div>
554 </div>
555 </div>
556 </div>
557
558
559 <#assign non_visualizzare_la_mappa = non_visualizzare_la_mappa!false>
560
561 <#if non_visualizzare_la_mappa?is_hash>
562 <#assign non_visualizzare_la_mappa_value = non_visualizzare_la_mappa.getData()?trim>
563 <#if non_visualizzare_la_mappa_value?has_content>
564 <#assign non_visualizzare_la_mappa_bool = non_visualizzare_la_mappa_value?boolean>
565 <#else>
566 <#assign non_visualizzare_la_mappa = false>
567 <#assign non_visualizzare_la_mappa_bool = false>
568 </#if>
569 <#else>
570 <#assign non_visualizzare_la_mappa_bool = false>
571 </#if>
572
573 <#if non_visualizzare_la_mappa_bool>
574 <!-- mappa non visualizzata -->
575 <div style="height: 200px; width: 100%; background-color: white;"></div>
576 <#else>
577 <div class="map map-container map-banner">
578 <div class="map-content">
579 <div class="leaflet-interactive-map map-summary-territories" id="map-detail" data-kml="../undefined"></div>
580 </div>
581 </div>
582 </#if>
583
584
585 </div>
586</div>
587
588
589<#assign lang = "it"/>
590<#if themeDisplay.getLanguageId()?contains("_")>
591 <#assign lang = themeDisplay.getLanguageId()?split("_")[0]/>
592<#else>
593 <#assign lang = themeDisplay.getLanguageId()/>
594</#if>
595<#assign tomApi = serviceLocator.findService("it.inera.tom.api.TOMAPI")>
596
597<#if municipalityNames?has_content && municipalityNames?size gt 0 && lang?has_content && lang?trim?length gt 0 && tomApi?has_content>
598
599 <#assign offerResults = [] />
600 <#attempt>
601 <#assign offerResults = tomApi.getJsonOffersListResultByMunicipalities(municipalityNames, lang) />
602 <#recover>
603
604 </#attempt>
605
606
607 <#if offerResults?? && offerResults?has_content>
608 <#assign offerResponse = offerResults.getResponse()>
609 <#if offerResponse?? && offerResponse?has_content>
610 <#assign offerResults = offerResponse.getResults()>
611 <#if offerResults?? && offerResults?has_content>
612 <aside class="container-fluid bg-white" id="hideable">
613 <div class="row">
614 <div class="container padding-top-em-3">
615 <div class="row">
616 <div class="col-12 col-md-10 offset-md-1 margin-bottom-lg-em-0 margin-bottom-em-2">
617 <div class="text-block text-block-center">
618 <div class="title-2">
619 <#if municipalityName?has_content>
620 <#if isTerritorio>
621 <@liferay.language key="label.le.migliori.offerte.nel" /> ${municipalityName}
622 <#else>
623 <@liferay.language key="label.le.migliori.offerte.a" /> ${municipalityName}
624 </#if>
625 <#else>
626 <@liferay.language key="label.le.migliori.offerte" />
627 </#if>
628 </div>
629 <div class="text">
630 <@liferay.language key="label.proposte.vivere.umbria" />
631 </div>
632 </div>
633 </div>
634 </div>
635
636 <div class="row">
637 <div class="col-12">
638 <div class="d-flex flex-justify-content-end">
639 <a class="link-showall" href="/offerte-luogo?municipality=${municipalityNamesString}&territory=${territoryNameString}"><@liferay.language key="label.vedi.tutte" />
640 <i class="fas fa-angle-right"></i>
641 </a>
642 </div>
643 </div>
644 <div class="col-12">
645 <div class="row">
646 <div class="col-12 padding-bottom-em-3">
647 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
648 <div class="tns-carousel tns-carousel-default">
649 <#list offerResults as offerResult>
650 <#if offerResult.getGalleries()?has_content && offerResult.getGalleries().getImages()?has_content
651 && offerResult.getGalleries().getImages()?size gt 0
652 && offerResult.getGalleries().getImages()[0].getFile()?has_content>
653 <div>
654 <div class="card card-1 card-offerta has-info-commercial">
655 <a class="card-link" href="/dettaglio-offerta/-/dettaglio/${offerResult.getSlug()}_${offerResult.getId()}_${offerResult.getType()}" aria-label="${offerResult.getTitle()}"></a>
656 <div class="card-header">
657
658 <div class="hidden" id="tagmanager_item_card">
659 <span id="tagmanager_item_id">${offerResult.getId()}</span>
660 <span id="tagmanager_item_category_card">${titleParentCategory}</span>
661 <span id="tagmanager_item_category2_card">${titleCategory}</span>
662 <span id="tagmanager_item_name">${offerResult.getTitle()}</span>
663 <span id="tagmanager_item_list_name_card">
664 <#if municipalityName?has_content>
665 <#if isTerritorio>
666 Le migliori offerte nel ${municipalityName}
667 <#else>
668 Le migliori offerte a ${municipalityName}
669 </#if>
670 <#else>
671 Le migliori offerte per te
672 </#if>
673 </span>
674 <span id="tagmanager_item_list_id"></span>
675 <span id="tagmanager_item_variant">
676
677 <#if offerResult.getDuration()?has_content && offerResult.getDuration().getCount()?has_content && offerResult.getDuration().getType()?has_content>
678 ${offerResult.getDuration().getCount()} ${offerResult.getDuration().getType()}
679 <#else>
680
681 </#if>
682
683 </span>
684 <span id="tagmanager_item_brand">${offerResult.getType()}</span>
685 <span id="tagmanager_item_price">
686
687 <#if offerResult.getMinimumPrice()?has_content && offerResult.getMinimumPrice()!=0>
688 ${offerResult.getMinimumPrice()}
689 <#else>
690 0
691 </#if>
692
693 </span>
694 <span id="tagmanager_index">${offerResult_index}</span>
695 </div>
696 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
697 <#if offerResult.getGalleries()?has_content>
698 <#if offerResult.getGalleries().getImages()?has_content && offerResult.getGalleries().getImages()?size gt 0>
699 <#assign file = ""/>
700 <#assign alt = ""/>
701 <#if offerResult.getGalleries().getImages()[0].getFile()?has_content>
702 <#assign file = tomBaseImagePath + offerResult.getGalleries().getImages()[0].getFile()/>
703 <#else>
704 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
705 </#if>
706 <#if offerResult.getGalleries().getImages()[0].getAlt()?has_content>
707 <#assign alt = offerResult.getGalleries().getImages()[0].getAlt()/>
708 <#else>
709 <#if offerResult.getTitle()?? && offerResult.getTitle()?has_content>
710 <#assign alt = "Titolo: " + offerResult.getTitle()?trim/>
711 </#if>
712 </#if>
713 <img src="${file}?params[width]=354" alt="${alt}">
714 </#if>
715 <#else>
716 <#assign file = "/o/umbria-theme/images/loghi/logo_no_image.png"/>
717 <img src="${file}?params[width]=354" alt="logo_no_image">
718 </#if>
719 </div>
720
721 <#if offerResult.getType()?? && offerResult.getType()?has_content && offerResult.getType()?trim?length gt 0 && offerResult.getType()?trim != "accommodation">
722 <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"/>">
723 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
724 </button>
725 <#else>
726 <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"/>">
727 <i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
728 </button>
729 </#if>
730 <div class="card-header-info">
731 <div class="card-badges">
732 <div class="badge badge-light-blue">
733 <#if offerResult.getType() == 'guide'>
734 <@liferay.language key="label.guide" />
735 </#if>
736 <#if offerResult.getType() == 'travelagency'>
737 <@liferay.language key="label.pacchetti.turistici" />
738 </#if>
739 <#if offerResult.getType() == 'consortium'>
740 <@liferay.language key="label.pacchetti.turistici" />
741 </#if>
742 <#if offerResult.getType() == 'accommodation'>
743 <@liferay.language key="label.accommodation" />
744 </#if>
745 <#if offerResult.getType() == 'service'>
746 <@liferay.language key="label.esperienze.in.azienda" />
747 </#if>
748 <#if offerResult.getType() == 'educationalfarm'>
749 <@liferay.language key="label.percorsi.didattici" />
750 </#if>
751 </div>
752 </div>
753 <div class="header-title title-5">
754 ${offerResult.getTitle()}
755 </div>
756 </div>
757 </div>
758 <#if offerResult?has_content>
759 <div class="card-body">
760 <div class="card-body-title title-4">
761 ${offerResult.getTitle()}
762 </div>
763 <#if offerResult.getSubtitle()?has_content>
764 <div class="card-body-subtitle">
765 ${offerResult.getSubtitle()}
766 </div>
767 </#if>
768 </div>
769 </#if>
770 <div class="card-info card-info-readmore">
771 <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div>
772 </div>
773 <div class="card-info">
774 <span class="info">
775 <!--<a href="#" class="text-light-blue text-bold">
776 <i class="fas fa-map-pin"></i>
777 </a>-->
778 </span>
779 </div>
780 <div class="card-info card-info-commercial">
781 <#if offerResult.getDuration()?has_content && offerResult.getDuration().getCount()?has_content && offerResult.getDuration().getType()?has_content>
782 <div class="info info-commercial">
783 <div class="label"><@liferay.language key="label.durata" /></div>
784 <div class="title text-bold">
785 ${offerResult.getDuration().getCount()} ${offerResult.getDuration().getType()}
786 </div>
787 </div>
788 <#else>
789 <div class="info info-commercial">
790 <div class="label"> </div>
791 <div class="title text-bold">
792
793 </div>
794 </div>
795 </#if>
796 <div class="info info-commercial">
797 <#if offerResult.getMinimumPrice()?has_content && offerResult.getMinimumPrice()!=0>
798 <div class="label">
799 <@liferay.language key="label.a.partire.da" />
800 </div>
801 <div class="title text-bold">
802 <@liferay.language key="label.euro" /> ${offerResult.getMinimumPrice()}
803 </div>
804 <#else>
805 <div class="label">
806 <@liferay.language key="label.prezzo.su.richiesta" />
807 </div>
808 <div class="title text-bold">
809
810 </div>
811 </#if>
812 </div>
813 </div>
814 </div>
815 </div>
816 </#if>
817 </#list>
818 </div>
819 </div>
820 </div>
821 </div>
822 </div>
823 </div>
824 </div>
825 </div>
826 </aside>
827 </#if>
828 </#if>
829 </#if>
830
831</#if>
832
833<#if itinerariNeiDintorni?size gt 0 || relatedResults?size gt 0>
834 <aside class="container-fluid bg-white">
835 <div class="row">
836 <div class="container padding-top-em-3">
837 <div class="row">
838 <div class="col-12 col-md-10 offset-md-1">
839 <div class="text-block text-block-center">
840 <div class="title-2">
841 <#if titolo2?has_content && titolo2?trim?length gt 0 >
842 ${titolo2}
843 <#else>
844 <@liferay.language key="label.potrebbe.interessarti.anche" />
845 </#if>
846 </div>
847 <div class="text">
848 <#if testo2?has_content && testo2?trim?length gt 0 >
849 ${testo2}
850 <#else>
851 <@liferay.language key="label.scopri.proposte.uniche" />
852 </#if>
853 </div>
854 </div>
855 </div>
856 </div>
857 </div>
858 </div>
859
860 <div class="row">
861 <div class="container padding-top-em-1 padding-bottom-em-5">
862 <div class="row">
863 <div class="col-12">
864 <div class="row">
865 <div class="col-12 padding-bottom-em-3">
866 <div class="carousel-container transparent margin-top-em-1 margin-bottom-em-2">
867 <div class="tns-carousel tns-carousel-default">
868
869 <#-- GESTIONE RALATED ASSETS RENDERIZZAZIONE-->
870 <#list relatedResults as relatedResult>
871 <div>
872 <div class="card card-1 card-offerta">
873 <#if contentGroupId = groupId>
874 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
875 <a class="card-link" href="${detailBaseUrl}/-/${relatedCoord.getUrlTitle(locale)}" aria-label="${relatedResult.getTitle()}"></a>
876 <#else>
877 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
878 <a class="card-link" href="${detailBaseUrl}/search/-/search/itinerario/${relatedCoord.getUrlTitle(locale)}_${contentGroupId}" aria-label="${relatedResult.getTitle()}"></a>
879 </#if>
880 <div class="card-header">
881 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
882 <#assign altPotrebbeInteressarti = "">
883 <#if !relatedResult.getImg().getAlt()?? || !relatedResult.getImg().getAlt()?trim?has_content || relatedResult.getImg().getAlt()?trim == "null">
884 <#if relatedResult.getTitle()?? && relatedResult.getTitle()?has_content>
885 <#assign altPotrebbeInteressarti = relatedResult.getTitle()?trim>
886 </#if>
887 </#if>
888 <img src="${relatedResult.getImg().getSrc()}" alt="Titolo: ${altPotrebbeInteressarti}">
889 </div>
890 <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"/>">
891 <i class="far fa-heart text-red"></i>
892 <i class="fas fa-heart text-red" style="display:none"></i>
893 </button>
894 <div class="card-header-info">
895 <div class="card-badges">
896 <#assign categoryNames = relatedResult.getHeader().getInfo() >
897 <#list categoryNames as categoryName>
898 <div class="badge badge-red">
899 ${categoryName}
900 </div>
901 <a class="header-title title-5" href="#">${relatedResult.getTitle()}</a>
902 </#list>
903 </div>
904 </div>
905 </div>
906 <div class="card-body">
907 <#if contentGroupId = groupId>
908 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
909 <a class="card-link" href="${relatedResult.getHref()}">
910 <#else>
911 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
912 <a class="card-link" href="${detailBaseUrl}/search/-/search/itinerario/${relatedResult.getUrlTitle(locale)}_${contentGroupId}">
913 </#if>
914 ${relatedResult.getTitle()}
915 </a>
916 <div class="card-body-subtitle">
917 <#if relatedResult.getSubtitle()?? && relatedResult.getSubtitle()?has_content && relatedResult.getSubtitle()?trim?length gt 0 && relatedResult.getSubtitle()?trim != "null">
918 ${relatedResult.getSubtitle()}
919 </#if>
920 </div>
921
922 </div>
923 <div class="card-info">
924 <span class="info"></span>
925 </div>
926 </div>
927 </div>
928 </#list>
929 <#-- GESTIONE RALATED ASSETS FINE RENDERIZZAZIONE-->
930 <#list itinerariNeiDintorni as related>
931 <#assign langId = themeDisplay.getLanguageId() />
932 <#assign contentByLocale = related.getContentByLocale(themeDisplay.getLanguageId()) />
933 <#assign contentGroupId = related.getGroupId() />
934 <#assign document = saxReaderUtil.read(contentByLocale) >
935 <#assign rootElement = document.getRootElement()>
936
937 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
938 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
939
940 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
941 <#assign relatedSottotitolo = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()>
942
943 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
944 <#assign relatedImmagineBanner = "" >
945
946 <#if xPathImmagineBanner?? && xPathImmagineBanner?has_content>
947 <#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content>
948 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
949 </#if>
950 </#if>
951
952 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
953 <#assign relatedTestoAlternativoImmagineBanner = "" >
954 <#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content>
955 <#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content>
956 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
957 </#if>
958 </#if>
959
960 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
961 <#assign immagineBannerJson = relatedImmagineBanner?eval >
962 <#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
963 <#else>
964 <#assign url = "" >
965 </#if>
966
967 <#assign resourcePrimKey = related.getResourcePrimKey() />
968 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
969 <#assign assetEntryId = assetEntry.getEntryId() />
970
971 <#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) >
972
973 <#assign categoryNames = [] >
974
975 <#list categories as category>
976 <#if vocabularyIdUmbria == category.getVocabularyId() >
977 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
978 </#if>
979 </#list>
980 <div>
981 <div class="card card-1 card-offerta">
982 <#if contentGroupId = groupId>
983 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
984 <a class="card-link" href="${detailBaseUrl}/-/${related.getUrlTitle(locale)}" aria-label="${related.getTitle()}"></a>
985 <#else>
986 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
987 <a class="card-link" href="${detailBaseUrl}/search/-/search/itinerario/${related.getUrlTitle(locale)}_${contentGroupId}" aria-label="${related.getTitle()}"></a>
988 </#if>
989 <div class="card-header">
990
991 <div class="hidden" id="tagmanager_item_card_potrebbe_interessarti">
992 <span id="tagmanager_item_id_potrebbe_interessarti">${related.getId()}</span>
993 <span id="tagmanager_item_category_card_potrebbe_interessarti">${titleCategory}</span>
994 <span id="tagmanager_item_name_potrebbe_interessarti">${related.getTitle()}</span>
995 <span id="tagmanager_item_list_name_card_potrebbe_interessarti">Potrebbe interessarti</span>
996 <span id="tagmanager_item_list_id_potrebbe_interessarti"></span>
997 <span id="tagmanager_item_brand_potrebbe_interessarti">${titleCategory}</span>
998 <span id="tagmanager_index_potrebbe_interessarti">${related_index}</span>
999 </div>
1000
1001 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
1002 <#if !relatedTestoAlternativoImmagineBanner?? || !relatedTestoAlternativoImmagineBanner?trim?has_content || relatedTestoAlternativoImmagineBanner?trim == "null">
1003 <#if related.getTitle()?? && related.getTitle()?has_content>
1004 <#assign relatedTestoAlternativoImmagineBanner = relatedTitolo?trim>
1005 </#if>
1006 </#if>
1007 <img src="${url}" alt="Titolo: ${relatedTestoAlternativoImmagineBanner}">
1008 </div>
1009 <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"/>">
1010 <i class="far fa-heart text-red"></i>
1011 <i class="fas fa-heart text-red" style="display:none"></i>
1012 </button>
1013 <div class="card-header-info">
1014 <div class="card-badges">
1015 <#list categoryNames as categoryName>
1016 <div class="badge badge-red">
1017 ${categoryName}
1018 </div>
1019 <a class="header-title title-5" href="#">${related.getTitle()}</a>
1020 </#list>
1021 </div>
1022 </div>
1023 </div>
1024 <div class="card-body">
1025 <#if contentGroupId = groupId>
1026 <#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)>
1027 <a class="card-body-title title-4" href="${detailBaseUrl}/-/${related.getUrlTitle(locale)}">${relatedTitolo}</a>
1028 <#else>
1029 <#assign detailBaseUrl = searchService.getDetailBaseUrlNoMinus(themeDisplay, groupId)>
1030 <a class="card-body-title title-4" href="${detailBaseUrl}/search/-/search/itinerario/${related.getUrlTitle(locale)}_${contentGroupId}">${relatedTitolo}</a>
1031 </#if>
1032 <div class="card-body-subtitle">${relatedSottotitolo}</div>
1033 </div>
1034 <div class="card-info">
1035 <span class="info"></span>
1036 </div>
1037 </div>
1038 </div>
1039 <#assign categoryNames = [] >
1040 <#assign categories = [] >
1041 </#list>
1042 </div>
1043 </div>
1044 </div>
1045 </div>
1046 </div>
1047 </div>
1048 </div>
1049 </div>
1050 </aside>
1051</#if>
1052
1053<#if !isgu>
1054 <script>
1055 $(".link-tripplanner").hide();
1056 </script>
1057</#if>
1058
1059<script id="map-popup-1-template" type="text/x-handlebars-template">
1060 <div class="map-popup map-popup-1">
1061 <a href="{{href}}">
1062 <div class="title">{{title}}</div>
1063 </a>
1064 </div>
1065</script>
1066
1067<script>
1068 $("#backLink").click(function(event) {
1069 event.preventDefault();
1070 history.back(1);
1071 });
1072</script>
1073<!-- Go to www.addthis.com/dashboard to customize your tools -->
1074<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5c629e6303f68c9f"></script>