Home Page
learn
Community at the Center
Access to training courses, orientation programs for young people, online membership at the Acclavio Civic Library, conferences and many other initiatives aimed at expanding the boundaries of knowledge
move
Accessibility and Connection
Move efficiently in Taranto! Discover cycling routes, geolocate the nearest scooter or search for the fastest route to reach your destination. Do you have an electric car? Find out where to recharge it!
see
Culture and Tourism
All the historical and cultural heritage just a click away! Visit Taranto from a drone, discover virtual tours and tourist routes, book online visits and tickets for museums and theaters.do you want to jump into the past? Discover the magic of 3d reconstructions!
inhabit
Culture of Living
Knowing how the city evolves is important! Discover the redevelopment projects, concession and lease calls. Do you need to request a change of residence or an electoral card? Do it from your smartphone!
work
Innovation and Business
Seize the investment opportunities by consulting the active calls! In this section you can discover the main innovation initiatives and express interest in participating. What are you waiting for? Take a tour and find out more
five ways to experience Taranto

Culture and Tourism
All the historical and cultural heritage just a click away! Visit Taranto from a drone, discover virtual tours and tourist routes, book online visits and tickets for museums and theaters.do you want to jump into the past? Discover the magic of 3d reconstructions!

Accessibility and Connection
Move efficiently in Taranto! Discover cycling routes, geolocate the nearest scooter or search for the fastest route to reach your destination. Do you have an electric car? Find out where to recharge it!

Culture of Living
Knowing how the city evolves is important! Discover the redevelopment projects, concession and lease calls. Do you need to request a change of residence or an electoral card? Do it from your smartphone!

Innovation and Businesses
Seize the investment opportunities by consulting the active calls! In this section you can discover the main innovation initiatives and express interest in participating. What are you waiting for? Take a tour and find out more

