Affacciati sull'Umbria
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") [in template "20099#20135#4061450" at line 13, column 34]
----
Tip: If the failing expression is known to 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 assetLinkLocalService = servi... [in template "20099#20135#4061450" at line 13, column 1]
----
1<#--
2Template ID: 4061451
3Template Key: 4061450
4Type: display
5Mode: None
6-->
7
8<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")>
9
10<#assign eventoStructureKey = structureService.getStructureEventoKey()>
11
12<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
13<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
14<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
15<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
16
17<#assign currentArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
18
19<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
20<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
21<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
22<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
23
24<#assign eventi = [] >
25<#assign altri = [] >
26
27
28<#list currentArticleRelatedLinks as related_entry>
29 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
30 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
31 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
32 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
33 <#assign relatedArticleId = relatedArticle.getArticleId() />
34 <#if relatedArticle.DDMStructureKey?has_content && relatedArticle.DDMStructureKey == eventoStructureKey >
35 <#assign eventi = eventi + [relatedArticle]>
36 <#else>
37 <#assign altri = altri + [relatedArticle]>
38 </#if>
39</#list>
40
41<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") >
42
43<#assign widthCardImg = propsUtil.get("image.scale.allpage") />
44
45<div class="container-fluid">
46 <div class="row">
47 <div class="header-block header-under-nav header-block-image-layer header-block-1 header-block-image">
48 <#if image.getSiblings()?has_content>
49 <#assign cur_image = image.getSiblings()[0] />
50 <#if cur_image.getData()?? && cur_image.getData() != "" >
51 <img class="bg" alt="${cur_image.getAttribute("alt")}" data-fileentryid="${cur_image.getAttribute("fileEntryId")}" src="${cur_image.getData()}" />
52 </#if>
53 </#if>
54 <div class="container title">
55 <div class="row">
56 <div class="col-12">
57 <div class="title-1">${title.getData()}</div>
58 </div>
59 </div>
60 </div>
61 </div>
62 </div>
63</div>
64<div class="container-fluid bg-white">
65 <div class="row">
66 <div class="container">
67 <div class="row">
68 <div class="col-12 col-md-10 offset-md-1 padding-top-em-2 padding-bottom-em-2">
69 <div class="text-block">
70 <div class="title-2">${subtitle.getData()}</div>
71 <div class="text">${text.getData()}</div>
72 </div>
73 </div>
74 </div>
75 </div>
76 </div>
77</div>
78<div class="container-fluid">
79 <div class="row">
80 <div class="map map-container map-banner">
81 <div class="map-content">
82 <div class="leaflet-interactive-map map-summary-territories" id="map-results" data-kml="../undefined"></div>
83 </div>
84 </div>
85 </div>
86</div>
87
88
89<#if altri?size gt 0>
90 <div class="container-fluid bg-white">
91 <div class="row">
92 <div class="container padding-top-em-3 padding-bottom-em-5">
93 <div class="row">
94 <div class="col-12">
95 <div class="d-flex flex-justify-content-between flex-align-items-baseline">
96 <div class="text text-top-events"><@liferay.language key="label.vivi.il.territorio" /></div>
97 </div>
98 </div>
99 <div class="col-12">
100 <div class="carousel-container carousel-no-ctrl transparent margin-top-em-1 margin-bottom-em-3 tns-overflow-show carousel-draggable">
101 <div class="tns-carousel tns-carousel-no-ctrl">
102 <#list altri as altro>
103 <#assign langId = themeDisplay.getLanguageId() />
104 <#assign contentByLocale = altro.getContentByLocale(themeDisplay.getLanguageId()) />
105 <#assign document = saxReaderUtil.read(contentByLocale) >
106 <#assign rootElement = document.getRootElement()>
107
108 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
109 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
110
111 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
112 <#assign relatedSottotitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
113
114 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
115 <#assign relatedImmagineBanner = "" >
116
117 <#if xPathImmagineBanner?? && xPathImmagineBanner?has_content>
118 <#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content>
119 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
120 </#if>
121 </#if>
122
123 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
124 <#assign relatedTestoAlternativoImmagineBanner = "" >
125 <#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content>
126 <#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content>
127 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
128 </#if>
129 </#if>
130
131 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
132 <#assign immagineBannerJson = relatedImmagineBanner?eval >
133 <#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
134 <#else>
135 <#assign url = "" >
136 </#if>
137
138 <#assign xPathCoordinatePrincipali = saxReaderUtil.createXPath("dynamic-element[@name='coordinate_principali']")>
139 <#assign relatedCoordinatePrincipali = xPathCoordinatePrincipali.selectSingleNode(rootElement).getStringValue()>
140
141 <#if relatedCoordinatePrincipali?has_content && relatedCoordinatePrincipali?trim?length gt 0 >
142 <#assign coordinatePrincipaliRelatedJson = relatedCoordinatePrincipali?eval >
143 <#assign latitudeRelated = coordinatePrincipaliRelatedJson.latitude >
144 <#assign longitudeRelated = coordinatePrincipaliRelatedJson.longitude >
145 <#else>
146 <#assign latitudeRelated = "" >
147 <#assign longitudeRelated = "" >
148 </#if>
149
150 <#assign resourcePrimKey = altro.getResourcePrimKey() />
151 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
152 <#assign assetEntryId = assetEntry.getEntryId() />
153
154 <#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) >
155
156 <#assign categoryNames = [] >
157
158 <#list categories as category>
159 <#if vocabularyIdUmbria == category.getVocabularyId() >
160 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
161 </#if>
162 </#list>
163
164 <div>
165 <div class="card card-1 card-offerta card-geolocalized card-territory" data-lat="${latitudeRelated}" data-lng="${longitudeRelated}" data-url="/-/${altro.getUrlTitle()}" data-title="${relatedTitolo}">
166 <a class="card-link" href="/-/${altro.getUrlTitle()}"></a>
167 <div class="card-header">
168 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
169 <img src="${url}" alt="${relatedTestoAlternativoImmagineBanner}">
170 </div>
171 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="" data-id="${altro.getArticleId()}" data-tom="false"><i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
172 <div class="card-header-info">
173 <#list categoryNames as categoryName>
174 <div class="badge badge-red">${categoryName}</div>
175 <a class="header-title title-5" href="#"></a>
176 </#list>
177 </div>
178 </div>
179 <div class="card-body">
180 <div class="card-body-title title-4">${relatedTitolo}</div>
181 <div class="card-body-subtitle">${relatedSottotitolo}</div>
182 </div>
183 <div class="card-info card-info-readmore">
184 <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div>
185 </div>
186 <div class="card-info">
187 </div>
188 </div>
189 </div>
190 </#list>
191 </div>
192 </div>
193 </div>
194 </div>
195 </div>
196 </div>
197 </div>
198</#if>
199
200
201<#if eventi?size gt 0 >
202 <div class="container-fluid bg-gray">
203 <div class="container padding-top-em-3 padding-bottom-em-5">
204 <div class="row">
205 <div class="col-12">
206 <div class="d-flex flex-justify-content-between flex-align-items-baseline">
207 <div class="text text-top-events"><@liferay.language key="label.eventi" /></div>
208 </div>
209 </div>
210 <div class="col-12">
211 <div class="carousel-container carousel-no-ctrl transparent margin-top-em-1 margin-bottom-em-3 tns-overflow-show carousel-draggable">
212 <div class="tns-carousel tns-carousel-no-ctrl">
213 <#list eventi as evento >
214 <#assign langId = themeDisplay.getLanguageId() />
215 <#assign contentByLocale = evento.getContentByLocale(themeDisplay.getLanguageId()) />
216 <#assign document = saxReaderUtil.read(contentByLocale) >
217 <#assign rootElement = document.getRootElement()>
218
219 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
220 <#assign relatedEventoTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
221
222 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
223 <#assign relatedEventoSottotitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
224
225 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
226 <#assign relatedImmagineBanner = "" >
227
228 <#if xPathImmagineBanner?? && xPathImmagineBanner?has_content>
229 <#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content>
230 <#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()>
231 </#if>
232 </#if>
233
234 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
235 <#assign relatedEventoTestoAlternativoImmagineBanner = "" >
236 <#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content>
237 <#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content>
238 <#assign relatedEventoTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
239 </#if>
240 </#if>
241
242 <#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 >
243 <#assign immagineBannerJson = relatedImmagineBanner?eval >
244 <#assign urlEvento = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}">
245 <#else>
246 <#assign urlEvento = "" >
247 </#if>
248
249 <#assign resourcePrimKey = evento.getResourcePrimKey() />
250 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
251 <#assign assetEntryId = assetEntry.getEntryId() />
252
253 <#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) >
254
255 <#assign categoryNames = [] >
256
257 <#list categories as category>
258 <#if vocabularyIdUmbria == category.getVocabularyId() >
259 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
260 </#if>
261 </#list>
262
263 <#assign xPathCoordinatePrincipali = saxReaderUtil.createXPath("dynamic-element[@name='coordinate_principali']")>
264 <#assign relatedCoordinatePrincipali = xPathCoordinatePrincipali.selectSingleNode(rootElement).getStringValue()>
265
266 <#if relatedCoordinatePrincipali?has_content && relatedCoordinatePrincipali?trim?length gt 0 >
267 <#assign coordinatePrincipaliRelatedJson = relatedCoordinatePrincipali?eval >
268 <#assign latitudeEventoRelated = coordinatePrincipaliRelatedJson.latitude >
269 <#assign longitudeEventoRelated = coordinatePrincipaliRelatedJson.longitude >
270 <#else>
271 <#assign latitudeEventoRelated = "" >
272 <#assign longitudeEventoRelated = "" >
273 </#if>
274
275 <div>
276 <div class="card card-1 card-offerta card-geolocalized card-territory" data-lat="${latitudeEventoRelated}" data-lng="${longitudeEventoRelated}" data-url="/-/${evento.getUrlTitle()}" data-title="${relatedEventoTitolo}">
277 <a class="card-link" href="/-/${evento.getUrlTitle()}"></a>
278 <div class="card-header">
279 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
280 <img src="${urlEvento}" alt="${relatedEventoTestoAlternativoImmagineBanner}">
281 </div>
282 <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="" data-id="${evento.getArticleId()}" data-tom="false"><i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a>
283 <div class="card-header-info">
284 <#list categoryNames as categoryName>
285 <div class="badge badge-red">${categoryName}</div>
286 <a class="header-title title-5" href="#"></a>
287 </#list>
288 </div>
289 </div>
290 <div class="card-body">
291 <div class="card-body-title title-4">${relatedEventoTitolo}</div>
292 <div class="card-body-subtitle">${relatedEventoSottotitolo}</div>
293 </div>
294 <div class="card-info card-info-readmore">
295 <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div>
296 </div>
297 <div class="card-info">
298 </div>
299 </div>
300 </div>
301 </#list>
302 </div>
303 </div>
304 </div>
305 </div>
306 </div>
307 </div>
308</#if>