Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> ExpItem [in template "1315478#1315513#1688004" at line 20, column 6]
----
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: #if ExpItem.baseArticleItem.geoRef?? ... [in template "1315478#1315513#1688004" at line 20, column 1]
----
1<#include "_TEMPLATE_CONTEXT_/1315478/1331017/23609/1656602">
2
3<#assign
4 articleId = .vars['reserved-article-id'].data
5 territorioCategories = getContentVocabularyCategories(articleId, "TERRITORIO", groupId)
6 sliderCategories = []
7 slides = 0
8 hasSlides = false
9 hasGallery = false
10 hasDownloads = false
11 lat = 0
12 lng = 0
13
14 groupedCategories = getNavCircCategories(articleId, groupId)
15/>
16
17<#-- MASONRY -->
18<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script>
19
20<#if ExpItem.baseArticleItem.geoRef?? && ExpItem.baseArticleItem.geoRef.getData()?has_content>
21 <#assign
22 geolocationJSONObject = jsonFactoryUtil.createJSONObject(ExpItem.baseArticleItem.geoRef.getData())
23 lat = geolocationJSONObject.getDouble("latitude")
24 lng = geolocationJSONObject.getDouble("longitude")
25 />
26</#if>
27
28<#if ExpItem.baseArticleItem.coordinateTestuali.getData()?has_content>
29 <#assign
30 lat = ExpItem.baseArticleItem.coordinateTestuali.getData()?keep_before(",")?number
31 lng = ExpItem.baseArticleItem.coordinateTestuali.getData()?keep_after(",")?number
32 />
33</#if>
34
35<#list territorioCategories as tCat>
36 <#if tCat.parentCategoryId != 0>
37 <#assign sliderCategories += [tCat.name]>
38 </#if>
39</#list>
40
41<#if ExpItem.baseArticleItem.slideHeader?? && ExpItem.baseArticleItem.slideHeader.getSiblings()?has_content>
42 <#list ExpItem.baseArticleItem.slideHeader.getSiblings() as slide>
43 <#if slide.getData()?has_content>
44 <#assign
45 hasSlides = true
46 slides = ExpItem.baseArticleItem.slideHeader.getSiblings()?size
47 />
48 <#break>
49 </#if>
50 </#list>
51</#if>
52
53<#if ExpItem.baseArticleItem.ImmagineGallery?? && ExpItem.baseArticleItem.ImmagineGallery.getSiblings()?has_content>
54 <#list ExpItem.baseArticleItem.ImmagineGallery.getSiblings() as item>
55 <#if item.getData()?has_content>
56 <#assign hasGallery = true>
57 <#break>
58 </#if>
59 </#list>
60</#if>
61
62<!-- Modello esperienza -->
63
64<div id="${portletNamespace}" v-cloak>
65
66 <#if themeDisplay.getLayout().getAncestors()?has_content>
67 <section id="breadcrumb" class="mt-4">
68 <div class="container-fluid custom-container d-flex align-items-center">
69 <ol class="breadcrumb">
70 <li class="breadcrumb-item">
71 <a href="/" class="breadcrumb-link" title="Home">
72 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">Home</span>
73 </a>
74 </li>
75
76 <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor>
77 <li class="breadcrumb-item">
78 <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}">
79 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}</span>
80 </a>
81 </li>
82 </#list>
83
84 <li class="breadcrumb-item active">
85 <span class="tw:text-green tw:uppercase" title="${ExpItem.baseArticleItem.title.getData()?js_string}">
86 ${ExpItem.baseArticleItem.title.getData()}
87 </span>
88 </li>
89 </ol>
90
91 <div class="d-flex align-items-center ml-auto">
92 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item) : setFavorite(item);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${getLabel('rimuovi_preferiti', groupId)}` : `${getLabel('aggiungi_preferiti', groupId)}`">
93 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-2x tw:text-green'"></i>
94 </button>
95
96 <div class="btn dropdown tw:px-0">
97 <button type="button" class="btn btn-link dropdown-toggle tw:no-underline tw:text-green" data-toggle="dropdown">
98 <i class="fas fa-share-alt fa-2x"></i>
99 </button>
100 <div class="dropdown-menu dropdown-menu-center">
101 <button type="button" @click="customShare('facebook', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
102 <i class="fab fa-facebook-f fa-lg tw:text-green"></i>
103 <span class="tw:text-dark">
104 Facebook
105 </span>
106 </button>
107
108 <button type="button" @click="customShare('twitter', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
109 <i class="fab fa-twitter fa-lg tw:text-green"></i>
110 <span class="tw:text-dark">
111 Twitter
112 </span>
113 </button>
114
115 <button type="button" @click="customShare('pinterest', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
116 <i class="fab fa-pinterest fa-lg tw:text-green"></i>
117 <span class="tw:text-dark">
118 Pinterest
119 </span>
120 </button>
121
122 <button type="button" @click="customShare('whatsapp', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
123 <i class="fab fa-whatsapp fa-lg tw:text-green"></i>
124 <span class="tw:text-dark">
125 WhatsApp
126 </span>
127 </button>
128
129 <button type="button" @click="customShare('telegram', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
130 <i class="fab fa-telegram fa-lg tw:text-green"></i>
131 <span class="tw:text-dark">
132 Telegram
133 </span>
134 </button>
135
136 <button type="button" @click="customShare('print', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
137 <i class="fas fa-print fa-lg tw:text-green"></i>
138 <span class="tw:text-dark">
139 Print
140 </span>
141 </button>
142
143 <a :href="'mailto:inserisci indirizzo email?subject=' + item.contentJSON.title + '&body=${currentUrl} ' + item.contentJSON.description" class="dropdown-item tw:space-x-2">
144 <i class="fas fa-envelope fa-lg tw:text-green"></i>
145 <span class="tw:text-dark">
146 Email
147 </span>
148 </a>
149
150 <button type="button" @click="customShare('link', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
151 <i class="fas fa-link fa-lg tw:text-green"></i>
152 <span class="tw:text-dark">
153 Link
154 </span>
155 </button>
156 </div>
157 </div>
158 </div>
159 </div>
160 </section>
161 </#if>
162
163 <section id="slideshow" class="container-fluid custom-container">
164 <div class="swiper-container">
165 <div class="swiper-wrapper">
166 <#if hasSlides>
167 <#list ExpItem.baseArticleItem.slideHeader.getSiblings() as slide>
168 <div class="swiper-slide">
169 <img data-src="${getPrefix(slide.getData(), 1920, 730)}" loading="lazy" class="lazyload" alt="${slide.getAttribute('alt')}"/>
170 <div class="card-img-overlay bg-dark"></div>
171
172 <div class="carousel-caption d-flex">
173 <#if testoHeader?? && testoHeader.getData()?has_content>
174 <#assign locationClass = "my-auto">
175 <#else>
176 <#assign locationClass = "mt-auto mb-20">
177 </#if>
178
179 <div class="d-flex flex-column ${locationClass}">
180 <div class="hcm-bg-capabletext-white text-uppercase mr-auto p-4">
181 <#if testoHeader?? && testoHeader.getData()?has_content>
182 <p>${testoHeader.getData()}</p>
183 <div class="dropdown-divider mt-5 mr-auto mt-lg-10"></div>
184 </#if>
185 </div>
186
187 <#if ExpItem.baseArticleItem.sliderCategories?has_content>
188 <div class="d-flex mt-7">
189 <i class="fas fa-map-marker-alt fa-2x text-white"></i>
190 <p class="text-white text-uppercase my-auto ml-3">
191 ${sliderCategories?join(", ")}
192 </p>
193 </div>
194 </#if>
195 </div>
196 </div>
197 </div>
198 </#list>
199 <#else>
200 <div class="swiper-slide">
201 <img data-src="https://via.placeholder.com/1920x730" loading="lazy" class="lazyload" alt=""/>
202 <div class="card-img-overlay bg-dark"></div>
203
204 <div class="carousel-captiond-flex text-left">
205 <#if testoHeader?? && testoHeader.getData()?has_content>
206 <#assign locationClass = "tw:my-auto">
207 <#else>
208 <#assign locationClass = "tw:mt-auto tw:mb-20">
209 </#if>
210
211 <div class="tw:flex tw:flex-col ${locationClass}">
212 <div class="hcm-bg-capable tw:text-white tw:font-heading tw:uppercase tw:text-2xl tw:mr-auto tw:p-4 tw:rounded-md lg:tw:text-4xl">
213 <#if testoHeader?? && testoHeader.getData()?has_content>
214 <p>${testoHeader.getData()}</p>
215 <div class="dropdown-divider tw:border-green tw:border-t-3 tw:w-3/5 tw:mt-5 tw:mr-auto lg:tw:w-1/5 lg:tw:mt-10"></div>
216 </#if>
217 </div>
218
219 <#if territorioCategories?has_content>
220 <div class="tw:flex tw:mt-7">
221 <i class="fas fa-map-marker-alt fa-2x tw:text-white"></i>
222 <p class="tw:text-white tw:uppercase tw:font-heading tw:font-medium tw:my-auto tw:ml-3">
223 <#list territorioCategories as cat>
224 <#if cat.parentCategoryId != 0>
225 ${cat.name}
226
227 <#if cat?has_next>,</#if>
228 </#if>
229 </#list>
230 </p>
231 </div>
232 </#if>
233 </div>
234 </div>
235 </div>
236 </#if>
237 </div>
238 </div>
239 </section>
240
241 <section id="intro-description" class="mt-5">
242 <div class="container-fluid custom-container">
243 <div class="tw:mt-10">
244 <#if ExpItem.baseArticleItem.title?? && ExpItem.baseArticleItem.title.getData()?has_content>
245 <h1>${ExpItem.baseArticleItem.title.getData()}<h1>
246 </#if>
247
248 <#if ExpItem.baseArticleItem.subTitle?? && ExpItem.baseArticleItem.subTitle.getData()?has_content>
249 <h3>${ExpItem.baseArticleItem.subTitle.getData()}</h3>
250 </#if>
251 </div>
252 <div class="tw:flex tw:mt-9 lg:tw:hidden">
253 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item) : setFavorite(item);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${getLabel('rimuovi_preferiti', groupId)}` : `${getLabel('aggiungi_preferiti', groupId)}`">
254 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-lg tw:text-green'"></i>
255 </button>
256 <button type="button" @click="share(item.contentJSON.title, item.contentJSON.description)" class="btn btn-link tw:no-underline">
257 <i class="fas fa-share-alt fa-lg tw:text-green"></i>
258 </button>
259 </div>
260 </div>
261
262 <div class="container-fluid custom-container d-flex">
263 <div class="row w-100">
264 <#if (ExpItem.baseArticleItem.contactFields.singleContact.getData())??>
265 <#assign col_b_contact = "col-12 col-lg-7" />
266 <#assign col_contact = "" />
267 <#else>
268 <#assign col_b_contact = "col-12 col-lg-7" />
269 <#assign col_contact = "d-none" />
270 </#if>
271
272 <div class="col-12 col-lg-7 ${col_b_contact}">
273 <#if ExpItem.baseArticleItem.introDescription?? && ExpItem.baseArticleItem.introDescription.getData()?has_content>
274 <div class="mt-4">
275 ${ExpItem.baseArticleItem.introDescription.getData()}
276 </div>
277
278 </#if>
279
280 </div>
281 <div class="col-12 col-lg-5 ${col_contact}">
282 <@contatti/>
283 </div>
284 </div>
285 </div>
286 </section>
287
288 <section id="hightlights" class="mt-4">
289 <div class="container-fluid custom-container">
290 <div class="tw:mt-10">
291 <#if titoloInEvidenza?? && titoloInEvidenza.getData()?has_content>
292 <p class="text-dark text-uppercase">${titoloInEvidenza.getData()}</p>
293 </#if>
294
295 <#if sottotitoloInEvidenza?? && sottotitoloInEvidenza.getData()?has_content>
296 <p class="text-dark text-uppercase">${sottotitoloInEvidenza.getData()}</p>
297 </#if>
298 </div>
299 <div class="row my-5">
300 <div class="col-12 col-lg-8">
301 <#if EvImage.immagineInEvidenza?? && EvImage.immagineInEvidenza.getData()?has_content>
302 <div class="aspect-ratio aspect-ratio-16-to-9">
303 <img data-src="${getPrefix(EvImage.immagineInEvidenza.getData(), 1280, 720)}" loading="lazy" class="lazyload aspect-ratio-item-fluid rounded-border" alt="${EvImage.immagineInEvidenza.getAttribute('alt')}" />
304 </div>
305 </#if>
306 </div>
307 <div class="col-12 col-lg-4">
308 <div class="card hcm-bg-capable tw:bg-green rounded-border tw:border-none tw:h-full tw:p-4 tw:mb-0">
309 <p class="tw:text-white tw:font-heading tw:font-bold tw:text-xl tw:uppercase lg:tw:text-2xl">${getLabel('da-non-perdere')}</p>
310 <div class="tw:divide-y-2 tw:divide-gray-50 tw:mt-8 lg:tw:mt-10">
311
312 <#if EvImage.EvImageField??>
313 <#if EvImage.EvImageField.testoCosaVedere?? && EvImage.EvImageField.testoCosaVedere.getData()?has_content>
314 <div class="tw:text-white">${EvImage.EvImageField.testoCosaVedere.getData()}</div>
315 </#if>
316
317 <#if EvImage.EvImageField.campoPuntato?? && EvImage.EvImageField.campoPuntato.getSiblings()?has_content>
318 <div class="tw:space-y-4 tw:mt-4 tw:pt-4">
319 <#list EvImage.EvImageField.campoPuntato.getSiblings() as item>
320 <div class="card-row tw:space-x-4">
321 <div class="autofit-col">
322 <i class="fas fa-arrow-circle-right fa-2x tw:text-white"></i>
323 </div>
324 <div class="autofit-col autofit-col-expand">
325 <div class="autofit-section">
326 <div class="tw:text-white">
327 ${item.getData()}
328 </div>
329 </div>
330 </div>
331 </div>
332 </#list>
333 </div>
334 </#if>
335 </#if>
336 </div>
337 </div>
338 </div>
339 </div>
340 </div>
341 </section>
342
343 <#if ExpItem.baseArticleItem.descriptionFieldSet.description?? && ExpItem.baseArticleItem.descriptionFieldSet.description.getData()?has_content>
344 <section id="description" class="mt-4">
345 <div class="container-fluid custom-container">
346
347 <div class="mt-5">
348 <div class="tw:flow-root">
349 <#if ExpItem.baseArticleItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain?? && ExpItem.baseArticleItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getData()?has_content>
350 <div class="tw:w-full lg:tw:float-left lg:tw:w-5/12 lg:pr-5">
351 <div class="aspect-ratio aspect-ratio-4-to-3">
352 <img data-src="${getPrefix(ExpItem.baseArticleItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getData(), 900, 675)}" loading="lazy" class="lazyload aspect-ratio-item-fluid tw:object-cover tw:w-full tw:h-full rounded-border" alt="${ExpItem.baseArticleItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getAttribute('alt')}" />
353 </div>
354 </div>
355 </#if>
356
357 <div class="mt-4 mt-lg-0">
358 ${ExpItem.baseArticleItem.descriptionFieldSet.description.getData()}
359 </div>
360 </div>
361 </div>
362 </div>
363 </section>
364 </#if>
365
366 <#if hasGallery>
367 <section id="gallery" class="mt-4">
368 <div class="container-fluid custom-container">
369 <div class="gallery-grid grid">
370 <#list ExpItem.baseArticleItem.ImmagineGallery.getSiblings() as pic>
371 <div class="grid-item">
372 <a href="javascript:void(0);" data-toggle="modal" data-target="#lightbox-modal" data-slider="${pic?index}">
373 <img src="${getKitPrefix(pic.getData(), 'tr:w-900,fo-center')}" alt="${pic.getAttribute('alt')!''}" />
374 </a>
375 </div>
376 </#list>
377 </div>
378 </div>
379
380 <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade">
381 <div class="modal-dialog modal-full-screen tw:inset-0 tw:border-none tw:shadow-none">
382 <div class="modal-content tw:bg-transparent">
383 <div class="modal-body tw:overflow-hidden">
384 <div class="tw:absolute tw:top-0 tw:right-0 tw:z-5">
385 <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3">
386 <i class="fal fa-times fa-lg"></i>
387 </button>
388 </div>
389
390 <#-- lightbox -->
391 <div id="lightbox-swiper" class="swiper-container h-75 my-auto">
392 <div class="swiper-button-prev tw:w-12 tw:h-12">
393 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
394 <span class="sticker-overlay">
395 <i class="fas fa-chevron-left fa-2x tw:text-white"></i>
396 </span>
397 </span>
398 </div>
399
400 <div class="swiper-button-next tw:w-12 tw:h-12">
401 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
402 <span class="sticker-overlay">
403 <i class="fas fa-chevron-right fa-2x tw:text-white"></i>
404 </span>
405 </span>
406 </div>
407
408 <div class="swiper-wrapper tw:h-full">
409 <#list ExpItem.baseArticleItem.ImmagineGallery.getSiblings() as pic>
410 <div class="swiper-slide tw:h-full">
411 <img data-src="${getPrefix(pic.getData(), 1920, '')}" loading="lazy" class="lazyload tw:h-full tw:object-contain tw:mx-auto" alt="${pic.getAttribute('alt')!''}">
412 </div>
413 </#list>
414 </div>
415 </div>
416
417 <#-- thumbnails -->
418 <div id="thumbnail-swiper" class="swiper-container" thumbsSlider="">
419 <div class="swiper-wrapper">
420 <#list ExpItem.baseArticleItem.ImmagineGallery.getSiblings() as pic>
421 <div class="swiper-slide">
422 <img data-src="${getPrefix(pic.getData(), 300, '')}" loading="lazy" class="lazyload tw:object-cover tw:cursor-pointer tw:h-full tw:w-full" alt="${pic.getAttribute('alt')!''}">
423 </div>
424 </#list>
425 </div>
426 </div>
427 </div>
428 </div>
429 </div>
430 </div>
431 </section>
432 </#if>
433
434 <#if EmbedCodes.CodiceEmbedAudioAltro?? && EmbedCodes.CodiceEmbedAudioAltro.data?has_content>
435 <section id="embeds" class="tw:font-text tw:mt-20">
436 <div class="container">
437 <div class="row">
438 <#list EmbedCodes.CodiceEmbedAudioAltro.getSiblings() as embed>
439 <div class="col-12 col-lg-6">
440 <div class="card tw:border-0 tw:shadow-none tw:rounded-md">
441 <div class="embed-responsive embed-responsive-16by9 tw:rounded-md">
442 ${embed.getData()}
443 </div>
444 <!-- div class="card-body tw:px-0">
445 <div class="tw:flex tw:space-x-4">
446 <div class="btn btn-link tw:bg-dark tw:text-white tw:uppercase tw:font-heading tw:tracking-tighter tw:text-slim tw:cursor-default tw:rounded-0">tag 1</div>
447 <div class="btn btn-link tw:bg-dark tw:text-white tw:uppercase tw:font-heading tw:tracking-tighter tw:text-slim tw:cursor-default tw:rounded-0">tag 2</div>
448 </div>
449 </div -->
450 <#if (embed.titoloEmbedAudio?? && embed.titoloEmbedAudio.getData()?has_content) || (embed.descrizioneEmbedAudio?? && embed.descrizioneEmbedAudio.getData()?has_content)>
451 <div class="card-body tw:px-0">
452 <#if embed.titoloEmbedAudio?? && embed.titoloEmbedAudio.getData()?has_content >
453 <p class="tw:text-dark tw:uppercase tw:font-heading tw:font-bold tw:text-xl lg:tw:text-2xl mb-4">${embed.titoloEmbedAudio.getData()}</p>
454 </#if>
455 <#if embed.descrizioneEmbedAudio?? && embed.descrizioneEmbedAudio.getData()?has_content>
456 <p class="tw:text-dark tw:font-light">${embed.descrizioneEmbedAudio.getData()}</p>
457 </#if>
458 </div>
459 </#if>
460 </div>
461 </div>
462 </#list>
463 </div>
464 </div>
465 </section>
466 </#if>
467
468 <#if EmbedVids.embed_video?? && EmbedVids.embed_video.data?has_content>
469 <section id="videos" class="tw:font-text tw:mt-20">
470 <div class="container">
471 <div class="row">
472 <#list EmbedVids.embed_video.getSiblings() as video>
473 <div class="col-12 col-lg-6">
474 <div class="card tw:border-0 tw:shadow-none tw:rounded-md">
475 <div class="embed-responsive embed-responsive-16by9 tw:rounded-md">
476 <iframe class="embed-responsive-item" src="${video.getData()}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
477 </div>
478 <!-- div class="card-body tw:px-0">
479 <div class="tw:flex tw:space-x-4">
480 <div class="btn btn-link tw:bg-dark tw:text-white tw:uppercase tw:font-heading tw:tracking-tighter tw:text-slim tw:cursor-default tw:rounded-0">tag 1</div>
481 <div class="btn btn-link tw:bg-dark tw:text-white tw:uppercase tw:font-heading tw:tracking-tighter tw:text-slim tw:cursor-default tw:rounded-0">tag 2</div>
482 </div>
483 </div -->
484 <#if (video.titoloEmbedVideo?? && video.titoloEmbedVideo.getData()?has_content) || (video.descrizioneEmbedVideo?? && video.descrizioneEmbedVideo.getData()?has_content)>
485 <div class="card-body tw:px-0">
486 <#if video.titoloEmbedVideo?? && video.titoloEmbedVideo.getData()?has_content >
487 <p class="tw:text-dark tw:uppercase tw:font-heading tw:font-bold tw:text-xl lg:tw:text-2xl mb-4">${video.titoloEmbedVideo.getData()}</p>
488 </#if>
489 <#if video.descrizioneEmbedVideo?? && video.descrizioneEmbedVideo.getData()?has_content>
490 <p class="tw:text-dark tw:font-light">${video.titoloEmbedVideo.getData()}</p>
491 </#if>
492 </div>
493 </#if>
494 </div>
495 </div>
496 </#list>
497 </div>
498 </div>
499 </section>
500 </#if>
501
502
503 <#if downloads??>
504 <section id="downloads" >
505 <#list downloads.getSiblings() as item>
506 <#if item.downloadUrl.getData()?has_content>
507 <#assign hasDownloads = true>
508 <#break>
509 </#if>
510 </#list>
511 </#if>
512
513 <#if hasDownloads>
514 <div class="container tw:mt-20">
515 <div class="sheet tw-bg-light tw:space-y-4 p-3">
516 <#list downloads.getSiblings() as item>
517 <#-- #assign doc = getFileFromUuid(createObject(item.downloadUrl.data).uuid, groupId) -->
518
519 <div class="card tw:bg-transparent tw:border-0 tw:shadow-none">
520 <div class="card-row">
521 <div class="autofit-col">
522 <div class="autofit-section">
523 <i class="fal fa-file-pdf fa-lg tw:text-dark"></i>
524 </div>
525 </div>
526 <div class="autofit-col autofit-col-expand autofit-col-gutters">
527 <div class="autofit-section">
528 <a href="${item.downloadUrl.getData()}" class="tw:text-dark tw:font-bold" download>
529 <#-- ${doc.fileName} -->
530 ${item.downloadText.getData()}
531
532 <span class="tw:font-light muted tw:ml-2">(scarica qui)</span>
533 </a>
534 </div>
535 </div>
536 </div>
537 </div>
538 </#list>
539 </div>
540 </div>
541 </section>
542 </#if>
543
544
545 <#macro contatti>
546 <#assign
547 contactNameSz=""
548 street_number1Sz=""
549 localitaSz=""
550 comuneSz=""
551 countrySz=""
552 zipCodeSz=""
553 telSz=""
554 emailSz=""
555 email2Sz=""
556 webSiteSz=""
557 facebookSz=""
558 instagramSz=""
559 thereAreContcats="false"
560 />
561
562 <#if (ExpItem.baseArticleItem.contactFields.singleContact.getData())??>
563 <#assign contacts = ExpItem.baseArticleItem.contactFields.singleContact />
564 </#if>
565
566 <#if contacts??>
567 <#if contacts.contactName?? && contacts.contactName.getData()?has_content>
568 <#assign contactNameSz=contacts.contactName.getData()>
569 <#assign thereAreContcats="true">
570 </#if>
571 <#if contacts.street_number1?? && contacts.street_number1.getData()?has_content>
572 <#assign street_number1Sz=contacts.street_number1.getData()>
573 <#assign thereAreContcats="true">
574 </#if>
575 <#if contacts.localita?? && contacts.localita.getData()?has_content>
576 <#assign localitaSz=contacts.localita.getData()>
577 <#assign thereAreContcats="true">
578 </#if>
579 <#if contacts.comune?? && contacts.comune.getData()?has_content>
580 <#assign comuneSz=contacts.comune.getData()>
581 <#assign thereAreContcats="true">
582 </#if>
583 <#if contacts.country?? && contacts.country.getData()?has_content>
584 <#assign countrySz=contacts.country.getData()>
585 <#assign thereAreContcats="true">
586 </#if>
587 <#if contacts.zipCode?? && contacts.zipCode.getData()?has_content>
588 <#assign zipCodeSz=contacts.zipCode.getData()>
589 <#assign thereAreContcats="true">
590 </#if>
591 <#if contacts.tel?? && contacts.tel.getData()?has_content>
592 <#assign telSz=contacts.tel.getData()>
593 <#assign thereAreContcats="true">
594 </#if>
595 <#if contacts.email?? && contacts.email.getData()?has_content>
596 <#assign emailSz=contacts.email.getData()>
597 <#assign thereAreContcats="true">
598 </#if>
599 <#if contacts.email2?? && contacts.email2.getData()?has_content>
600 <#assign email2Sz=contacts.email2.getData()>
601 <#assign thereAreContcats="true">
602 </#if>
603 <#if contacts.webSite?? && contacts.webSite.getData()?has_content>
604 <#assign webSiteSz=contacts.webSite.getData()>
605 <#assign thereAreContcats="true">
606 </#if>
607 <#if contacts.facebook?? && contacts.facebook.getData()?has_content>
608 <#assign facebookSz=contacts.facebook.getData()>
609 <#assign thereAreContcats="true">
610 </#if>
611 <#if contacts.instagram?? && contacts.instagram.getData()?has_content>
612 <#assign instagramSz=contacts.instagram.getData()>
613 <#assign thereAreContcats="true">
614 </#if>
615 </#if>
616
617 <#assign acapo="false">
618 <#if thereAreContcats == "true">
619 <div class="tw:text-dark tw:font-light tw:mt-8">
620 <#if contactNameSz != "">
621 ${contactNameSz}
622 <#assign acapo="true">
623 </#if>
624 <#if street_number1Sz != "">
625 <#if acapo == "true"><br/></#if>
626 ${street_number1Sz}
627 <#assign acapo="true">
628 </#if>
629 <#if localitaSz != "">
630 <#if acapo == "true"><br/></#if>
631 ${localitaSz}
632 <#assign acapo="true">
633 </#if>
634
635 <#if zipCodeSz != "" || comuneSz != "" || countrySz != "">
636 <#if acapo == "true"><br/></#if>
637 ${zipCodeSz} ${comuneSz} ${countrySz}
638 <#assign acapo="true">
639 </#if>
640
641 <#if telSz != "">
642 <#if acapo == "true"><br/></#if>
643 ${getLabel('tel')}: ${telSz}
644 <#assign acapo="true">
645 </#if>
646 <#if emailSz != "">
647 <#if acapo == "true"><br/></#if>
648 ${getLabel('email')}: <a href="mailto:${emailSz}" >${emailSz}</a>
649 <#if email2Sz != "">
650 <a href="mailto:${email2Sz}" style="margin-left: 20px;">${email2Sz}</a>
651 </#if>
652 <#assign acapo="true">
653 </#if>
654
655 <#if webSiteSz != "" || facebookSz != "" || instagramSz != "">
656 <#if acapo == "true"><br/></#if>
657 <#if webSiteSz != "">
658 <a href="${webSiteSz}" title="${webSiteSz}" alt="${webSiteSz}" target="_blank">${getLabel('sito-web')}</a>
659 </#if>
660 <#if facebookSz != "">
661 <a href="${facebookSz}" title="${facebookSz}" alt="${facebookSz}" target="_blank"><i class="fab fa-facebook-f" style="margin-left: 20px;"></i></a>
662 </#if>
663 <#if instagramSz != "">
664 <a href="${instagramSz}" title="${instagramSz}" alt="${instagramSz}" target="_blank"><i class="fab fa-instagram" style="margin-left: 20px;"></i></a>
665 </#if>
666
667 </#if>
668
669 </div>
670 </#if>
671
672
673 </#macro>
674</div>
675
676<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/securityV2.js"></script>
677
678<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/initVueApp.js"></script>
679<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/favorites.js"></script>
680<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/share.js"></script>
681
682<script>
683 var ${portletNamespace}_custom_hook = {
684 data: {
685 slider: null,
686 gallery: null,
687 thumbnails: null,
688 lightbox: null,
689 item: {
690 id: "${articleId}",
691 contentJSON: {
692 title: "${ExpItem.baseArticleItem.title.getData()?js_string}",
693 description: "${ExpItem.baseArticleItem.introDescription.getData()?js_string}",
694 geoRef: '${ExpItem.baseArticleItem.geoRef.getData()}',
695 previewPicture: "${themeDisplay.getPortalURL()}${ExpItem.baseArticleItem.previewPicture.getData()}",
696 viewUrl: window.location.href
697 }
698 }
699 },
700 mounted(){
701 var that = this;
702
703 if(${hasSlides?c}){
704 this.initSlider();
705 }
706
707 if(${hasGallery?c}){
708 this.initGallery();
709
710 $("#lightbox-modal").on("shown.bs.modal", function(e){
711 that.lightbox.update();
712 that.thumbnails.update();
713 that.lightbox.slideTo($(e.relatedTarget).data("slider"));
714 that.lightbox.update();
715 });
716
717 $("#lightbox-modal .swiper-wrapper").on("click", function(e){
718 if($(e.target).attr("class").includes("swiper-slide")){
719 $("#lightbox-modal").modal("hide");
720 }
721 });
722 }
723 },
724 methods: {
725 initSlider: function(){
726 this.slider = new Swiper("#slideshow .swiper-container", {
727 loop: ${(slides > 1)?c},
728 effect: "fade",
729 speed: 3000,
730 allowTouchMove: false,
731 autoplay: {
732 delay: 3000,
733 disableOnInteraction: false,
734 },
735 fadeEffect: {
736 crossFade: true,
737 },
738 });
739 },
740 initGallery: function(){
741 this.gallery = new Swiper("#gallery .swiper-container", {
742 slidesPerView: 1,
743 spaceBetween: 25,
744 centerSlides: true,
745 centerInsufficientSlides: true,
746 navigation: {
747 prevEl: ".btn-prev",
748 nextEl: ".btn-next",
749 },
750 breakpoints: {
751 768: {
752 slidesPerView: 2,
753 spaceBetween: 25,
754 },
755 992: {
756 slidesPerView: 3,
757 spaceBetween: 25,
758 },
759 },
760 });
761
762 this.thumbnails = new Swiper("#thumbnail-swiper", {
763 spaceBetween: 10,
764 slidesPerView: 2,
765 centerInsufficientSlides: true,
766 freeMode: true,
767 watchSlidesVisibility: true,
768 watchSlidesProgress: true,
769 breakpoints: {
770 768: {
771 slidesPerView: 3
772 },
773 992: {
774 slidesPerView: 4
775 },
776 1200: {
777 slidesPerView: 5
778 }
779 },
780 });
781
782 this.lightbox = new Swiper("#lightbox-swiper", {
783 spaceBetween: 10,
784 autoHeight: true,
785 observer: true,
786 observeSlideChildren: true,
787 keyboard: {
788 enabled: true
789 },
790 navigation: {
791 nextEl: ".swiper-button-next",
792 prevEl: ".swiper-button-prev"
793 },
794 thumbs: {
795 swiper: this.thumbnails
796 }
797 });
798 },
799 customShare: function(type, title, description, image = ""){
800 if(type == "facebook"){
801 var winHeight = 450,
802 winWidth = 600,
803 winTop = window.screen.height / 2 - winHeight / 2,
804 winLeft = window.screen.width / 2 - winWidth / 2,
805 params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop,
806 linkOld = "http://www.facebook.com/sharer.php?s=100&p[title]=" + encodeURIComponent(title) + "&p[summary]=" + encodeURIComponent(description) + "&p[url]=" + window.location.href + "&p[picture]=" + image,
807 link = "https://www.facebook.com/sharer/sharer.php?u=" + window.location.href + "&picture=" + image + "&p[images][0]=" + image + "&title=" + encodeURIComponent(title) + "&description=" + encodeURIComponent(description);
808
809 window.open(link, "Facebook", params);
810 }
811
812 if(type == "twitter"){
813 var link = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(title) + "&url=" + encodeURIComponent(window.location.href);
814
815 window.open(link, "_blank").focus();
816 }
817
818 if(type == "pinterest"){
819 var link = "https://pinterest.com/pin/create/button/?url=" + encodeURIComponent(window.location.href) + "&description=" + encodeURIComponent(title);
820
821 window.open(link, "_blank").focus();
822 }
823
824 if(type == "whatsapp"){
825 var link = "https://wa.me?text=" + encodeURIComponent(title + ": " + window.location.href);
826
827 window.open(link, "_blank").focus();
828 }
829
830 if(type == "telegram"){
831 var link = "https://t.me/share/url?url=" + window.location.href + "&text=" + encodeURIComponent(title);
832
833 window.open(link, "_blank").focus();
834 }
835
836 if(type == "print"){
837 window.print();
838 }
839
840 if(type == "link"){
841 this.legacyShare();
842 }
843 }
844 }
845 };
846
847 document.addEventListener("DOMContentLoaded", function(){
848 var app = initVueApp(
849 "#${portletNamespace}",
850 "${portletNamespace}",
851 [d40_favorites, d40_share, ${portletNamespace}_custom_hook]
852 );
853 });
854
855 var groupedCategories = '${groupedCategories?js_string}';
856 var contentCoords = [${lat}, ${lng}];
857 console.log("espongo " + groupedCategories);
858</script>
it_IT
Cosa
fare
it_IT
Esperienze
it_IT
Dove
dormire
it_IT
Offerte
it_IT
Info