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