Homepage

Margherita di Savoia Salt Pans - Puglia
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Black Lake - Montenegro
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Pietrabbondante Sanctuary - Molise
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Benca Aquaduct - Albania
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Piccinni Theater of Bari - Puglia
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Church of the Virgin's - Montenegro
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Cariponone Waterfalls - Molise
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Ksamil Beach - Albania
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Cathedral of St. Catald in Taranto - Puglia
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Monument to Fallen Fighters - Montenegro
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Ndocciata of Agnone - Molise
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.

Osumi Canyon - Albania
Due Mari - Next generation tourism development
Unleashing connections, empowering development, showcasing authenticity: welcome to Due Mari portal where you will discover wonders on both sides of Adriatic and Ionian Seas waiting to be explored.
Points of interest
Let the journey begin!
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy172.getFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy172 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@70750e37"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign imageDlFileEntry = dlFileEntr... [in template "20097#20123#285407" at line 74, column 57] ----
1<#-- instanceId -->
2<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
3
4<#-- Etichette -->
5<#assign label_leggi_piu = languageUtil.get(locale , "label_leggi_piu")/>
6<#assign label_punti_di_interesse = languageUtil.get(locale , "label_punti_di_interesse")/>
7<#assign label_sottotitolo_punti_di_interesse = languageUtil.get(locale , "label_sottotitolo_punti_di_interesse")/>
8
9<#-- Ricavo servizi utili in seguito -->
10<#-- Servizio utile per ricavare i documenti della DM -->
11<#assign dlFileEntryLocalService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
12<#-- servizio utilizzato per recupare un vocabolario a partire dal suo id -->
13<#assign poiRandomService = serviceLocator.findService("it.linksmt.duemari.assetpublisher.content.api.POIRandomService") />
14
15<#assign entries = poiRandomService.getRandomGroupedByCategoriesPois(groupId) />
16<#-- Inclusione widget template con macros e relativi servizi -->
17<#include "${templatesPath}/COMMON_MACROS" />
18
19<#-- HTML -->
20<#-- INIZIO ADT -->
21<#if !entries?has_content>
22 <#if !themeDisplay.isSignedIn()>
23 ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)}
24 </#if>
25 <section class="card-list poi-card-list bg-white container-full-bg pt-5">
26 <div class="container">
27 <div class="row">
28 <div class="col-12">
29 <div class="alert alert-info">
30 <@liferay_ui["message"] key="there-are-no-results" />
31 </div>
32 </div>
33 </div>
34 </div>
35 </section>
36</#if>
37
38<#if entries?has_content>
39 <section class="card-list poi-card-list bg-white container-full-bg">
40 <div class="slider-poi">
41 <div id="carousel_gallery_${instanceId}" class="owl-carousel owl-theme">
42 <#assign contatore = 0 />
43 <#list entries as curEntry>
44 <#if curEntry.getClassName() == "com.liferay.journal.model.JournalArticle">
45 <#assign contatore = contatore + 1 />
46
47 <#-- ricavo il journalArticle -->
48 <#assign assetRenderer = curEntry.getAssetRenderer()/>
49 <#assign journalArticle = assetRenderer.getAssetObject() />
50
51 <#-- primary key journal article -->
52 <#assign journalArticlePrimKey = journalArticle.resourcePrimKey/>
53
54 <#-- ricavo la view url -->
55 <#assign viewUrl = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) />
56 <#if assetLinkBehavior != "showFullContent">
57 <#assign viewUrl = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewUrl) />
58 </#if>
59
60 <#-- inizializzo le variabili usate in seguito -->
61 <#assign title = "", abstract = "", image = "", imageUrl = "", duration = "", idealPeriod = "" />
62
63 <#-- ricavo dalla struttura i dati che mi servono per creare le card -->
64 <#-- struttura: title - campo obbligatorio -->
65 <#assign title = getFieldValue(journalArticle, 'title') />
66
67 <#-- struttura: abstract -->
68 <#assign abstract = getFieldValue(journalArticle, 'abstract') />
69
70 <#-- struttura: image - blocco ripetibile, prendo la prima -->
71 <#assign image = getFieldValue(journalArticle, 'image') />
72 <#assign imageJson = jsonFactoryUtil.createJSONObject(image) />
73 <#if imageJson?? && imageJson?has_content && imageJson.uuid?? && imageJson.groupId??>
74 <#assign imageDlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(imageJson.uuid,imageJson.groupId?number) />
75 <#assign imageUrl = "/documents/"+groupId+"/"+imageDlFileEntry.getFolderId()+"/"+imageDlFileEntry.getFileName()+"/"+imageJson.uuid />
76 </#if>
77
78 <#-- costruisco l'elemento dello slider -->
79 <#if validator.isNotNull(imageUrl)>
80 <div class="slider-wrap" style="background-image: url('${imageUrl?js_string}');">
81 <img class="img-fluid hide" src="${imageUrl}" alt="${htmlUtil.escapeAttribute(title)}" style="display:none;">
82 <#else>
83 <div class="slider-wrap bg-primary">
84 </#if>
85 <div class="container h-100">
86 <#-- forzo il contenitore al 100% di altezza -->
87 <div class="row h-100">
88 <div class="col-md-10 col-lg-8 offset-lg-1 col-xl-6 offset-xl-1">
89 <div class="slider-content">
90
91 <#-- titolo -->
92 <#if validator.isNotNull(title)>
93 <h1 class="slider-title mb-4">${title}</h1>
94 </#if>
95
96 <#-- abstract -->
97 <#if validator.isNotNull(abstract)>
98 <div class="slider-description d-none d-md-block mb-4">${abstract}</div>
99 </#if>
100
101 <#-- link -->
102 <div class="slider-buttons">
103 <a class="btn btn-outline-white text-uppercase my-2 border-dotted" href="${viewUrl}" title="${label_leggi_piu}">
104 ${label_leggi_piu}
105 </a>
106 </div>
107 </div>
108 </div>
109 </div>
110 </div>
111 </div>
112 <#-- fine slide -->
113
114 </#if>
115 </#list>
116 </div>
117 </div>
118 </section>
119
120 <script type="text/javascript">
121 $(document).ready(function(){
122 var owl = $('#carousel_gallery_${instanceId}');
123 // inizializzazione
124 owl.owlCarousel({
125 loop: true,
126 autoplay: true,
127 autoplaySpeed: 2000,
128 autoplayHoverPause: true,
129 nav: true,
130 navText: ['<span class="fas fa-chevron-left" aria-hidden="true"></span>','<span class="fas fa-chevron-right" aria-hidden="true"></span>'],
131 dots: false,
132 responsiveClass:true,
133 items: 1,
134 responsive:{
135 0:{
136 items:1
137 },
138 768:{
139 items:1
140 },
141 992:{
142 items:1
143 }
144 }
145 })
146
147 // navigazione con tastiera
148 $(document.documentElement).keyup(function(event) {
149 if (event.keyCode == 37) { /*left key*/
150 owl.trigger('prev.owl.carousel', [700]);
151 } else if (event.keyCode == 39) { /*right key*/
152 owl.trigger('next.owl.carousel', [700]);
153 }
154 });
155
156 });
157 </script>
158</#if>