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