Community at the Center
Access to training courses, orientation programs for young people, online membership at the Acclavio Civic Library, conferences and many other initiatives aimed at expanding the boundaries of knowledge
what to do these days
The following has evaluated to null or missing:
==> startDates [in template "20097#20123#886009" at line 54, column 12]
----
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: #list startDates as sd [in template "20097#20123#886009" at line 54, column 5]
----
1<#assign eventiTemplateId = "TARANTO-TIMELINE-CAROUSEL-EVENTI-ITEM-TEMPLATE">
2
3<#if entries?has_content>
4<div id="tt-event-carousel">
5 <div class="container max-container-1410">
6
7 <div id="tt-event-carousel-content-evh" class="tt-event-carousel-content">
8
9 <#assign apDisplayContext = renderRequest.getAttribute("ASSET_PUBLISHER_DISPLAY_CONTEXT") />
10 <#assign order = apDisplayContext.getOrderByColumn1() />
11 <#assign startDates = [] />
12 <#assign priorities = [] />
13
14 <#list entries as curEntry>
15 <#assign
16 assetRenderer = curEntry.getAssetRenderer()
17 journalArticle = assetRenderer.getAssetObject()
18 priority = curEntry.getPriority()
19 />
20
21 <#assign
22 document = saxReaderUtil.read(journalArticle.getContent())
23 rootElement = document.getRootElement()
24 xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='endDate']")
25 endDate = getterUtil.getString(xPathSelector.selectSingleNode(rootElement).getStringValue())
26 xPathSelector2 = saxReaderUtil.createXPath("dynamic-element[@name='startDate']")
27 startDate = getterUtil.getString(xPathSelector2.selectSingleNode(rootElement).getStringValue())
28 />
29
30 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate, locale)>
31
32 <@liferay_journal["journal-article"]
33 articleId=journalArticle.getArticleId()
34 ddmTemplateKey=eventiTemplateId
35 groupId=journalArticle.getGroupId()
36 />
37
38 <#assign startDates = startDates + [startDate_DateObj?datetime?string('yyyy-MM-dd')] />
39 <#assign priorities = priorities + [priority] />
40
41 </#list>
42 </div><#-- /#tt-event-carousel-content-evh -->
43
44 </div><#-- /.container -->
45</div><#-- /#tt-event-carousel -->
46</#if>
47
48<script>
49
50
51 jQuery(document).ready(function() {
52
53 var startDatesJS = [];
54 <#list startDates as sd>
55 startDatesJS.push(new Date('${sd}'));
56 </#list>
57
58 var prioritiesJS = [];
59 <#list priorities as p>
60 prioritiesJS.push(${p});
61 </#list>
62
63 for(var i = 0; i < prioritiesJS.length; i++){
64 $('.tt-event-carousel-item').eq(i).addClass('priority' + prioritiesJS[i]);
65 }
66
67 jQuery('#wrapper').css('overflow','hidden');
68
69 var fixIds = function() {
70 jQuery('#tt-event-carousel-content-evh .slick-slide').removeClass('slick-active-01 slick-active-02 slick-active-03');
71 var activeSlides = $('#tt-event-carousel-content-evh .slick-slide.slick-active');
72 activeSlides.each(function( index ) {
73 if (index>2){return false;}
74 jQuery(this).addClass('slick-active-0'+(index+1));
75 });
76 }
77
78 var fixFocus = function(theTarget, currentSlide, nextSlide) {
79 if (nextSlide > currentSlide){
80 $(theTarget).find("button.slick-prev.slick-arrow").focus();
81 } else if (nextSlide < currentSlide) {
82 $(theTarget).find("button.slick-next.slick-arrow").focus();
83 }
84 }
85
86 var _previouSlide;
87
88 jQuery('#tt-event-carousel-content-evh').on('init', function(event, slick) {
89 fixIds();
90 _previouSlide = 0;
91 accFeature.fixSlickAcc("<@liferay.language key='previous'/>", "<@liferay.language key='next'/>");
92 });
93
94 <#if order?contains("modifiedDate")>
95
96 var elem = $('#tt-event-carousel-content-evh .journal-content-article').sort(sortMe);
97 $('#tt-event-carousel-content-evh').prepend(elem);
98
99 function sortMe(a, b) {
100 var classA = $(a).find('.tt-event-carousel-item').attr('class').split("startDate-")[1];
101 var classB = $(b).find('.tt-event-carousel-item').attr('class').split("startDate-")[1];
102 var classPriorityA = $(a).find('.tt-event-carousel-item').attr('class').split("priority")[1];
103 var classPriorityB = $(b).find('.tt-event-carousel-item').attr('class').split("priority")[1];
104 var startA = classA.substring(0,10);
105 var startB = classB.substring(0,10);
106 var priorityA = classPriorityA.substring(0,1);
107 var priorityB = classPriorityB.substring(0,1);
108 var splitA = startA.split('-');
109 var splitB = startB.split('-');
110
111 var dateA = new Date(splitA[1] + '-' + splitA[0] + '-' + splitA[2]);
112 var dateB = new Date(splitB[1] + '-' + splitB[0] + '-' + splitB[2]);
113
114 if(priorityA < priorityB){
115 return 1;
116 }else if(priorityA > priorityB){
117 return -1;
118 }else if(priorityA === priorityB){
119 if(dateA < dateB){
120 return 1;
121 }else if(dateA > dateB){
122 return -1;
123 }else if(dateA.getTime() === dateB.getTime()){
124 return 0;
125 }
126 }
127 }
128
129 </#if>
130
131 var theSlick = jQuery('#tt-event-carousel-content-evh').slick({
132 slidesToShow: 3,
133 slidesToScroll: 3,
134 autoplay: false,
135 dots: true,
136 arrows: true,
137 infinite: false,
138 responsive: [
139 {
140 breakpoint: 1200,
141 settings: {
142 slidesToShow: 2,
143 slidesToScroll: 2,
144 dots: false
145 }
146 },
147 {
148 breakpoint: 768,
149 settings: {
150 slidesToShow: 1,
151 slidesToScroll: 1,
152 dots: false
153 }
154 }
155 ]
156 });
157
158 theSlick.on("afterChange", function(event, slick, currentSlide) {
159 fixIds();
160 fixFocus(event.target, _previouSlide, currentSlide);
161 accFeature.fixSlickAcc("<@liferay.language key='previous'/>", "<@liferay.language key='next'/>");
162 });
163
164 theSlick.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
165 _previouSlide = currentSlide;
166 });
167
168
169 });
170
171</script>
in evidence
-
Welcome
Welcome to the Taranto Ecosystem! The tourist portal of the Municipality of Taranto dedicated to all users who wish to get to know the city better from multiple perspectives. Aren't you from around here?
info point Discover the tourist routesInteract
In this section you have access to the multifunctional telematic counter of the Municipality of Taranto. Discover the online services dedicated to citizens and businesses or simply make a virtual appointment (remotely) with the Municipality.
access the Online Services