Si è verificato un errore nell'elaborarazione del modello.
Java method "com.sun.proxy.$Proxy83.getLayout(long, boolean, long)" threw an exception when invoked on com.sun.proxy.$Proxy83 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@246a2f30"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: paginaPadre = LayoutLocalService.getL... [in template "20095#20121#35030" at line 21, column 5] ----
1<#-- V3.3 -->
2
3<#setting locale = themeDisplay.getLocale() />
4<#setting time_zone = "Europe/Rome" />
5
6<#assign
7 FriendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")
8 ClassNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameService")
9 LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
10 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
11 journalArticleId = .vars['reserved-article-id'].data
12 journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]
13 assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]
14 articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)
15 categorie_notizia = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)
16 AssetVocabularyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]
17/>
18
19<#-- gestione dei breadcrumbs -->
20<#assign
21 paginaPadre = LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number)
22 ancestors = paginaPadre.getAncestors()
23 sorted_ancestors = []
24/>
25
26<#list ancestors as parente>
27 <#assign
28 sorted_ancestors +=
29 [{
30 "name": parente.getName(themeDisplay.getLanguageId()),
31 "ancestors": parente.getAncestors()?size,
32 "data": parente
33 }]
34 />
35</#list>
36
37<div class="container finmatica-breadcrumb-container mb-4">
38 <div class="row justify-content-center">
39 <div class="col-12 col-lg-10">
40 <div class="cmp-breadcrumbs" role="navigation">
41 <nav class="breadcrumb-container" aria-label="breadcrumb">
42 <ol class="breadcrumb p-0" data-element="breadcrumb">
43 <li class="breadcrumb-item"><a
44 href="${themeDisplay.getThemeSetting('Home URL')}">
45 <span class="breadcrumb-text-truncate">Home</span>
46 </a>
47 <span class="separator">/</span>
48 </li>
49 <#list sorted_ancestors?sort_by("ancestors") as ancestor>
50 <li class="breadcrumb-item"><a
51 href="/portal${ancestor.data.getFriendlyURL()}">
52 <span class="breadcrumb-text-truncate">
53 ${ancestor.name}
54 </span>
55 </a>
56 <span class="separator">/</span>
57 </li>
58 </#list>
59 <li class="breadcrumb-item"><a
60 href="/portal${paginaPadre.getFriendlyURL()}">
61 <span class="breadcrumb-text-truncate">
62 ${paginaPadre.getName(themeDisplay.getLanguageId())}
63 </span>
64 </a>
65 <span class="separator">/</span>
66 </li>
67 <li class="breadcrumb-item">${Titolo.getData()}</li>
68 </ol>
69 </nav>
70 </div>
71 </div>
72 </div>
73</div>
74
75<#assign argomenti = [] />
76<#list categorie_notizia as categoryEntry>
77 <#assign
78 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
79 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
80 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
81 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
82 cat_name = categoryEntry.name
83 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
84 cat_url = "/portal/web/guest/${friendlyUrlList[0].urlTitle}"
85 />
86 <#if
87 vocabulary.getDescription() == "tassonomia argomenti"
88 || vocabulary.getTitle()?lower_case == "tassonomia argomento"
89 || vocabulary.getName()?lower_case == "tassonomia argomento"
90 >
91 <#assign
92 argomenti +=
93 [{
94 "name": cat_localized_name,
95 "url": cat_url
96 }]
97 />
98 </#if>
99</#list>
100
101<#-- GET PERSONE NOTIZIA -->
102<#assign persone_Notizia = [] />
103<#if Persone.getData()?has_content>
104 <#list Persone.getSiblings() as cur_Persone>
105 <#assign
106 cur_persona_data = jsonFactoryUtil.createJSONObject(cur_Persone.getData())
107 relatedPersone = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_persona_data.classPK?number)
108 />
109 <#if relatedPersone?? && relatedPersone?size gt 0>
110 <#assign
111 relatedPersona = relatedPersone[0]
112 document = relatedPersona.getDocumentByLocale(themeDisplay.getLocale())
113 rootElement = document.getRootElement()
114 />
115 <#list rootElement.elements() as dynamicElement>
116 <#if dynamicElement.attributeValue("field-reference") == "Nome">
117 <#assign nome_persona = dynamicElement.element("dynamic-content").getText() />
118 <#elseif dynamicElement.attributeValue("field-reference") == "Cognome">
119 <#assign cognome_persona = dynamicElement.element("dynamic-content").getText() />
120 </#if>
121 </#list>
122 <#assign
123 persone_Notizia +=
124 [{
125 "nome": nome_persona + " " + cognome_persona,
126 "url": "${cur_Persone.getFriendlyUrl()}"
127 }]
128 />
129 </#if>
130 </#list>
131</#if>
132
133<#-- SEZIONE GET LUOGHI -->
134 <#assign luoghi_data = [] />
135 <#if Luoghi.getData()?has_content>
136 <#list Luoghi.getSiblings() as cur_luogo>
137 <#assign
138 cur_luogo_data = jsonFactoryUtil.createJSONObject(cur_luogo.getData())
139 relatedLuoghi = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_luogo_data.classPK?number)
140 />
141 <#if relatedLuoghi?? && relatedLuoghi?size gt 0>
142 <#assign
143 relatedLuogo = relatedLuoghi[0]
144 document = relatedLuogo.getDocumentByLocale(themeDisplay.getLocale())
145 rootElement = document.getRootElement()
146 nome_cur_luogo = ""
147 indirizzo_cur_luogo = ""
148 orari_cur_luogo = ""
149 immagine_cur_luogo = ""
150 urlImmagine_cur_luogo = ""
151 />
152 <#list rootElement.elements() as dynamicElement>
153 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
154 <#assign nome_cur_luogo = dynamicElement.element("dynamic-content").getText() />
155 <#elseif dynamicElement.attributeValue("field-reference") == "Indirizzo">
156 <#assign indirizzo_cur_luogo = dynamicElement.element("dynamic-content").getText() />
157 <#elseif dynamicElement.attributeValue("field-reference") == "OrarioPerIlPubblico">
158 <#if dynamicElement.element("dynamic-content")??>
159 <#assign orari_cur_luogo = dynamicElement.element("dynamic-content").getText() />
160 </#if>
161 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
162 <#assign immagine = dynamicElement.element("dynamic-content").getData() />
163 <#if immagine?has_content>
164 <#assign immagine = jsonFactoryUtil.createJSONObject(immagine) />
165 <#if immagine?has_content>
166 <#assign immagine = immagine?eval />
167 </#if>
168 </#if>
169 </#if>
170 </#list>
171 <#assign
172 luoghi_data +=
173 [{
174 "nome": nome_cur_luogo,
175 "indirizzo": indirizzo_cur_luogo,
176 "orari": orari_cur_luogo,
177 "immagine": immagine,
178 "urlPagina": "/portal/-/${relatedLuogo.getUrlTitle()}"
179 }]
180 />
181 </#if>
182 </#list>
183 </#if>
184<#-- GET DATI UO -->
185<#assign
186 data_UO = jsonFactoryUtil.createJSONObject(ACuraDi.getData())
187 has_UO = data_UO?eval?has_content
188/>
189<#if has_UO>
190 <#assign relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(data_UO.classPK?number) />
191 <#if relatedArticles?? && relatedArticles?size gt 0>
192 <#assign
193 relatedArticle = relatedArticles[0]
194 document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale())
195 rootElement = document.getRootElement()
196 url_UO = relatedArticle.getUrlTitle()
197 nome_UO = ""
198 descrizione_UO = ""
199 immagine_UO = ""
200 urlImmagine_UO = ""
201 competenze_UO = ""
202 indirizzo_UO = ""
203 contatti_UO = []
204 />
205 <#if rootElement.elements()?has_content>
206 <#list rootElement.elements() as dynamicElement>
207 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
208 <#assign nome_UO = dynamicElement.element("dynamic-content").getText() />
209 <#elseif dynamicElement.attributeValue("field-reference") == "DescrizioneBreve">
210 <#assign descrizione_UO = dynamicElement.element("dynamic-content").getText() />
211 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
212 <#assign immagine_UO = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
213 <#if immagine_UO.uuid?has_content>
214 <#assign urlImmagine_UO = "/portal/c/document_library/get_file?uuid=" + immagine_UO.uuid + "&groupId=" + immagine_UO.groupId />
215 </#if>
216 <#elseif dynamicElement.attributeValue("field-reference") == "Competenze">
217 <#assign competenze_UO = dynamicElement.element("dynamic-content").getText() />
218 <#elseif dynamicElement.attributeValue("field-reference") == "SedePrincipale">
219 <#assign
220 sede_UO_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
221 relatedSedi = JournalArticleLocalService.getArticlesByResourcePrimKey(sede_UO_data.classPK?number)
222 />
223 <#if sede_UO_data.classPK?? && relatedSedi?? && relatedSedi?size gt 0>
224 <#assign
225 relatedSede = relatedSedi[0]
226 document = relatedSede.getDocumentByLocale(themeDisplay.getLocale())
227 rootElement = document.getRootElement()
228 />
229 <#list rootElement.elements() as dynamicElement>
230 <#if dynamicElement.attributeValue("field-reference") == "Indirizzo">
231 <#assign indirizzo_UO = dynamicElement.element("dynamic-content").getText() />
232 </#if>
233 </#list>
234 </#if>
235 <#elseif dynamicElement.attributeValue("field-reference") == "Contatti">
236 <#assign
237 valore_contatto = ""
238 contatti_UO_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
239 relatedContatti = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_UO_data.classPK?number)
240 relatedContatto = relatedContatti[0]
241 document = relatedContatto.getDocumentByLocale(themeDisplay.getLocale())
242 rootElement = document.getRootElement()
243 />
244 <#list rootElement.elements() as dynamicElement>
245 <#if dynamicElement.element("dynamic-content").getText()?has_content>
246 <#assign
247 tipo_contatto = (dynamicElement.attributeValue("field-reference") == "URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
248 contatti_UO +=
249 [{
250 "tipo": tipo_contatto,
251 "valore": dynamicElement.element("dynamic-content").getText()
252 }]
253 />
254 </#if>
255 </#list>
256 </#if>
257 </#list>
258 </#if>
259 </#if>
260</#if>
261
262<#-- GET ALLEGATI -->
263<#assign
264 has_allegati = Allegati.getSiblings()?has_content
265 allegati = []
266/>
267<#if has_allegati>
268<#list Allegati.getSiblings() as cur_allegato>
269 <#if cur_allegato.File.getData()?? && cur_allegato.File.getData()?has_content>
270 <#assign
271 allegato_data=jsonFactoryUtil.createJSONObject(cur_allegato.File.data)
272 url_allegato=cur_allegato.File.getData()
273 nome_allegato=cur_allegato.Etichetta.getData()?has_content?string("${cur_allegato.Etichetta.getData()}", "${allegato_data.getString('title')}" )
274 allegati +=
275 [{
276 "nome": nome_allegato,
277 "url": url_allegato
278 }]
279 />
280 </#if>
281</#list>
282</#if>
283
284<#-- GET VIDEOGALLERY -->
285<#assign videogallery = [] />
286<#if GalleriaDiVideo.getData()?has_content>
287 <#list GalleriaDiVideo.getSiblings() as cur_GalleriaDiVideo>
288 <#assign videogallery += [cur_GalleriaDiVideo.getData()] />
289 </#list>
290</#if>
291
292<#-- GET PHOTOGALLERY -->
293<#assign photogallery = [] />
294<#if GalleriaDiImmagini.getSiblings()?has_content>
295 <#list GalleriaDiImmagini.getSiblings() as cur_GalleriaDiImmagini>
296 <#if cur_GalleriaDiImmagini.getData()?? && cur_GalleriaDiImmagini.getData() !="">
297 <#assign
298 photogallery +=
299 [{
300 "alt": cur_GalleriaDiImmagini.getAttribute("alt"),
301 "fileentryid": cur_GalleriaDiImmagini.getAttribute("fileEntryId"),
302 "src": cur_GalleriaDiImmagini.getData()
303 }]
304 />
305 </#if>
306 </#list>
307</#if>
308
309<#assign datasets = [] />
310<#if Dataset.getSiblings()?has_content>
311 <#list Dataset.getSiblings() as cur_Dataset>
312 <#assign cur_dataset_Data = jsonFactoryUtil.createJSONObject(cur_Dataset.getData()) />
313 <#if cur_dataset_Data.classPK?? && cur_dataset_Data?has_content>
314 <#assign relatedDatasetS = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_dataset_Data.classPK?number) />
315 <#if relatedDatasetS?? && relatedDatasetS?size gt 0>
316 <#assign
317 relatedDataset = relatedDatasetS[0]
318 document = relatedDataset.getDocumentByLocale(themeDisplay.getLocale())
319 rootElement = document.getRootElement()
320 nome_cur_dataset = ""
321 immagine_cur_dataset = ""
322 descrizione_cur_dataset = ""
323 />
324 <#list rootElement.elements() as dynamicElement>
325 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
326 <#assign nome_cur_dataset = dynamicElement.element("dynamic-content").getText() />
327 </#if>
328 </#list>
329 <#assign
330 datasets +=
331 [{
332 "nome": nome_cur_dataset,
333 "url": "${cur_Dataset.getFriendlyUrl()}"
334 }]
335 />
336 </#if>
337 </#if>
338 </#list>
339</#if>
340
341<div class="container">
342 <div class="row">
343 <div class="col-12 col-lg-10">
344 <div class="cmp-heading pb-3 pb-lg-4">
345 <div class="row">
346 <div class="col-lg-8 px-lg-4 py-lg-2">
347 <h1>
348 ${Titolo.getData()}
349 </h1>
350 <h2 class="visually-hidden"><@liferay.language key="details" />:</h2>
351 <p>
352 ${DescrizioneBreve.getData()}
353 </p>
354 <div class="row mt-5 mb-4">
355 <div class="col">
356 <small><@liferay.language key="date" />:</small>
357 <p class="fw-semibold font-monospace">
358 <#assign DataDellaNotizia_Data = getterUtil.getString(DataDellaNotizia.getData())>
359
360 <#if validator.isNotNull(DataDellaNotizia_Data)>
361 <#assign DataDellaNotizia_DateObj = dateUtil.parseDate("yyyy-MM-dd", DataDellaNotizia_Data, locale)>
362
363 ${dateUtil.getDate(DataDellaNotizia_DateObj, "dd/MM/yyyy", locale)}
364 </#if>
365 </p>
366 </div>
367
368 <#assign DataDiScadenza_Data = getterUtil.getString(DataDiScadenza.getData())>
369 <#if validator.isNotNull(DataDiScadenza_Data)>
370 <div class="col">
371 <small><@liferay.language key="expiration-date" />:</small>
372 <p class="fw-semibold font-monospace">
373
374 <#assign DataDiScadenza_DateObj = dateUtil.parseDate("yyyy-MM-dd", DataDiScadenza_Data, locale)>
375
376 ${dateUtil.getDate(DataDiScadenza_DateObj, "dd/MM/yyyy", locale)}
377 </p>
378 </div>
379 </#if>
380
381 <#if TempoDiLettura.getData() !="">
382 <div class="col">
383 <small><@liferay.language key="reading-time" />:</small>
384 <p class="fw-semibold">${TempoDiLettura.getData()} min</p>
385 </div>
386 </#if>
387 <#if NumeroProgressivoComunicatoStampa.getData() !="">
388 <div class="col">
389 <small><@liferay.language key="press-progressive-number" />:</small>
390 <p class="fw-semibold">
391 ${NumeroProgressivoComunicatoStampa.getData()}
392 </p>
393 </div>
394 </#if>
395 </div>
396 </div>
397
398 <div class="col-lg-3 offset-lg-1 mt-5 mt-lg-0">
399 <div class="dropdown" id="fallback-share">
400 <button
401 aria-label="condividi sui social"
402 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 text-primary"
403 type="button"
404 id="shareActions"
405 data-bs-toggle="dropdown"
406 aria-haspopup="true"
407 aria-expanded="false"
408 >
409 <svg class="icon icon-primary" aria-hidden="true">
410 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use>
411 </svg>
412 <small><@liferay.language key="share" /></small>
413 </button>
414 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
415 <div class="link-list-wrapper">
416 <ul class="link-list" role="menu">
417 <li role="none">
418 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')">
419 <svg class="icon icon-primary" aria-hidden="true">
420 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use>
421 </svg>
422 <span>Facebook</span>
423 </button>
424 </li>
425 <li role="none">
426 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')">
427 <svg class="icon icon-primary" aria-hidden="true">
428 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use>
429 </svg>
430 <span><@liferay.language key="Twitter" /></span>
431 </button>
432 </li>
433 <li role="none">
434 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')">
435 <svg class="icon icon-primary" aria-hidden="true">
436 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use>
437 </svg>
438 <span>Whatsapp</span>
439 </button>
440 </li>
441 </ul>
442 </div>
443 </div>
444 </div>
445
446 <div class="dropdown">
447 <button
448 aria-label="vedi azioni da compiere sulla pagina"
449 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0"
450 type="button"
451 id="viewActions"
452 data-bs-toggle="dropdown"
453 aria-haspopup="true"
454 aria-expanded="false"
455 >
456 <svg class="icon icon-primary" aria-hidden="true">
457 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use>
458 </svg>
459 <small><@liferay.language key="actions" /></small>
460 </button>
461 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
462 <div class="link-list-wrapper">
463 <ul class="link-list" role="menu">
464 <li role="none">
465 <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem">
466 <svg class="icon icon-primary" aria-hidden="true">
467 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use>
468 </svg>
469 <span><@liferay.language key="print" /></span>
470 </button>
471 </li>
472 <li role="none">
473 <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem">
474 <svg class="icon icon-primary" aria-hidden="true">
475 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use>
476 </svg>
477 <span><@liferay.language key="send" /></span>
478 </a>
479 </li>
480 </ul>
481 </div>
482 </div>
483 </div>
484
485 <#list argomenti>
486 <div class="mt-4 mb-3">
487 <div class="mb-2 small fw-semibold"><@liferay.language key="topics" />:</div>
488 <ul>
489 <#items as argomento>
490 <li>
491 <a href="${argomento.url}" class="chip chip-simple" data-element="service-topic">
492 <span class="chip-label">
493 ${argomento.name}
494 </span>
495 </a>
496 </li>
497 </#items>
498 </ul>
499 </div>
500 </#list>
501 </div>
502 </div>
503 </div>
504 </div>
505 </div>
506</div>
507
508<#if Immagine.getData()?? && Immagine.getData() !="">
509<div class="container-fluid my-3">
510 <div class="row">
511 <figure class="figure px-0 img-full">
512 <img src="${Immagine.getData()}" class="figure-img img-fluid" alt="${Immagine.getAttribute("alt")}">
513 <figcaption class="figure-caption text-center pt-3">
514 ${Immagine.getAttribute("alt")}
515 </figcaption>
516 </figure>
517 </div>
518</div>
519</#if>
520
521<div class="container">
522 <div class="row border-top border-light row-column-border row-column-menu-left">
523 <aside class="col-12 col-lg-3 mb-4 border-col">
524 <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one">
525 <nav
526 class="navbar it-navscroll-wrapper navbar-expand-lg"
527 data-bs-navscroll=""
528 aria-labelledby="page-index-btn"
529 >
530 <div class="navbar-custom" id="navbarNavProgress">
531 <div class="menu-wrapper">
532 <div class="link-list-wrapper">
533 <div class="accordion">
534 <div class="accordion-item">
535 <span class="accordion-header" id="accordion-title-one">
536 <button class="accordion-button pb-10 px-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-one" aria-expanded="true" aria-controls="collapse-one"
537 id="page-index-btn"
538 >
539 <@liferay.language key="page-index" />
540 <svg class="icon icon-xs right" viewBox="0 0 24 24">
541 <path d="M11.6 15.4L6 9.8l.7-.8 4.9 4.9L16.5 9l.7.8z"></path>
542 </svg>
543 </button>
544 </span>
545 <div class="progress">
546 <div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;" aria-label="percentuale di scorrimento"></div>
547 </div>
548 <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one">
549 <div class="accordion-body">
550 <ul class="link-list" data-element="page-index">
551
552 <#if Descrizione.getData()?has_content>
553 <@navigatorLink sectionId="description" title="${languageUtil.get(locale, 'description')}" />
554 </#if>
555
556 <#if luoghi_data?size gt 0>
557 <@navigatorLink sectionId="places" title="${languageUtil.get(locale, 'places')}" />
558 </#if>
559
560 <#if photogallery?size gt 0>
561 <@navigatorLink sectionId="photogallery" title="${languageUtil.get(locale, 'image-gallery')}" />
562 </#if>
563
564 <#if videogallery?size gt 0>
565 <@navigatorLink sectionId="videogallery" title="${languageUtil.get(locale, 'video-gallery')}" />
566 </#if>
567
568 <#if (has_UO || persone_Notizia?size gt 0) && nome_UO?has_content>
569 <@navigatorLink sectionId="office" title="${languageUtil.get(locale, 'edited-by')}" />
570 </#if>
571
572 <#if has_allegati && allegati?size gt 0>
573 <@navigatorLink sectionId="attachments" title="${languageUtil.get(locale, 'attachments')}" />
574 </#if>
575
576 <#if datasets?size gt 0>
577 <@navigatorLink sectionId="datasets" title="${languageUtil.get(locale, 'dataset')}" />
578 </#if>
579
580 </ul>
581 </div>
582 </div>
583 </div>
584 </div>
585 </div>
586 </div>
587 </div>
588 </nav>
589 </div>
590 </aside>
591 <div class="col-12 col-lg-8 offset-lg-1">
592 <div class="it-page-sections-container unstiled-lists-wrapper">
593
594 <#if Descrizione.getData()?has_content>
595 <section class="it-page-section mb-30" id="description">
596 <h2 class="title-xxlarge mb-3"><@liferay.language key="description" /></h2>
597 <div class="richtext-wrapper lora">
598 ${Descrizione.getData()}
599 </div>
600 </section>
601 </#if>
602
603 <#list luoghi_data>
604 <section class="it-page-section mb-30" id="places">
605 <h2 class="title-xxlarge mb-3"><@liferay.language key="places" /></h2>
606 <div class="row">
607 <#items as luogo>
608 <div class="col-12 col-lg-6">
609 <div class="card-wrapper rounded h-auto mt-10">
610 <div class="card card-teaser card-teaser-info rounded shadow-sm p-3">
611 <div class="card-body pe-3">
612 <a class="card-title text-paragraph-regular-medium-semi mb-3 primary-color-b3" href="${luogo.urlPagina}">
613 ${luogo.nome}
614 </a>
615 <div class="card-text">
616 ${luogo.indirizzo}
617 </div>
618 </div>
619 <#if luogo.immagine?has_content && luogo.immagine.url??>
620 <div class="avatar size-xl">
621 <#assign url_immagine="${luogo.immagine.url}" />
622 <a href="${luogo.urlPagina}">
623 <img
624 src="${luogo.immagine.url}"
625 style="aspect-ratio: 1;"
626 alt="${luogo.immagine.alt}"
627 />
628 </a>
629 </div>
630 </#if>
631 </div>
632 </div>
633 </div>
634 </#items>
635 </div>
636 </section>
637 </#list>
638
639 <#list photogallery>
640 <section class="it-page-section mb-30" id="photogallery">
641 <h2 class="title-xxlarge mb-3"><@liferay.language key="image-gallery" /></h2>
642 <div class="it-carousel-wrapper it-carousel-landscape-abstract-three-cols splide splide--slide splide--ltr splide--draggable is-active mb-4" data-bs-carousel-splide="" id="splide01">
643 <div class="splide__track" id="splide01-track" style="padding-left: 0px; padding-right: 0px;">
644 <ul class="splide__list it-carousel-all" id="splide01-list" style="transform: translateX(0px);">
645 <#items as img>
646 <li
647 class="splide__slide is-active is-visible h-100"
648 id="splide01-slide0${img?counter}"
649 style="margin-right: 24px; width: calc(calc(100% / 3) - 16px);"
650 tabindex="0"
651 data-focus-mouse="false"
652 >
653 <div class="it-single-slide-wrapper">
654 <figure>
655 <a
656 href="${img.src}"
657 aria-labelledby="photogallery-item-${img?counter}"
658 target="_blank"
659 rel="noopener noreferrer"
660 >
661 <img
662 id="photogallery-item-${img?counter}"
663 src="${img.src}"
664 alt="${img.alt}"
665 class="img-fluid"
666 style="width: 100%; aspect-ratio: 1; object-fit: cover; object-position: center;"
667 loading="lazy"
668 >
669 </a>
670 <figcaption class="figure-caption mt-2">
671 ${img.alt}
672 </figcaption>
673 </figure>
674 </div>
675 </li>
676 </#items>
677 </ul>
678 </div>
679 </div>
680 </section>
681 </#list>
682
683 <#list videogallery>
684 <section class="it-page-section mb-30" id="videogallery">
685 <h2 class="mb-3"><@liferay.language key="video-gallery" /></h2>
686 <div id="iframe-wrapper">
687 <#items as cur_Sezione_URLVideo>
688 <div class="iframe-element">
689 ${cur_Sezione_URLVideo}
690 </div>
691 </#items>
692 </div>
693 </section>
694 </#list>
695
696 <#if (has_UO || persone_Notizia?size gt 0) && nome_UO?has_content>
697 <section class="it-page-section mb-30" id="office">
698 <h2 class="mb-3"><@liferay.language key="edited-by" /></h2>
699 <div class="row">
700 <#if has_UO>
701 <div class="col-12 col-lg-6">
702 <div class="card-wrapper rounded h-auto mt-10">
703 <div class="card card-teaser card-teaser-info rounded shadow-sm p-3">
704 <div class="card-body pe-3">
705 <div class="mb-3">
706 <a class="card-title text-paragraph-regular-medium-semi primary-color-b3" href="/portal/-/${url_UO}">
707 ${nome_UO}
708 </a>
709 <#if indirizzo_UO?has_content>
710 <small class="d-block">
711 ${indirizzo_UO}
712 </small>
713 </#if>
714 </div>
715 <div class="card-text">
716 <#list contatti_UO>
717 <div class="col-12 rounded p-0">
718 <#items as contatto>
719 <div>
720 <#assign url_type="" />
721 <#if
722 contatto.tipo=="Email"
723 || contatto.tipo=="PEC"
724 >
725 <#assign url_type="mailto:" />
726 <#elseif
727 contatto.tipo=="Telefono"
728 || contatto.tipo=="Whatsapp"
729 || contatto.tipo=="Telegram"
730 >
731 <#assign url_type="tel:" />
732 </#if>
733 <span class="fw-semibold">
734 <@liferay.language key="${contatto.tipo?replace(' ', '-')}" />:</span>
735 <span class="ms-1">
736 <a
737 href="${url_type}${contatto.valore}"
738 target="_blank"
739 class="t-primary"
740 >
741 ${contatto.valore}
742 </a>
743 </span>
744 </div>
745 </#items>
746 </div>
747 </#list>
748 </div>
749 </div>
750 <#if urlImmagine_UO !="">
751 <div class="avatar size-xl">
752 <a href="#">
753 <img
754 alt="Immagine unità organizzativa responsabile"
755 src="${urlImmagine_UO}"
756 style="aspect-ratio: 1;"
757 />
758 </a>
759 </div>
760 </#if>
761 </div>
762 </div>
763 </div>
764 </#if>
765 <#list persone_Notizia>
766 <div class="col-12 col-lg-6">
767 <div class="mb-2"><@liferay.language key="people" />:</div>
768 <ul>
769 <#items as persona>
770 <li>
771 <a href="${persona.url}" class="chip chip-simple" data-element="service-topic">
772 <span class="chip-label">
773 ${persona.nome}
774 </span>
775 </a>
776 </li>
777 </#items>
778 </ul>
779 </div>
780 </#list>
781 </div>
782 </section>
783 </#if>
784
785 <#list allegati>
786 <section class="it-page-section mb-30" id="attachments">
787 <h2 class="mb-3"><@liferay.language key="attachments" /></h2>
788 <div class="col-12">
789 <ul class="p-3 my-3 shadow rounded">
790 <#items as allegato>
791 <li group="attachments">
792 <div class="d-flex align-items-center ${allegato?has_next?string(' mb-2', '')}">
793 <a class="text-decoration_none fw-semibold t-primary" target="_blank" href="${allegato.url}">
794 <svg class="icon icon-primary icon-lh me-2 d-inline" aria-hidden="true" viewBox="0 0 24 24">
795 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
796 </svg>
797 ${allegato.nome}
798 </a>
799 </div>
800 </li>
801 </#items>
802 </ul>
803 </div>
804 </section>
805 </#list>
806
807 <#list datasets>
808 <section class="it-page-section mb-30" id="datasets">
809 <h2 class="mb-3"><@liferay.language key="dataset" /></h2>
810 <div class="col-12">
811 <ul class="p-3 my-3 shadow rounded">
812 <#items as dataset>
813 <li group="attachments">
814 <div class="d-flex align-items-center ${dataset?has_next?string(' mb-2', '')}">
815 <a class="text-decoration_none fw-semibold t-primary" target="_blank" href="${dataset.url}">
816 <svg class="icon icon-primary me-2" aria-hidden="true">
817 <use xlink:href="/portal/o/agid-liferay-theme/images/sprite.svg#it-external-link"></use>
818 </svg>
819 ${dataset.nome}
820 </a>
821 </div>
822 </li>
823 </#items>
824 </ul>
825 </div>
826 </section>
827 </#list>
828
829 </div>
830 <div class="mt-3">
831 <#-- DATA ULTIMA MODIFICA -->
832 <#assign
833 modifiedDate = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", .vars['reserved-article-modified-date'].data, localeUtil.getDefault())
834 displayModifiedDate = modifiedDate?datetime?string.short
835 />
836
837 <p class="text-paragraph-small mb-0 lora">
838 <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span>
839 <span>
840 ${displayModifiedDate}
841 </span>
842 </p>
843 </div>
844
845 </div>
846 </div>
847</div>
848
849<style>
850 section {
851 scroll-margin-top: 2.5rem;
852 }
853</style>
854
855<script defer>
856 document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Titolo.getData()}&body=" + window.location.href);
857
858 function shareOn(type) {
859 let articleUrl = window.location.href;
860 const mapping = {
861 "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl,
862 "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl,
863 "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl,
864 "whatsapp": "whatsapp://send?text=" + articleUrl
865 }
866
867 window.open(mapping[type], "_blank");
868 return
869 }
870
871 function bringMeTo(id) {
872 document.getElementById(id).scrollIntoView({behavior: 'smooth'});
873 }
874
875 // Function to dynamically load a script
876 function loadScript(src) {
877 return new Promise((resolve, reject) => {
878 const script = document.createElement('script');
879 script.src = src;
880 script.onload = resolve;
881 script.onerror = reject;
882 document.head.appendChild(script);
883 });
884 }
885
886 // Initialize all Splide elements on the page
887 async function initializeSplides() {
888 const splideElements = document.querySelectorAll('.splide');
889
890 // Check if there are any Splide elements on the page
891 if (splideElements.length === 0) {
892 return;
893 }
894
895 // Dynamically load Splide.js
896 try {
897 await loadScript('https://cdn.jsdelivr.net/npm/@splidejs/splide/dist/js/splide.min.js');
898
899 // Initialize each Splide element
900 splideElements.forEach((splideElement) => {
901 // Check if Splide is already initialized for this element
902 if (splideElement.classList.contains('is-initialized')) {
903 return;
904 }
905
906 // Initialize Splide
907 const splide = new Splide(splideElement, {
908 type: 'slide',
909 perPage: 3,
910 gap: 24,
911 padding: { left: 0, right: 0 },
912 arrows: false,
913 breakpoints: {
914 768: {
915 perPage: 1,
916 gap: 24,
917 padding: { left: 0, right: 0 },
918 arrows: false,
919 },
920 992: {
921 perPage: 2,
922 gap: 24,
923 padding: { left: 40, right: 40 },
924 arrows: false,
925 },
926 },
927 });
928
929 splide.mount();
930
931 // Mark Splide as initialized
932 splideElement.classList.add('is-initialized');
933 });
934 } catch (error) {
935 console.error("Failed to load Splide.js", error);
936 }
937 }
938
939 // Run the initializer after a 3-second delay
940 setTimeout(() => {
941 initializeSplides();
942 }, 3000);
943
944</script>
945
946<#macro navigatorLink sectionId title>
947<#local desc = "" />
948
949<#if title?? && title?has_content>
950 <#local desc = title />
951<#else>
952 <#local desc = sectionId />
953</#if>
954
955<li class="nav-item">
956 <a
957 class="nav-link active"
958 onclick="bringMeTo('${sectionId}')"
959 role="button"
960 aria-label="${languageUtil.get(locale, 'go-to-section')}: ${title}"
961 >
962 <span class="title-medium">${title}</span>
963 </a>
964</li>
965</#macro>