This year, Palermo celebrates a journey that began in 1624 and now marks 400 years of history and traditions.
It is the 400th anniversary of the discovery of the miraculous body of Saint Rosalia, the patron saint of the city of Palermo. A symbol of rebirth and hope.
La Santuzza is celebrated with a rich calendar of events that will continue until 2025, enlivening the provincial territory of the Sicilian capital.
THE STORY OF SANTA ROSALIA AND THE FESTINO
The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey() [in template "20099#20135#153060" at line 11, column 39]
----
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 attrattoreStructureKey = stru... [in template "20099#20135#153060" at line 11, column 5]
---- 1<#-- CAROSELLO MULTITIPO 05/07/2023--> 2 3<#assign showTemplate = false /> 4<#assign emptyEntries = false /> 5 6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 8 9<#if entries?has_content> 10 <#assign showTemplate = true /> 11 <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 12 <#assign eventoStructureKey = structureService.getStructureEventoKey()> 13 <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 14 <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 15 <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 16 <#assign categoriaStructureKey = "34431"> 17 18 <#assign layout = themeDisplay.getLayout()/> 19 <#assign currentSite = themeDisplay.getSiteGroup()/> 20 <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 21 <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 22 23 <#assign count = 1/> 24 <#list entries as curEntry> 25 <#assign assetRenderer = curEntry.getAssetRenderer()/> 26 <#if validator.isNotNull(assetRenderer)> 27 <#assign className = assetRenderer.getClassName() /> 28 <#if className == "com.liferay.journal.model.JournalArticle"> 29 <#assign ja = assetRenderer.getArticle() /> 30 <#assign structureId = ja.getStructureId() /> 31 32 <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey 33 && structureId != itinerarioStructureKey && structureId != ricettaStructureKey 34 && structureId != luogoStructureKey && structureId != categoriaStructureKey> 35 <#assign showTemplate = false /> 36 </#if> 37 <#else> 38 <#assign showTemplate = false /> 39 </#if> 40 <#else> 41 <#assign showTemplate = false /> 42 </#if> 43 </#list> 44<#else> 45 <#assign emptyEntries = true /> 46</#if> 47 48<#if !emptyEntries> 49 <#if showTemplate> 50 <div class="container mb-5"> 51 <div class="row"> 52 <div class="col-12"> 53 <div class="tab-content category-offers" id="offer-tab-content"> 54 <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 55 <div class="row"> 56 <div class="col-12"> 57 <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{"nav":true,"navText":["<i class='icon-angle-left'></i>","<i class='icon-angle-right'></i>"],"autoplay":false,"autoplayHoverPause":true,"responsiveClass":true,"responsive":{"0":{"items":1,"slideBy":1},"480":{"items":2,"slideBy":2},"768":{"items":3,"slideBy":3}}}"> 58 59 <#list entries as curEntry> 60 <#assign assetRenderer = curEntry.getAssetRenderer()/> 61 <#assign ja = assetRenderer.getArticle() /> 62 <#assign structureId = ja.getStructureId() /> 63 <#assign langId = themeDisplay.getLanguageId() /> 64 <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 65 66 <#assign colorebordo = "border-bottom-yellow"> 67 <#assign subpage = "luogo"> 68 <#assign destinationPage = "" /> 69 <#assign url = ""> 70 <#assign textAltImg = "" /> 71 <#assign titolo = ""> 72 <#assign sottotitolo_abstract = ""> 73 74 <#if structureId == categoriaStructureKey> 75 76 <#assign document = saxReaderUtil.read(contentByLocale) > 77 <#assign rootElement = document.getRootElement()> 78 79 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 80 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 81 82 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 83 <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 84 85 <#assign colorebordo = "border-bottom-yellow"> 86 <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 87 <#if xPathColorBorder?? && xPathColorBorder?has_content 88 && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 89 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 90 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 91 <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 92 </#if> 93 94 <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 95 <#if xPathImmagine?? && xPathImmagine?has_content > 96 <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 97 <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 98 99 <#attempt> 100 <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 101 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 102 <#recover> 103 </#attempt> 104 </#if> 105 </#if> 106 107 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 108 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 109 110 <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 111 <#assign linkToPage = "" > 112 113 <#if xPathLinkAPagina?? > 114 <#if xPathLinkAPagina?has_content > 115 <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 116 <#assign linkAPaginaSplitted = linkAPagina?split("@") > 117 <#assign layoutIdPage = linkAPaginaSplitted?first > 118 <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 119 <#assign groupIdPage = linkAPaginaSplitted?last > 120 <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 121 122 <#if layoutIdPage != 0 > 123 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 124 <#assign contentPage = ""> 125 <#attempt> 126 <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 127 <#if contentPage?? > 128 <#assign linkToPage = contentPage.getFriendlyURL(locale) > 129 <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 130 </#if> 131 <#recover> 132 </#attempt> 133 </#if> 134 135 </#if> 136 </#if> 137 138 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 139 <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 140 <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 141 <#assign linkToPage = linkToPage?trim> 142 </#if> 143 144 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 145 <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 146 <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 147 <#assign linkToPage = linkToPage?trim> 148 </#if> 149 <#assign destinationPage = linkToPage> 150 <#else> 151 <#if structureId == attrattoreStructureKey> 152 <#assign subpage = "attrazione"> 153 <#elseif structureId == eventoStructureKey> 154 <#assign subpage = "evento"> 155 <#elseif structureId == itinerarioStructureKey> 156 <#assign subpage = "itinerario"> 157 <#elseif structureId == ricettaStructureKey> 158 <#assign subpage = "ricetta"> 159 <#elseif structureId == luogoStructureKey> 160 <#assign subpage = "luogo"> 161 <#else> 162 </#if> 163 <#--CONTENT BY DEFAULT LOCALE--> 164 <#attempt> 165 <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 166 <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 167 <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 168 <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 169 <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 170 <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 171 <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 172 </#if> 173 </#if> 174 <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 175 <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 176 <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 177 <#if immagineListaByDefaultLocale?trim?has_content> 178 <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 179 <#else> 180 <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 181 </#if> 182 </#if> 183 <#if validator.isNotNull(immagineByDefaultLocale)> 184 <#attempt> 185 <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 186 <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 187 <#recover> 188 <#assign url = ""> 189 </#attempt> 190 </#if> 191 <#recover> 192 </#attempt> 193 <#--CONTENT BY DEFAULT LOCALE--> 194 195 <#assign urlTitle = ja.getUrlTitle() /> 196 <#assign document = saxReaderUtil.read(contentByLocale) > 197 <#assign rootElement = document.getRootElement()> 198 <#assign xPathTitolo = "" /> 199 <#assign xPathSottotitolo_abstract = "" /> 200 <#assign xPathImmagineBanner = "" /> 201 <#assign xPathTextAltImg = "" /> 202 <#assign immagineLista = ""> 203 <#assign textAltImgLista = ""> 204 <#assign immagine = ""> 205 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 206 <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 207 208 <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 209 <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 210 <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 211 <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 212 </#if> 213 </#if> 214 <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 215 <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 216 <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 217 <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 218 </#if> 219 </#if> 220 221 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 222 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 223 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 224 <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 225 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 226 <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()> 227 228 <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 229 <#if !textAltImg?has_content> 230 <#assign textAltImg = titolo> 231 </#if> 232 233 <#if immagineLista?trim?has_content> 234 <#assign immagine = immagineLista> 235 <#assign textAltImg = textAltImgLista> 236 <#else> 237 <#assign immagine = immagineBanner> 238 </#if> 239 240 <#if validator.isNotNull(immagine)> 241 <#attempt> 242 <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 243 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 244 <#recover> 245 </#attempt> 246 </#if> 247 </#if> 248 <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 249 <div class="row"> 250 <div class="card"> 251 <a href="${destinationPage}"> 252 <img class="card-img-top" src="${url}" alt="${textAltImg}"> 253 <div class="card-body"> 254 <h3 class="card-title">${titolo} 255 </h3> 256 <p class="card-text"> 257 ${sottotitolo_abstract} 258 </p> 259 </div> 260 </a> 261 </div> 262 </div> 263 </div> 264 </#list> 265 </div> 266 </div> 267 </div> 268 </div> 269 </div> 270 </div> 271 </div> 272 </div> 273 <#else> 274 <div style="border: 1px solid red; padding:20px;"> 275 <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 276 <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 277 </div> 278 </#if> 279 280</#if> The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey() [in template "20099#20135#153060" at line 11, column 39]
----
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 attrattoreStructureKey = stru... [in template "20099#20135#153060" at line 11, column 5]
---- 1<#-- CAROSELLO MULTITIPO 05/07/2023--> 2 3<#assign showTemplate = false /> 4<#assign emptyEntries = false /> 5 6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 8 9<#if entries?has_content> 10 <#assign showTemplate = true /> 11 <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 12 <#assign eventoStructureKey = structureService.getStructureEventoKey()> 13 <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 14 <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 15 <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 16 <#assign categoriaStructureKey = "34431"> 17 18 <#assign layout = themeDisplay.getLayout()/> 19 <#assign currentSite = themeDisplay.getSiteGroup()/> 20 <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 21 <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 22 23 <#assign count = 1/> 24 <#list entries as curEntry> 25 <#assign assetRenderer = curEntry.getAssetRenderer()/> 26 <#if validator.isNotNull(assetRenderer)> 27 <#assign className = assetRenderer.getClassName() /> 28 <#if className == "com.liferay.journal.model.JournalArticle"> 29 <#assign ja = assetRenderer.getArticle() /> 30 <#assign structureId = ja.getStructureId() /> 31 32 <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey 33 && structureId != itinerarioStructureKey && structureId != ricettaStructureKey 34 && structureId != luogoStructureKey && structureId != categoriaStructureKey> 35 <#assign showTemplate = false /> 36 </#if> 37 <#else> 38 <#assign showTemplate = false /> 39 </#if> 40 <#else> 41 <#assign showTemplate = false /> 42 </#if> 43 </#list> 44<#else> 45 <#assign emptyEntries = true /> 46</#if> 47 48<#if !emptyEntries> 49 <#if showTemplate> 50 <div class="container mb-5"> 51 <div class="row"> 52 <div class="col-12"> 53 <div class="tab-content category-offers" id="offer-tab-content"> 54 <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 55 <div class="row"> 56 <div class="col-12"> 57 <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{"nav":true,"navText":["<i class='icon-angle-left'></i>","<i class='icon-angle-right'></i>"],"autoplay":false,"autoplayHoverPause":true,"responsiveClass":true,"responsive":{"0":{"items":1,"slideBy":1},"480":{"items":2,"slideBy":2},"768":{"items":3,"slideBy":3}}}"> 58 59 <#list entries as curEntry> 60 <#assign assetRenderer = curEntry.getAssetRenderer()/> 61 <#assign ja = assetRenderer.getArticle() /> 62 <#assign structureId = ja.getStructureId() /> 63 <#assign langId = themeDisplay.getLanguageId() /> 64 <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 65 66 <#assign colorebordo = "border-bottom-yellow"> 67 <#assign subpage = "luogo"> 68 <#assign destinationPage = "" /> 69 <#assign url = ""> 70 <#assign textAltImg = "" /> 71 <#assign titolo = ""> 72 <#assign sottotitolo_abstract = ""> 73 74 <#if structureId == categoriaStructureKey> 75 76 <#assign document = saxReaderUtil.read(contentByLocale) > 77 <#assign rootElement = document.getRootElement()> 78 79 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 80 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 81 82 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 83 <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 84 85 <#assign colorebordo = "border-bottom-yellow"> 86 <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 87 <#if xPathColorBorder?? && xPathColorBorder?has_content 88 && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 89 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 90 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 91 <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 92 </#if> 93 94 <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 95 <#if xPathImmagine?? && xPathImmagine?has_content > 96 <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 97 <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 98 99 <#attempt> 100 <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 101 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 102 <#recover> 103 </#attempt> 104 </#if> 105 </#if> 106 107 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 108 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 109 110 <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 111 <#assign linkToPage = "" > 112 113 <#if xPathLinkAPagina?? > 114 <#if xPathLinkAPagina?has_content > 115 <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 116 <#assign linkAPaginaSplitted = linkAPagina?split("@") > 117 <#assign layoutIdPage = linkAPaginaSplitted?first > 118 <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 119 <#assign groupIdPage = linkAPaginaSplitted?last > 120 <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 121 122 <#if layoutIdPage != 0 > 123 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 124 <#assign contentPage = ""> 125 <#attempt> 126 <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 127 <#if contentPage?? > 128 <#assign linkToPage = contentPage.getFriendlyURL(locale) > 129 <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 130 </#if> 131 <#recover> 132 </#attempt> 133 </#if> 134 135 </#if> 136 </#if> 137 138 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 139 <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 140 <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 141 <#assign linkToPage = linkToPage?trim> 142 </#if> 143 144 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 145 <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 146 <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 147 <#assign linkToPage = linkToPage?trim> 148 </#if> 149 <#assign destinationPage = linkToPage> 150 <#else> 151 <#if structureId == attrattoreStructureKey> 152 <#assign subpage = "attrazione"> 153 <#elseif structureId == eventoStructureKey> 154 <#assign subpage = "evento"> 155 <#elseif structureId == itinerarioStructureKey> 156 <#assign subpage = "itinerario"> 157 <#elseif structureId == ricettaStructureKey> 158 <#assign subpage = "ricetta"> 159 <#elseif structureId == luogoStructureKey> 160 <#assign subpage = "luogo"> 161 <#else> 162 </#if> 163 <#--CONTENT BY DEFAULT LOCALE--> 164 <#attempt> 165 <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 166 <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 167 <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 168 <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 169 <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 170 <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 171 <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 172 </#if> 173 </#if> 174 <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 175 <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 176 <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 177 <#if immagineListaByDefaultLocale?trim?has_content> 178 <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 179 <#else> 180 <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 181 </#if> 182 </#if> 183 <#if validator.isNotNull(immagineByDefaultLocale)> 184 <#attempt> 185 <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 186 <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 187 <#recover> 188 <#assign url = ""> 189 </#attempt> 190 </#if> 191 <#recover> 192 </#attempt> 193 <#--CONTENT BY DEFAULT LOCALE--> 194 195 <#assign urlTitle = ja.getUrlTitle() /> 196 <#assign document = saxReaderUtil.read(contentByLocale) > 197 <#assign rootElement = document.getRootElement()> 198 <#assign xPathTitolo = "" /> 199 <#assign xPathSottotitolo_abstract = "" /> 200 <#assign xPathImmagineBanner = "" /> 201 <#assign xPathTextAltImg = "" /> 202 <#assign immagineLista = ""> 203 <#assign textAltImgLista = ""> 204 <#assign immagine = ""> 205 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 206 <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 207 208 <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 209 <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 210 <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 211 <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 212 </#if> 213 </#if> 214 <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 215 <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 216 <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 217 <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 218 </#if> 219 </#if> 220 221 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 222 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 223 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 224 <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 225 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 226 <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()> 227 228 <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 229 <#if !textAltImg?has_content> 230 <#assign textAltImg = titolo> 231 </#if> 232 233 <#if immagineLista?trim?has_content> 234 <#assign immagine = immagineLista> 235 <#assign textAltImg = textAltImgLista> 236 <#else> 237 <#assign immagine = immagineBanner> 238 </#if> 239 240 <#if validator.isNotNull(immagine)> 241 <#attempt> 242 <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 243 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 244 <#recover> 245 </#attempt> 246 </#if> 247 </#if> 248 <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 249 <div class="row"> 250 <div class="card"> 251 <a href="${destinationPage}"> 252 <img class="card-img-top" src="${url}" alt="${textAltImg}"> 253 <div class="card-body"> 254 <h3 class="card-title">${titolo} 255 </h3> 256 <p class="card-text"> 257 ${sottotitolo_abstract} 258 </p> 259 </div> 260 </a> 261 </div> 262 </div> 263 </div> 264 </#list> 265 </div> 266 </div> 267 </div> 268 </div> 269 </div> 270 </div> 271 </div> 272 </div> 273 <#else> 274 <div style="border: 1px solid red; padding:20px;"> 275 <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 276 <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 277 </div> 278 </#if> 279 280</#if> The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey() [in template "20099#20135#153060" at line 11, column 39]
----
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 attrattoreStructureKey = stru... [in template "20099#20135#153060" at line 11, column 5]
---- 1<#-- CAROSELLO MULTITIPO 05/07/2023--> 2 3<#assign showTemplate = false /> 4<#assign emptyEntries = false /> 5 6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 8 9<#if entries?has_content> 10 <#assign showTemplate = true /> 11 <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 12 <#assign eventoStructureKey = structureService.getStructureEventoKey()> 13 <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 14 <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 15 <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 16 <#assign categoriaStructureKey = "34431"> 17 18 <#assign layout = themeDisplay.getLayout()/> 19 <#assign currentSite = themeDisplay.getSiteGroup()/> 20 <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 21 <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 22 23 <#assign count = 1/> 24 <#list entries as curEntry> 25 <#assign assetRenderer = curEntry.getAssetRenderer()/> 26 <#if validator.isNotNull(assetRenderer)> 27 <#assign className = assetRenderer.getClassName() /> 28 <#if className == "com.liferay.journal.model.JournalArticle"> 29 <#assign ja = assetRenderer.getArticle() /> 30 <#assign structureId = ja.getStructureId() /> 31 32 <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey 33 && structureId != itinerarioStructureKey && structureId != ricettaStructureKey 34 && structureId != luogoStructureKey && structureId != categoriaStructureKey> 35 <#assign showTemplate = false /> 36 </#if> 37 <#else> 38 <#assign showTemplate = false /> 39 </#if> 40 <#else> 41 <#assign showTemplate = false /> 42 </#if> 43 </#list> 44<#else> 45 <#assign emptyEntries = true /> 46</#if> 47 48<#if !emptyEntries> 49 <#if showTemplate> 50 <div class="container mb-5"> 51 <div class="row"> 52 <div class="col-12"> 53 <div class="tab-content category-offers" id="offer-tab-content"> 54 <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 55 <div class="row"> 56 <div class="col-12"> 57 <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{"nav":true,"navText":["<i class='icon-angle-left'></i>","<i class='icon-angle-right'></i>"],"autoplay":false,"autoplayHoverPause":true,"responsiveClass":true,"responsive":{"0":{"items":1,"slideBy":1},"480":{"items":2,"slideBy":2},"768":{"items":3,"slideBy":3}}}"> 58 59 <#list entries as curEntry> 60 <#assign assetRenderer = curEntry.getAssetRenderer()/> 61 <#assign ja = assetRenderer.getArticle() /> 62 <#assign structureId = ja.getStructureId() /> 63 <#assign langId = themeDisplay.getLanguageId() /> 64 <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 65 66 <#assign colorebordo = "border-bottom-yellow"> 67 <#assign subpage = "luogo"> 68 <#assign destinationPage = "" /> 69 <#assign url = ""> 70 <#assign textAltImg = "" /> 71 <#assign titolo = ""> 72 <#assign sottotitolo_abstract = ""> 73 74 <#if structureId == categoriaStructureKey> 75 76 <#assign document = saxReaderUtil.read(contentByLocale) > 77 <#assign rootElement = document.getRootElement()> 78 79 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 80 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 81 82 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 83 <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 84 85 <#assign colorebordo = "border-bottom-yellow"> 86 <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 87 <#if xPathColorBorder?? && xPathColorBorder?has_content 88 && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 89 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 90 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 91 <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 92 </#if> 93 94 <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 95 <#if xPathImmagine?? && xPathImmagine?has_content > 96 <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 97 <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 98 99 <#attempt> 100 <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 101 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 102 <#recover> 103 </#attempt> 104 </#if> 105 </#if> 106 107 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 108 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 109 110 <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 111 <#assign linkToPage = "" > 112 113 <#if xPathLinkAPagina?? > 114 <#if xPathLinkAPagina?has_content > 115 <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 116 <#assign linkAPaginaSplitted = linkAPagina?split("@") > 117 <#assign layoutIdPage = linkAPaginaSplitted?first > 118 <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 119 <#assign groupIdPage = linkAPaginaSplitted?last > 120 <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 121 122 <#if layoutIdPage != 0 > 123 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 124 <#assign contentPage = ""> 125 <#attempt> 126 <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 127 <#if contentPage?? > 128 <#assign linkToPage = contentPage.getFriendlyURL(locale) > 129 <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 130 </#if> 131 <#recover> 132 </#attempt> 133 </#if> 134 135 </#if> 136 </#if> 137 138 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 139 <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 140 <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 141 <#assign linkToPage = linkToPage?trim> 142 </#if> 143 144 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 145 <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 146 <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 147 <#assign linkToPage = linkToPage?trim> 148 </#if> 149 <#assign destinationPage = linkToPage> 150 <#else> 151 <#if structureId == attrattoreStructureKey> 152 <#assign subpage = "attrazione"> 153 <#elseif structureId == eventoStructureKey> 154 <#assign subpage = "evento"> 155 <#elseif structureId == itinerarioStructureKey> 156 <#assign subpage = "itinerario"> 157 <#elseif structureId == ricettaStructureKey> 158 <#assign subpage = "ricetta"> 159 <#elseif structureId == luogoStructureKey> 160 <#assign subpage = "luogo"> 161 <#else> 162 </#if> 163 <#--CONTENT BY DEFAULT LOCALE--> 164 <#attempt> 165 <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 166 <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 167 <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 168 <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 169 <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 170 <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 171 <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 172 </#if> 173 </#if> 174 <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 175 <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 176 <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 177 <#if immagineListaByDefaultLocale?trim?has_content> 178 <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 179 <#else> 180 <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 181 </#if> 182 </#if> 183 <#if validator.isNotNull(immagineByDefaultLocale)> 184 <#attempt> 185 <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 186 <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 187 <#recover> 188 <#assign url = ""> 189 </#attempt> 190 </#if> 191 <#recover> 192 </#attempt> 193 <#--CONTENT BY DEFAULT LOCALE--> 194 195 <#assign urlTitle = ja.getUrlTitle() /> 196 <#assign document = saxReaderUtil.read(contentByLocale) > 197 <#assign rootElement = document.getRootElement()> 198 <#assign xPathTitolo = "" /> 199 <#assign xPathSottotitolo_abstract = "" /> 200 <#assign xPathImmagineBanner = "" /> 201 <#assign xPathTextAltImg = "" /> 202 <#assign immagineLista = ""> 203 <#assign textAltImgLista = ""> 204 <#assign immagine = ""> 205 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 206 <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 207 208 <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 209 <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 210 <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 211 <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 212 </#if> 213 </#if> 214 <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 215 <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 216 <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 217 <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 218 </#if> 219 </#if> 220 221 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 222 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 223 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 224 <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 225 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 226 <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()> 227 228 <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 229 <#if !textAltImg?has_content> 230 <#assign textAltImg = titolo> 231 </#if> 232 233 <#if immagineLista?trim?has_content> 234 <#assign immagine = immagineLista> 235 <#assign textAltImg = textAltImgLista> 236 <#else> 237 <#assign immagine = immagineBanner> 238 </#if> 239 240 <#if validator.isNotNull(immagine)> 241 <#attempt> 242 <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 243 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 244 <#recover> 245 </#attempt> 246 </#if> 247 </#if> 248 <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 249 <div class="row"> 250 <div class="card"> 251 <a href="${destinationPage}"> 252 <img class="card-img-top" src="${url}" alt="${textAltImg}"> 253 <div class="card-body"> 254 <h3 class="card-title">${titolo} 255 </h3> 256 <p class="card-text"> 257 ${sottotitolo_abstract} 258 </p> 259 </div> 260 </a> 261 </div> 262 </div> 263 </div> 264 </#list> 265 </div> 266 </div> 267 </div> 268 </div> 269 </div> 270 </div> 271 </div> 272 </div> 273 <#else> 274 <div style="border: 1px solid red; padding:20px;"> 275 <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 276 <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 277 </div> 278 </#if> 279 280</#if> The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey() [in template "20099#20135#153060" at line 11, column 39]
----
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 attrattoreStructureKey = stru... [in template "20099#20135#153060" at line 11, column 5]
---- 1<#-- CAROSELLO MULTITIPO 05/07/2023--> 2 3<#assign showTemplate = false /> 4<#assign emptyEntries = false /> 5 6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 8 9<#if entries?has_content> 10 <#assign showTemplate = true /> 11 <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 12 <#assign eventoStructureKey = structureService.getStructureEventoKey()> 13 <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 14 <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 15 <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 16 <#assign categoriaStructureKey = "34431"> 17 18 <#assign layout = themeDisplay.getLayout()/> 19 <#assign currentSite = themeDisplay.getSiteGroup()/> 20 <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 21 <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 22 23 <#assign count = 1/> 24 <#list entries as curEntry> 25 <#assign assetRenderer = curEntry.getAssetRenderer()/> 26 <#if validator.isNotNull(assetRenderer)> 27 <#assign className = assetRenderer.getClassName() /> 28 <#if className == "com.liferay.journal.model.JournalArticle"> 29 <#assign ja = assetRenderer.getArticle() /> 30 <#assign structureId = ja.getStructureId() /> 31 32 <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey 33 && structureId != itinerarioStructureKey && structureId != ricettaStructureKey 34 && structureId != luogoStructureKey && structureId != categoriaStructureKey> 35 <#assign showTemplate = false /> 36 </#if> 37 <#else> 38 <#assign showTemplate = false /> 39 </#if> 40 <#else> 41 <#assign showTemplate = false /> 42 </#if> 43 </#list> 44<#else> 45 <#assign emptyEntries = true /> 46</#if> 47 48<#if !emptyEntries> 49 <#if showTemplate> 50 <div class="container mb-5"> 51 <div class="row"> 52 <div class="col-12"> 53 <div class="tab-content category-offers" id="offer-tab-content"> 54 <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 55 <div class="row"> 56 <div class="col-12"> 57 <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{"nav":true,"navText":["<i class='icon-angle-left'></i>","<i class='icon-angle-right'></i>"],"autoplay":false,"autoplayHoverPause":true,"responsiveClass":true,"responsive":{"0":{"items":1,"slideBy":1},"480":{"items":2,"slideBy":2},"768":{"items":3,"slideBy":3}}}"> 58 59 <#list entries as curEntry> 60 <#assign assetRenderer = curEntry.getAssetRenderer()/> 61 <#assign ja = assetRenderer.getArticle() /> 62 <#assign structureId = ja.getStructureId() /> 63 <#assign langId = themeDisplay.getLanguageId() /> 64 <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 65 66 <#assign colorebordo = "border-bottom-yellow"> 67 <#assign subpage = "luogo"> 68 <#assign destinationPage = "" /> 69 <#assign url = ""> 70 <#assign textAltImg = "" /> 71 <#assign titolo = ""> 72 <#assign sottotitolo_abstract = ""> 73 74 <#if structureId == categoriaStructureKey> 75 76 <#assign document = saxReaderUtil.read(contentByLocale) > 77 <#assign rootElement = document.getRootElement()> 78 79 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 80 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 81 82 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 83 <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 84 85 <#assign colorebordo = "border-bottom-yellow"> 86 <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 87 <#if xPathColorBorder?? && xPathColorBorder?has_content 88 && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 89 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 90 && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 91 <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 92 </#if> 93 94 <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 95 <#if xPathImmagine?? && xPathImmagine?has_content > 96 <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 97 <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 98 99 <#attempt> 100 <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 101 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 102 <#recover> 103 </#attempt> 104 </#if> 105 </#if> 106 107 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 108 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 109 110 <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 111 <#assign linkToPage = "" > 112 113 <#if xPathLinkAPagina?? > 114 <#if xPathLinkAPagina?has_content > 115 <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 116 <#assign linkAPaginaSplitted = linkAPagina?split("@") > 117 <#assign layoutIdPage = linkAPaginaSplitted?first > 118 <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 119 <#assign groupIdPage = linkAPaginaSplitted?last > 120 <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 121 122 <#if layoutIdPage != 0 > 123 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 124 <#assign contentPage = ""> 125 <#attempt> 126 <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 127 <#if contentPage?? > 128 <#assign linkToPage = contentPage.getFriendlyURL(locale) > 129 <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 130 </#if> 131 <#recover> 132 </#attempt> 133 </#if> 134 135 </#if> 136 </#if> 137 138 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 139 <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 140 <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 141 <#assign linkToPage = linkToPage?trim> 142 </#if> 143 144 <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 145 <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 146 <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 147 <#assign linkToPage = linkToPage?trim> 148 </#if> 149 <#assign destinationPage = linkToPage> 150 <#else> 151 <#if structureId == attrattoreStructureKey> 152 <#assign subpage = "attrazione"> 153 <#elseif structureId == eventoStructureKey> 154 <#assign subpage = "evento"> 155 <#elseif structureId == itinerarioStructureKey> 156 <#assign subpage = "itinerario"> 157 <#elseif structureId == ricettaStructureKey> 158 <#assign subpage = "ricetta"> 159 <#elseif structureId == luogoStructureKey> 160 <#assign subpage = "luogo"> 161 <#else> 162 </#if> 163 <#--CONTENT BY DEFAULT LOCALE--> 164 <#attempt> 165 <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 166 <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 167 <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 168 <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 169 <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 170 <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 171 <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 172 </#if> 173 </#if> 174 <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 175 <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 176 <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 177 <#if immagineListaByDefaultLocale?trim?has_content> 178 <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 179 <#else> 180 <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 181 </#if> 182 </#if> 183 <#if validator.isNotNull(immagineByDefaultLocale)> 184 <#attempt> 185 <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 186 <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 187 <#recover> 188 <#assign url = ""> 189 </#attempt> 190 </#if> 191 <#recover> 192 </#attempt> 193 <#--CONTENT BY DEFAULT LOCALE--> 194 195 <#assign urlTitle = ja.getUrlTitle() /> 196 <#assign document = saxReaderUtil.read(contentByLocale) > 197 <#assign rootElement = document.getRootElement()> 198 <#assign xPathTitolo = "" /> 199 <#assign xPathSottotitolo_abstract = "" /> 200 <#assign xPathImmagineBanner = "" /> 201 <#assign xPathTextAltImg = "" /> 202 <#assign immagineLista = ""> 203 <#assign textAltImgLista = ""> 204 <#assign immagine = ""> 205 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 206 <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 207 208 <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 209 <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 210 <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 211 <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 212 </#if> 213 </#if> 214 <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 215 <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 216 <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 217 <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 218 </#if> 219 </#if> 220 221 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 222 <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 223 <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 224 <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 225 <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 226 <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()> 227 228 <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 229 <#if !textAltImg?has_content> 230 <#assign textAltImg = titolo> 231 </#if> 232 233 <#if immagineLista?trim?has_content> 234 <#assign immagine = immagineLista> 235 <#assign textAltImg = textAltImgLista> 236 <#else> 237 <#assign immagine = immagineBanner> 238 </#if> 239 240 <#if validator.isNotNull(immagine)> 241 <#attempt> 242 <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 243 <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 244 <#recover> 245 </#attempt> 246 </#if> 247 </#if> 248 <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 249 <div class="row"> 250 <div class="card"> 251 <a href="${destinationPage}"> 252 <img class="card-img-top" src="${url}" alt="${textAltImg}"> 253 <div class="card-body"> 254 <h3 class="card-title">${titolo} 255 </h3> 256 <p class="card-text"> 257 ${sottotitolo_abstract} 258 </p> 259 </div> 260 </a> 261 </div> 262 </div> 263 </div> 264 </#list> 265 </div> 266 </div> 267 </div> 268 </div> 269 </div> 270 </div> 271 </div> 272 </div> 273 <#else> 274 <div style="border: 1px solid red; padding:20px;"> 275 <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 276 <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 277 </div> 278 </#if> 279 280</#if> Santuzza is not only the patroness of Palermo. Among the many ethnic groups that have adopted Rosalia, the Tamils are certainly the most devout: the community is truly large, the most numerous among those present in Italy (with about 8 thousand people, Palermo has the third largest number of resident Tamils in the world). Most of the families come from Sri Lanka and took refuge in Palermo to escape the bloody civil war that broke out in their homeland.




Progetto cofinanaziato dall'Unione Europea - Fondi Strutturali e di Investimento Europei - Programma Operativo Città Metropolitane 2014-2020