ArticleDetails

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> tourismItem  [in template "1315478#1315513#1674222" at line 98, 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 tourismItem.geoRef.getData()?has_...  [in template "1315478#1315513#1674222" at line 98, 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<#-- 
18    Mapping Vimeo -> Bunny Stream. 
19    Per aggiungere un video: "ID_VIMEO": "LIBRARY_ID/VIDEO_ID" 
20--> 
21<#assign vimeoBunnyMapping = { 
22    "672700517": "785963/dad9de1f-df1d-4a44-82e2-cf99e56a2111", 
23    "1188097108": "785963/42e7079a-f289-421e-9d94-4b37af2b3aa7", 
24    "672696883": "785963/df1c9789-f991-4fd6-b205-cd4598be3a24", 
25    "651979614": "785963/3ce413ed-b9ff-4e95-a621-f1305d193f17", 
26    "651980826": "785963/98b69096-3a94-456b-a9db-04110a9c9f2c", 
27    "651978716": "785963/cb27804f-a8b9-4e5d-ad7e-c791675052ad", 
28    "651978337": "785963/9efbe957-29f3-4f08-92cb-64c17664eb0d", 
29    "651980015": "785963/74bb2cf3-3f82-41c3-96f8-79dcf2e94921", 
30    "651981172": "785963/6b3e755b-76d5-442d-99ae-2245fc9e9f19", 
31    "651983042": "785963/276001b6-5db0-4dcd-bfa8-77f779622702", 
32    "651979166": "785963/8432cc7f-75f2-4f82-81db-147ae2bcae8f", 
33    "651980464": "785963/4ea10853-388b-45ac-80d2-b3f90c41729e", 
34    "651981586": "785963/c8f02b62-ad38-4dac-8e51-bdb13b0ba3d5", 
35    "686771435": "785963/beb1b8e9-37c0-47e4-b654-64aa345f2e80", 
36    "672695968": "785963/c7140c71-0647-4f02-a9c2-82f9261f2a74", 
37    "672696408": "785963/a4cbae59-6956-482a-9a72-398e14423620", 
38    "672697802": "785963/4aa8e0ab-df12-490f-9407-140155c1c858", 
39    "672698233": "785963/efc37b03-ccf9-4dc2-b207-ba32fd74ad6e", 
40    "672697289": "785963/0caf3e22-7ced-4309-af3c-cfd2b7eed9ac", 
41    "1188108772": "785963/af6e63df-70fa-4df0-9047-79ab447b069d", 
42    "1189807283": "785963/4e46a605-8efa-48d9-94aa-b9d2d492e7f8", 
43    "1188113469": "785963/f4db880d-8e64-4704-bfca-5ad7db64aaa5", 
44    "868210912": "785963/d673eee7-cf52-4ef6-8501-da6b9d17ba94", 
45    "651982035": "785963/dc05a3ad-7461-4052-9e28-71e96ce2d68c", 
46    "672698670": "785963/cf6f3d63-5106-4cc7-b095-5f503c297cfd", 
47    "672699123": "785963/c469cae3-a0bd-4084-81f8-48cfc1f79803", 
48    "687039327": "785963/6ea2cbed-e487-419e-ba71-ce738356d79e", 
49    "708630472": "785963/416976a0-f02f-4b66-8661-278baa851a0c", 
50    "764059265": "785963/b38a0c29-a2c3-4b0e-a004-35bc7b2d2c76", 
51    "777269946": "785963/dad127a3-00c8-43d2-8598-d4b907fdf054" 
52} /> 
53 
54<#function getBunnyReferenceFromVimeoId vimeoId> 
55    <#return vimeoBunnyMapping[vimeoId]!"" /> 
56</#function> 
57 
58<#function getBunnyEmbedUrl rawUrl> 
59    <#local url = (rawUrl!"")?trim /> 
60 
61    <#if url?contains("player.vimeo.com/") || url?starts_with("videos/") || url?starts_with("/videos/")> 
62        <#local vimeoId = url?replace("^.*/?videos?/", "", "r")?keep_before("?")?keep_before("/") /> 
63        <#local bunnyReference = getBunnyReferenceFromVimeoId(vimeoId) /> 
64 
65        <#-- Se non esiste ancora un mapping, mantiene il vecchio URL Vimeo. --> 
66        <#if bunnyReference?has_content> 
67            <#local url = bunnyReference /> 
68        <#else> 
69            <#return url /> 
70        </#if> 
71    </#if> 
72 
73    <#if url?starts_with("https://player.mediadelivery.net/play/")> 
74        <#local url = url?replace("https://player.mediadelivery.net/play/", "https://player.mediadelivery.net/embed/") /> 
75    <#elseif !url?starts_with("https://player.mediadelivery.net/embed/")> 
76        <#local parts = url?split("/") /> 
77        <#if parts?size == 2 && parts[0]?has_content && parts[1]?has_content> 
78            <#local url = "https://player.mediadelivery.net/embed/" + parts[0] + "/" + parts[1] /> 
79        </#if> 
80    </#if> 
81 
82    <#if url?starts_with("https://player.mediadelivery.net/embed/") && !url?contains("?")> 
83        <#local url = url + "?autoplay=false&preload=false" /> 
84    </#if> 
85 
86    <#return url /> 
87</#function> 
88 
89<#-- MASONRY  --> 
90<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script> 
91 
92<#list territorioCategories as tCat> 
93    <#if tCat.parentCategoryId != 0> 
94        <#assign sliderCategories += [tCat.name]> 
95    </#if> 
96</#list> 
97 
98<#if tourismItem.geoRef.getData()?has_content> 
99    <#assign 
100        geoObj = createObject(tourismItem.geoRef.getData()) 
101        lat = geoObj.getDouble("latitude") 
102        lng = geoObj.getDouble("longitude") 
103    /> 
104</#if> 
105 
106<#if tourismItem.coordinateTestuali.getData()?has_content> 
107    <#assign 
108        lat = tourismItem.coordinateTestuali.getData()?keep_before(",")?number 
109        lng = tourismItem.coordinateTestuali.getData()?keep_after(",")?number 
110    /> 
111</#if> 
112 
113<#if tourismItem.slideHeader?? && tourismItem.slideHeader.getSiblings()?has_content> 
114    <#list tourismItem.slideHeader.getSiblings() as slide> 
115        <#if slide.getData()?has_content> 
116            <#assign 
117                hasSlides = true 
118                slides = tourismItem.slideHeader.getSiblings()?size 
119            /> 
120            <#break> 
121        </#if> 
122    </#list> 
123</#if> 
124 
125<#if tourismItem.ImmagineGallery?? && tourismItem.ImmagineGallery.getSiblings()?has_content> 
126    <#list tourismItem.ImmagineGallery.getSiblings() as item> 
127        <#if item.getData()?has_content> 
128            <#assign hasGallery = true> 
129            <#break> 
130        </#if> 
131    </#list> 
132</#if> 
133 
134<#if tourismItem.downloadsFieldSet.downloadsFieldSetFieldSet?? && tourismItem.downloadsFieldSet.downloadsFieldSetFieldSet.getSiblings()?has_content> 
135    <#list tourismItem.downloadsFieldSet.downloadsFieldSetFieldSet.getSiblings() as item> 
136        <#if item.downloadUrl.getData()?has_content> 
137            <#assign hasDownloads = true> 
138            <#break> 
139        </#if> 
140    </#list> 
141</#if> 
142 
143<!-- Modello punto di interesse --> 
144 
145<div id="${portletNamespace}" v-cloak> 
146 
147		<#if themeDisplay.getLayout().getAncestors()?has_content> 
148        <section id="breadcrumb" class="mt-4"> 
149            <div class="container-fluid custom-container d-flex align-items-center"> 
150                <ol class="breadcrumb tw-space-x-2"> 
151                    <li class="breadcrumb-item"> 
152                        <a href="/" class="breadcrumb-link" title="Home"> 
153                            <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">Home</span> 
154                        </a> 
155                    </li> 
156                     
157                    <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor> 
158                        <li class="breadcrumb-item"> 
159                            <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}"> 
160                                <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}</span> 
161                            </a> 
162                        </li> 
163                    </#list> 
164                     
165                    <li class="breadcrumb-item active"> 
166                        <span class="tw:text-green tw:uppercase" title="${tourismItem.title.getData()?js_string}"> 
167                            ${tourismItem.title.getData()} 
168                        </span> 
169                    </li> 
170                </ol> 
171                 
172                <div class="d-flex align-items-center ml-auto"> 
173                    <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)}`"> 
174                        <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-2x tw:text-green'"></i> 
175                    </button> 
176                     
177                    <div class="btn dropdown tw:px-0"> 
178                        <button type="button" class="btn btn-link dropdown-toggle tw:no-underline tw:text-green" data-toggle="dropdown"> 
179                            <i class="fas fa-share-alt fa-2x"></i> 
180                        </button> 
181                        <div class="dropdown-menu dropdown-menu-center"> 
182                            <button type="button" @click="customShare('facebook', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
183                                <i class="fab fa-facebook-f fa-lg tw:text-green"></i> 
184                                <span class="tw:text-dark"> 
185                                    Facebook 
186                                </span> 
187                            </button> 
188                             
189                            <button type="button" @click="customShare('twitter', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
190                                <i class="fab fa-twitter fa-lg tw:text-green"></i> 
191                                <span class="tw:text-dark"> 
192                                    Twitter 
193                                </span> 
194                            </button> 
195                             
196                            <button type="button" @click="customShare('pinterest', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
197                                <i class="fab fa-pinterest fa-lg tw:text-green"></i> 
198                                <span class="tw:text-dark"> 
199                                    Pinterest 
200                                </span> 
201                            </button> 
202                             
203                            <button type="button" @click="customShare('whatsapp', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
204                                <i class="fab fa-whatsapp fa-lg tw:text-green"></i> 
205                                <span class="tw:text-dark"> 
206                                    WhatsApp 
207                                </span> 
208                            </button> 
209                             
210                            <button type="button" @click="customShare('telegram', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
211                                <i class="fab fa-telegram fa-lg tw:text-green"></i> 
212                                <span class="tw:text-dark"> 
213                                    Telegram 
214                                </span> 
215                            </button> 
216                             
217                            <button type="button" @click="customShare('print', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
218                                <i class="fas fa-print fa-lg tw:text-green"></i> 
219                                <span class="tw:text-dark"> 
220                                    Print 
221                                </span> 
222                            </button> 
223                             
224                            <a :href="'mailto:inserisci indirizzo email?subject=' + item.contentJSON.title + '&body=${currentUrl} ' + item.contentJSON.description" class="dropdown-item tw:space-x-2"> 
225                                <i class="fas fa-envelope fa-lg tw:text-green"></i> 
226                                <span class="tw:text-dark"> 
227                                    Email 
228                                </span> 
229                            </a> 
230                             
231                            <button type="button" @click="customShare('link', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2"> 
232                                <i class="fas fa-link fa-lg tw:text-green"></i> 
233                                <span class="tw:text-dark"> 
234                                    Link 
235                                </span> 
236                            </button> 
237                        </div> 
238                    </div> 
239                </div> 
240            </div> 
241        </section> 
242    </#if> 
243 
244    <section id="slideshow" class="container-fluid custom-container"> 
245        <div class="swiper-container"> 
246            <div class="swiper-wrapper"> 
247                <#if hasSlides> 
248                    <#list tourismItem.slideHeader.getSiblings() as slide> 
249                        <div class="swiper-slide"> 
250                            <img data-src="${getPrefix(slide.getData(), 1920, 730)}" loading="lazy" class="lazyload tw:object-cover" alt="${slide.getAttribute('alt')}"/> 
251                            <div class="card-img-overlay tw:bg-dark tw:bg-opacity-40"></div> 
252                         
253                            <div class="carousel-caption tw:flex tw:text-left tw:transform lg:tw:top-2/4 lg:tw:-translate-y-2/4"> 
254                                <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content> 
255                                    <#assign locationClass = "tw:my-auto"> 
256                                <#else> 
257                                    <#assign locationClass = "tw:mt-auto tw:mb-20"> 
258                                </#if> 
259                             
260                                <div class="tw:flex tw:flex-col ${locationClass}"> 
261                                    <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"> 
262                                        <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content> 
263                                            <p>${tourismItem.testoHeader.getData()}</p> 
264                                            <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> 
265                                        </#if> 
266                                    </div> 
267                                    <#if sliderCategories?has_content> 
268                                        <div class="tw:flex tw:mt-7"> 
269                                            <i class="fas fa-map-marker-alt fa-2x tw:text-white"></i> 
270                                            <p class="tw:text-white tw:uppercase tw:font-heading tw:font-medium tw:my-auto tw:ml-3"> 
271                                                ${sliderCategories?join(", ")} 
272                                            </p> 
273                                        </div> 
274                                    </#if> 
275                                </div> 
276                            </div> 
277                        </div> 
278                    </#list> 
279                <#else> 
280                    <div class="swiper-slide"> 
281                        <img data-src="https://via.placeholder.com/1920x730" loading="lazy" class="lazyload tw:object-cover tw:h-full tw:w-full" alt=""/> 
282                        <div class="card-img-overlay tw:bg-dark tw:bg-opacity-40"></div> 
283     
284                        <div class="carousel-caption tw:flex tw:text-left tw:transform lg:tw:top-2/4 lg:tw:-translate-y-2/4"> 
285                            <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content> 
286                                <#assign locationClass = "tw:my-auto"> 
287                            <#else> 
288                                <#assign locationClass = "tw:mt-auto tw:mb-20"> 
289                            </#if> 
290                                 
291                            <div class="tw:flex tw:flex-col ${locationClass}"> 
292                                <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"> 
293                                    <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content> 
294                                        <p>${tourismItem.testoHeader.getData()}</p> 
295                                        <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> 
296                                    </#if> 
297                                </div> 
298     
299                                <#if territorioCategories?has_content> 
300                                    <div class="tw:flex tw:mt-7"> 
301                                        <i class="fas fa-map-marker-alt fa-2x tw:text-white"></i> 
302                                        <p class="tw:text-white tw:uppercase tw:font-heading tw:font-medium tw:my-auto tw:ml-3"> 
303                                            <#list territorioCategories as cat> 
304                                                <#if cat.parentCategoryId != 0> 
305                                                    ${cat.name} 
306     
307                                                    <#if cat?has_next>,</#if> 
308                                                </#if> 
309                                            </#list> 
310                                        </p> 
311                                    </div> 
312                                </#if> 
313                            </div> 
314                        </div> 
315                    </div>               
316                </#if> 
317            </div> 
318        </div> 
319    </section> 
320     
321    <section id="intro-description-image"> 
322        <div class="d-flex container-fluid custom-container"> 
323            <div class="tw:flex tw:mt-9 lg:tw:hidden"> 
324                <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)}`"> 
325                    <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-lg tw:text-green'"></i> 
326                </button> 
327                <button type="button" @click="share(item.contentJSON.title, item.contentJSON.description)" class="btn btn-link tw:no-underline"> 
328                    <i class="fas fa-share-alt fa-lg tw:text-green"></i> 
329                </button> 
330            </div> 
331        </div> 
332         
333        <#if tourismItem.icona_pagina?? && tourismItem.icona_pagina.getData()?has_content> 
334            <div class="d-none flex-justify-end mt-4"> 
335                <div class="pr-3 pb-3"> 
336                    <div class="sticker sticker-circle sticker-lg"> 
337                        <i class="${tourismItem.icona_pagina.getData()} fa-lg tw:text-dark"></i> 
338                    </div> 
339                </div> 
340            </div> 
341        </#if> 
342         
343        <div class="d-flex container-fluid custom-container"> 
344            <div class="row mt-4 w-100"> 
345                <div class="col-12 col-lg-7"> 
346										<div> 
347												<#if tourismItem.title?? && tourismItem.title.getData()?has_content> 
348														<h1 class="mb-3">${tourismItem.title.getData()}</h1> 
349												</#if> 
350 
351												<#if tourismItem.subTitle?? && tourismItem.subTitle.getData()?has_content> 
352														<h3>${tourismItem.subTitle.getData()}</h3> 
353												</#if>   
354										</div> 
355								 
356                    <#if tourismItem.introDescription?? && tourismItem.introDescription.getData()?has_content> 
357                        <div class="text-dark mt-4"> 
358                            ${tourismItem.introDescription.getData()} 
359                        </div> 
360                    </#if>   
361 
362                    <#if InfoOrariFieldSet.InfoOrari?? && InfoOrariFieldSet.InfoOrari.getData()?has_content> 
363                        <div class="text-dark mt-4"> 
364                            <span style="text-transform: uppercase;">${getLabel('orari')}</span><br/> 
365                            ${InfoOrariFieldSet.InfoOrari.getData()} 
366                            <#if InfoOrariFieldSet.InfoOrari.hideExtraInfo??> 
367                                <#if InfoOrariFieldSet.InfoOrari.hideExtraInfo.getData() != "true"> 
368                                    <i>${getLabel('nota-extra-info-orari')}</i> 
369                                </#if>    
370                            <#else>  
371                                <i>${getLabel('nota-extra-info-orari')}</i>          
372                            </#if> 
373                        </div> 
374                    </#if>  
375                     
376                   
377     
378                    <@contatti/>  
379     
380                </div> 
381     
382                <div class="col-12 col-lg-5"> 
383                    <div id="suggesto-map" class="map-image map-styled tw:z-10 tw:mt-10" style="height: 350px;"></div> 
384                </div> 
385            </div> 
386        </div> 
387    </section> 
388     
389		 
390		<#-- MASONRY GALLERY --> 
391    <#if hasGallery> 
392        <section id="gallery" class="mt-4"> 
393            <div class="container-fluid custom-container"> 
394                    <div class="gallery-grid grid"> 
395                        <#list tourismItem.ImmagineGallery.getSiblings() as pic> 
396                            <div class="grid-item"> 
397                                <a href="javascript:void(0);" data-toggle="modal" data-target="#lightbox-modal" data-slider="${pic?index}"> 
398																		<img src="${getKitPrefix(pic.getData(), 'tr:w-900,fo-center')}" alt="${pic.getAttribute('alt')!''}"  /> 
399                                </a> 
400                            </div> 
401                        </#list> 
402                    </div> 
403            </div> 
404             
405            <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade"> 
406                <div class="modal-dialog modal-full-screen tw:inset-0 tw:border-none tw:shadow-none"> 
407                    <div class="modal-content tw:bg-transparent"> 
408                        <div class="modal-body tw:overflow-hidden"> 
409                            <div class="tw:absolute tw:top-0 tw:right-0 tw:z-5"> 
410                                <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3"> 
411                                    <i class="fal fa-times fa-lg"></i> 
412                                </button> 
413                            </div> 
414                             
415                            <#-- lightbox --> 
416            				<div id="lightbox-swiper" class="swiper-container h-75 my-auto"> 
417            				    <div class="swiper-button-prev tw:w-12 tw:h-12"> 
418                                    <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full"> 
419                                        <span class="sticker-overlay"> 
420                                            <i class="fas fa-chevron-left fa-2x tw:text-white"></i> 
421                                        </span> 
422                                    </span> 
423                                </div> 
424                                 
425                                <div class="swiper-button-next tw:w-12 tw:h-12"> 
426                                    <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full"> 
427                                        <span class="sticker-overlay"> 
428                                            <i class="fas fa-chevron-right fa-2x tw:text-white"></i> 
429                                        </span> 
430                                    </span> 
431                                </div> 
432                                 
433                                <div class="swiper-wrapper tw:h-full"> 
434                                    <#list tourismItem.ImmagineGallery.getSiblings() as pic> 
435                                        <div class="swiper-slide tw:h-full"> 
436                                            <img data-src="${getPrefix(pic.getData(), 1920, '')}" loading="lazy" class="lazyload tw:h-full tw:object-contain tw:mx-auto" alt="${pic.getAttribute('alt')!''}"> 
437                                        </div> 
438                                    </#list> 
439                                </div> 
440                            </div> 
441                             
442                            <#-- thumbnails --> 
443            				<div id="thumbnail-swiper" class="swiper-container" thumbsSlider=""> 
444                                <div class="swiper-wrapper"> 
445                                    <#list tourismItem.ImmagineGallery.getSiblings() as pic> 
446                                        <div class="swiper-slide"> 
447                                            <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')!''}"> 
448                                        </div> 
449                                    </#list> 
450                                </div> 
451                            </div> 
452                        </div> 
453                    </div> 
454                </div> 
455            </div> 
456        </section> 
457    </#if> 
458 
459    <#if tourismItem.descriptionFieldSet.description?? && tourismItem.descriptionFieldSet.description.getData()?has_content> 
460    <section id="description" class="mt-5"> 
461        <div class="container-fluid custom-container"> 
462            <p class="tw:inline tw:text-dark tw:font-heading tw:font-extrabold tw:text-2xl tw:uppercase lg:tw:text-4xl">${getLabel('scopri-di-piu-parte1')}</p> 
463            <p class="tw:inline tw:text-dark tw:font-heading tw:font-light tw:text-2xl tw:uppercase lg:tw:text-4xl">${getLabel('scopri-di-piu-parte2')}</p> 
464            <div class="text-dark mt-5"> 
465                ${tourismItem.descriptionFieldSet.description.getData()} 
466            </div> 
467        </div> 
468    </section> 
469    </#if> 
470 
471    <#if AudioBlock.CodiceEmbedAudioAltro?? && AudioBlock.CodiceEmbedAudioAltro.data?has_content> 
472        <section id="embeds" class="mt-20"> 
473            <div class="d-flex container-fluid custom-container"> 
474                <div class="row"> 
475											<#list AudioBlock.getSiblings() as embed> 
476													<div class="col-12 col-lg-6 m-auto"> 
477															<div class="card"> 
478																	<div class="embed-responsive embed-responsive-16by9 tw:rounded-md"> 
479																			${htmlUtil.unescape(embed.CodiceEmbedAudioAltro.getData())} 
480																	</div> 
481																	<#if (embed.AudioFields.titoloEmbedAudio?? && embed.AudioFields.titoloEmbedAudio.getData()?has_content) || (embed.AudioFields.descrizioneEmbedAudio?? && embed.AudioFields.descrizioneEmbedAudio.getData()?has_content)> 
482																	<div class="card-body tw:px-0"> 
483																			<#if embed.AudioFields.titoloEmbedAudio?? && embed.AudioFields.titoloEmbedAudio.getData()?has_content > 
484																			<p class="tw:text-dark tw:uppercase tw:font-heading tw:font-bold tw:text-xl lg:tw:text-2xl mb-4">${embed.AudioFields.titoloEmbedAudio.getData()}</p> 
485																			</#if> 
486																			<#if embed.AudioFields.descrizioneEmbedAudio?? && embed.AudioFields.descrizioneEmbedAudio.getData()?has_content> 
487																			<p class="tw:text-dark tw:font-light">${embed.AudioFields.descrizioneEmbedAudio.getData()}</p> 
488																			</#if> 
489																	</div> 
490																	</#if> 
491															</div> 
492													</div> 
493											</#list> 
494                </div> 
495            </div> 
496        </section> 
497    </#if> 
498     
499    <#if VideoBlock.embed_video?? && VideoBlock.embed_video.data?has_content> 
500        <section id="videos" class="mt-5"> 
501            <div class="d-flex container-fluid custom-container"> 
502                <div class="row w-100"> 
503                    <#list VideoBlock.getSiblings() as video> 
504                        <div class="col-12 col-lg-6 offset-lg-2"> 
505                            <div class="card"> 
506                                <div class="embed-responsive embed-responsive-16by9"> 
507                                    <iframe class="embed-responsive-item" src="${getBunnyEmbedUrl(video.embed_video.getData())}" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe> 
508                                </div> 
509                                <#if (video.VideoFields.titoloEmbedVideo?? && video.VideoFields.titoloEmbedVideo.getData()?has_content) || (video.VideoFields.descrizioneEmbedVideo?? && video.VideoFields.descrizioneEmbedVideo.getData()?has_content)> 
510                                <div class="card-body py-3 px-0"> 
511                                    <#if video.VideoFields.titoloEmbedVideo?? && video.VideoFields.titoloEmbedVideo.getData()?has_content > 
512                                        <p class="vid-title">${video.VideoFields.titoloEmbedVideo.getData()}</p> 
513                                    </#if> 
514                                    <#if video.VideoFields.descrizioneEmbedVideo?? && video.VideoFields.descrizioneEmbedVideo.getData()?has_content> 
515                                        <p class="vid-desc">${video.VideoFields.titoloEmbedVideo.getData()}</p> 
516                                    </#if> 
517                                </div> 
518                                </#if> 
519                            </div> 
520                        </div> 
521                    </#list> 
522                </div> 
523            </div> 
524        </section> 
525    </#if> 
526		 
527    <#if hasDownloads> 
528        <section id="downloads"> 
529            <div class="d-flex container-fluid custom-container mt-20"> 
530                <div class="sheet tw-bg-light tw:space-y-4 p-3"> 
531                    <#list tourismItem.downloadsFieldSet.downloadsFieldSetFieldSet.getSiblings() as item> 
532                        <#-- #assign doc = getFileFromUuid(createObject(item.downloadUrl.data).uuid, groupId) --> 
533                         
534                        <div class="card tw:bg-transparent tw:border-0 tw:shadow-none"> 
535                            <div class="card-row"> 
536                                <div class="autofit-col"> 
537                                    <div class="autofit-section"> 
538                                        <i class="fal fa-file-pdf fa-lg tw:text-dark"></i> 
539                                    </div> 
540                                </div> 
541                                <div class="autofit-col autofit-col-expand autofit-col-gutters"> 
542                                    <div class="autofit-section"> 
543                                        <a href="${item.downloadUrl.getData()}" class="tw:text-dark tw:font-bold" download> 
544                                            <#-- ${doc.fileName} --> 
545                                            ${item.downloadText.getData()} 
546                                             
547                                            <span class="tw:font-light muted tw:ml-2">(${getLabel('scarica_qui')})</span> 
548                                        </a> 
549                                    </div> 
550                                </div> 
551                            </div> 
552                        </div> 
553                    </#list> 
554                </div> 
555            </div> 
556        </section> 
557    </#if> 
558     
559     
560    <#macro contatti> 
561    <#assign  
562            contactNameSz="" 
563            street_number1Sz="" 
564            localitaSz="" 
565            comuneSz="" 
566            countrySz="" 
567            zipCodeSz="" 
568            telSz="" 
569            emailSz="" 
570            email2Sz="" 
571            webSiteSz="" 
572            facebookSz="" 
573            instagramSz="" 
574            thereAreContcats="false" 
575    /> 
576    <#if tourismItem.contactFields.singleContact.contactName?? && tourismItem.contactFields.singleContact.contactName.getData()?has_content> 
577        <#assign contactNameSz=tourismItem.contactFields.singleContact.contactName.getData()> 
578        <#assign thereAreContcats="true"> 
579    </#if> 
580    <#if tourismItem.contactFields.singleContact.street_number1?? && tourismItem.contactFields.singleContact.street_number1.getData()?has_content> 
581        <#assign street_number1Sz=tourismItem.contactFields.singleContact.street_number1.getData()> 
582        <#assign thereAreContcats="true"> 
583    </#if> 
584    <#if tourismItem.contactFields.singleContact.localita?? && tourismItem.contactFields.singleContact.localita.getData()?has_content> 
585        <#assign localitaSz=tourismItem.contactFields.singleContact.localita.getData()> 
586        <#assign thereAreContcats="true"> 
587    </#if> 
588    <#if tourismItem.contactFields.singleContact.comune?? && tourismItem.contactFields.singleContact.comune.getData()?has_content> 
589        <#assign comuneSz=tourismItem.contactFields.singleContact.comune.getData()> 
590        <#assign thereAreContcats="true"> 
591    </#if> 
592    <#if tourismItem.contactFields.singleContact.country?? && tourismItem.contactFields.singleContact.country.getData()?has_content> 
593        <#assign countrySz=tourismItem.contactFields.singleContact.country.getData()> 
594        <#assign thereAreContcats="true"> 
595    </#if> 
596    <#if tourismItem.contactFields.singleContact.zipCode?? && tourismItem.contactFields.singleContact.zipCode.getData()?has_content> 
597        <#assign zipCodeSz=tourismItem.contactFields.singleContact.zipCode.getData()> 
598        <#assign thereAreContcats="true"> 
599    </#if> 
600    <#if tourismItem.contactFields.singleContact.tel?? && tourismItem.contactFields.singleContact.tel.getSiblings()?has_content> 
601        <#assign telSz=tourismItem.contactFields.singleContact.tel.getSiblings()> 
602        <#assign thereAreContcats="true"> 
603    </#if> 
604    <#if tourismItem.contactFields.singleContact.email?? && tourismItem.contactFields.singleContact.email.getData()?has_content> 
605        <#assign emailSz=tourismItem.contactFields.singleContact.email.getData()> 
606        <#assign thereAreContcats="true"> 
607    </#if> 
608    <#if tourismItem.contactFields.singleContact.email2?? && tourismItem.contactFields.singleContact.email2.getData()?has_content> 
609        <#assign email2Sz=tourismItem.contactFields.singleContact.email2.getData()> 
610        <#assign thereAreContcats="true"> 
611    </#if> 
612    <#if tourismItem.contactFields.singleContact.webSite?? && tourismItem.contactFields.singleContact.webSite.getData()?has_content> 
613        <#assign webSiteSz=tourismItem.contactFields.singleContact.webSite.getData()> 
614        <#assign thereAreContcats="true"> 
615    </#if> 
616    <#if tourismItem.contactFields.singleContact.facebook?? && tourismItem.contactFields.singleContact.facebook.getData()?has_content> 
617        <#assign facebookSz=tourismItem.contactFields.singleContact.facebook.getData()> 
618        <#assign thereAreContcats="true"> 
619    </#if> 
620    <#if tourismItem.contactFields.singleContact.instagram?? && tourismItem.contactFields.singleContact.instagram.getData()?has_content> 
621        <#assign instagramSz=tourismItem.contactFields.singleContact.instagram.getData()> 
622        <#assign thereAreContcats="true"> 
623    </#if> 
624     
625    <#assign acapo="false"> 
626    <#if thereAreContcats == "true"> 
627    <div class="text-dark mt-4">         
628            <#if contactNameSz != ""> 
629                ${contactNameSz} 
630                <#assign acapo="true"> 
631            </#if> 
632            <#if street_number1Sz != ""> 
633                <#if acapo == "true"><br/></#if> 
634                ${street_number1Sz} 
635                <#assign acapo="true"> 
636            </#if> 
637            <#if localitaSz  != ""> 
638                <#if acapo == "true"><br/></#if> 
639                ${localitaSz} 
640                <#assign acapo="true"> 
641            </#if> 
642     
643            <#if zipCodeSz != "" || comuneSz != "" || countrySz != ""> 
644                <#if acapo == "true"><br/></#if> 
645                ${zipCodeSz} ${comuneSz} ${countrySz} 
646                <#assign acapo="true"> 
647            </#if> 
648            
649            <#if telSz?has_content> 
650                <#assign telExists = false> 
651                 
652                <#list telSz as tel> 
653                    <#if tel.getData()?has_content> 
654                        <#assign telExists = true> 
655                        <#break> 
656                    </#if> 
657                </#list> 
658                 
659                <#if telExists> 
660                    <#if acapo == "true"><br/></#if> 
661                     
662                    <div class="card-row tw:space-x-2"> 
663                        <div class="autofit-col mb-auto"> 
664                            <div class="autofit-section"> 
665                                <p class="tw:text-dark tw:text-base mb-0">${getLabel('tel')}:</p> 
666                            </div> 
667                        </div> 
668                        <div class="autofit-col autofit-col-expand"> 
669                            <div class="autofit-section"> 
670                                <#list telSz as tel> 
671                                    <p class="tw:text-dark tw:text-base mb-0">${tel.getData()}</p> 
672                                </#list> 
673                            </div> 
674                        </div> 
675                    </div> 
676                     
677                    <#assign acapo="true"> 
678                </#if> 
679            </#if> 
680            <#if emailSz != ""> 
681                <#if acapo == "true"><br/></#if> 
682                ${getLabel('email')}: <a href="mailto:${emailSz}" >${emailSz}</a> 
683                <#if email2Sz != ""> 
684                    <a href="mailto:${email2Sz}" style="margin-left: 20px;">${email2Sz}</a> 
685                 </#if> 
686                <#assign acapo="true"> 
687            </#if> 
688             
689     
690            <#if webSiteSz != "" || facebookSz != "" || instagramSz != ""> 
691                <#if acapo == "true"><br/></#if> 
692                <#if webSiteSz != ""> 
693                    <a href="${webSiteSz}" title="${webSiteSz}" alt="${webSiteSz}" target="_blank">${getLabel('sito-web')}</a>      
694                </#if> 
695                <#if facebookSz != "">   
696                    <a href="${facebookSz}" title="${facebookSz}" alt="${facebookSz}" target="_blank"><i class="fab fa-facebook-f" style="margin-left: 20px;"></i></a>      
697                </#if> 
698                <#if instagramSz != "">  
699                    <a href="${instagramSz}" title="${instagramSz}" alt="${instagramSz}" target="_blank"><i class="fab fa-instagram" style="margin-left: 20px;"></i></a>  
700                </#if> 
701     
702            </#if> 
703                   
704    </div> 
705    </#if> 
706    </#macro> 
707</div> 
708 
709<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/securityV2.js"></script> 
710 
711<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/initVueApp.js"></script> 
712<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/favorites.js"></script> 
713<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/share.js"></script> 
714 
715<script> 
716    var ${portletNamespace}_custom_hook = { 
717        data: { 
718            title: "${tourismItem.title.getData()?js_string}", 
719            item: { 
720                id: "${articleId}", 
721                contentJSON: { 
722                    title: "${tourismItem.title.getData()?js_string}", 
723                    description: "${tourismItem.introDescription.getData()?js_string}", 
724                    geoRef: '${tourismItem.geoRef.getData()}', 
725                    previewPicture: "${tourismItem.previewPicture.getData()}", 
726                    viewUrl: window.location.href 
727                } 
728            }, 
729            loading: true, 
730            coords: { 
731                lat: "${lat}", 
732                lng: "${lng}" 
733            }, 
734            regionLat: "44.3921388", 
735            regionLng: "7.5211695", 
736            slider: null, 
737            gallery: null, 
738            thumbnails: null, 
739            lightbox: null, 
740            map: null 
741        }, 
742        mounted(){ 
743            var that = this; 
744             
745            if(this.coords.lat != 0 && this.coords.lng != 0){ 
746                this.createMap(); 
747            } 
748             
749            if(${hasSlides?c}){ 
750                this.initSlider(); 
751            } 
752             
753            if(${hasGallery?c}){ 
754                this.initGallery(); 
755             
756                $("#lightbox-modal").on("shown.bs.modal", function(e){ 
757                    that.lightbox.update(); 
758                    that.thumbnails.update(); 
759                    that.lightbox.slideTo($(e.relatedTarget).data("slider")); 
760                    that.lightbox.update(); 
761                }); 
762                 
763                $("#lightbox-modal .swiper-wrapper").on("click", function(e){ 
764                    if($(e.target).attr("class").includes("swiper-slide")){ 
765                        $("#lightbox-modal").modal("hide"); 
766                    } 
767                }); 
768            } 
769             
770            this.loading = false; 
771        }, 
772        methods: { 
773            createMap: function(){ 
774                var map = new SuggestoMap("suggesto-map"), 
775                    maskImage = "${images_folder}/cuneo-mask-styled.png", 
776                    maskBounds = [[ 44.86534447171959, 6.845056749880314 ], [ 44.04193085127058, 8.226587511599066 ]], 
777                    location = [ 
778                        parseFloat(this.coords.lat), 
779                        parseFloat(this.coords.lng) 
780                    ], 
781                    mapData = { 
782                        tilelayer: "none", 
783                        tilelayers: [''], 
784                        mapcenter: [ 
785                            parseFloat(this.regionLat), 
786                            parseFloat(this.regionLng) 
787                        ], 
788                        zoom: 9, 
789                        zoomControl: false, 
790                        attributionControl: false, 
791                        markersFilter: "*", 
792                        gestureHandling: false, 
793                        fitBounds: false, 
794                        markers: [], 
795                        layers: [] 
796                    }; 
797                 
798                map.sm.createMap(mapData); 
799                map.sm.disableMapTouch(); 
800         
801                var marker = L.circleMarker(location, { 
802                    radius: 3, 
803                    color: "#000", 
804                    fillOpacity: 1 
805                }).addTo(map.sm.lmap); 
806         
807                var icon = L.divIcon({ 
808                    iconSize: -10, 
809                    html: this.title.toUpperCase() 
810                }); 
811                 
812                L.marker(location, { 
813                    icon: icon 
814                }).addTo(map.sm.lmap); 
815                 
816                L.imageOverlay(maskImage, maskBounds).addTo(map.sm.lmap); 
817                L.imageOverlay(maskImage, maskBounds).bringToFront(); 
818                 
819                this.map = map; 
820            }, 
821            initSlider: function(){ 
822                this.slider = new Swiper("#slideshow .swiper-container", { 
823        			loop: ${(slides > 1)?c}, 
824        			effect: "fade", 
825        			speed: 3000, 
826        			allowTouchMove: false, 
827        			autoplay: { 
828        				delay: 3000, 
829        				disableOnInteraction: false, 
830        			}, 
831        			fadeEffect: { 
832        				crossFade: true, 
833        			}, 
834        		}); 
835            }, 
836            initGallery: function(){ 
837                this.gallery = new Swiper("#gallery .swiper-container", { 
838        			slidesPerView: 1, 
839        			spaceBetween: 25, 
840        			centerSlides: true, 
841        			centerInsufficientSlides: true, 
842        			navigation: { 
843        				prevEl: ".btn-prev", 
844        				nextEl: ".btn-next", 
845        			}, 
846        			breakpoints: { 
847        				768: { 
848        					slidesPerView: 2, 
849        					spaceBetween: 25, 
850        				}, 
851        				992: { 
852        					slidesPerView: 3, 
853        					spaceBetween: 25, 
854        				}, 
855        			}, 
856        		}); 
857        		 
858        		this.thumbnails = new Swiper("#thumbnail-swiper", { 
859                    spaceBetween: 10, 
860                    slidesPerView: 2, 
861                    centerInsufficientSlides: true, 
862                    freeMode: true, 
863                    watchSlidesVisibility: true, 
864                    watchSlidesProgress: true, 
865        			breakpoints: { 
866        				768: { 
867        					slidesPerView: 3 
868        				}, 
869        				992: { 
870        					slidesPerView: 4 
871        				}, 
872        				1200: { 
873        					slidesPerView: 5 
874        				} 
875        			}, 
876                }); 
877                 
878                this.lightbox = new Swiper("#lightbox-swiper", { 
879        		    spaceBetween: 10, 
880                    autoHeight: true, 
881                    observer: true, 
882                    observeSlideChildren: true, 
883                    keyboard: { 
884                        enabled: true 
885                    }, 
886                    navigation: { 
887                        nextEl: ".swiper-button-next", 
888                        prevEl: ".swiper-button-prev" 
889                    }, 
890                    thumbs: { 
891                        swiper: this.thumbnails 
892                    } 
893                }); 
894            }, 
895            customShare: function(type, title, description, image = ""){ 
896                if(type == "facebook"){ 
897                    var winHeight = 450, 
898                        winWidth = 600, 
899                        winTop = window.screen.height / 2 - winHeight / 2, 
900                        winLeft = window.screen.width / 2 - winWidth / 2, 
901                        params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop, 
902                        link = "http://www.facebook.com/sharer.php?s=100&p[title]=" + encodeURIComponent(title) + "&p[summary]=" + encodeURIComponent(description) + "&p[url]=" + window.location.href + "&p[images][0]=" + image; 
903     
904                    window.open(link, "Facebook", params); 
905                } 
906                 
907                if(type == "twitter"){ 
908                    var link = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(title) + "&url=" + encodeURIComponent(window.location.href); 
909                     
910                    window.open(link, "_blank").focus(); 
911                } 
912                 
913                if(type == "pinterest"){ 
914                    var link = "https://pinterest.com/pin/create/button/?url=" + encodeURIComponent(window.location.href) + "&description=" + encodeURIComponent(title); 
915                     
916                    window.open(link, "_blank").focus(); 
917                } 
918                 
919                if(type == "whatsapp"){ 
920                    var link = "https://wa.me?text=" + encodeURIComponent(title + ": " + window.location.href); 
921                     
922                    window.open(link, "_blank").focus(); 
923                } 
924                 
925                if(type == "telegram"){ 
926                    var link = "https://t.me/share/url?url=" + window.location.href + "&text=" + encodeURIComponent(title); 
927                     
928                    window.open(link, "_blank").focus(); 
929                } 
930                 
931                if(type == "print"){ 
932                    window.print(); 
933                } 
934                 
935                if(type == "link"){ 
936                    this.legacyShare(); 
937                } 
938            } 
939        } 
940    }; 
941         
942    document.addEventListener("DOMContentLoaded", function(){ 
943		var app = initVueApp( 
944            "#${portletNamespace}", 
945            "${portletNamespace}", 
946            [d40_favorites, d40_share, ${portletNamespace}_custom_hook] 
947        ); 
948    }); 
949     
950    var groupedCategories = '${groupedCategories?js_string}'; 
951    var contentCoords = [${lat}, ${lng}]; 
952    console.log("espongo " + groupedCategories); 
953</script> 

Aggregatore Risorse

it_IT

Cosa

fare

Nessun risultato trovato

it_IT

Esperienze

Nessun risultato trovato

it_IT

Dove

dormire

Nessun risultato trovato

it_IT

Offerte

Nessun risultato trovato

it_IT

Info

Nessun risultato trovato