Viaggi Studio in Irlanda

Programmi per Anno scolastico all'estero
Vedi tuttiProgrammi per Corsi Online
Vedi tuttiProgrammi per PCTO (per gruppi scuole)
Vedi tuttiProgrammi per Stage linguistico (per gruppi scuole)
Vedi tuttiProgrammi per Soggiorni studio 18+
Vedi tuttiNessun risultato
Si è verificato un errore nell'elaborarazione del modello.
Java method "com.sun.proxy.$Proxy76.getCategory(long)" threw an exception when invoked on com.sun.proxy.$Proxy76 object "com.liferay.asset.categories.internal.service.AssetEntryAssetCategoryRelAssetCategoryLocalServiceWrapper@6fe2d465"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #return ACLS.getCategory(categoryId)... [in template "1724005" in function "getCategoryName" at line 215, column 5] - Reached through: ${d40.getCategoryName(queryValues0[0]... [in template "383767#383802#2181264" at line 74, column 29] ----
1<#import "${templatesPath}/1724005" as d40>
2
3<#assign
4 DLAppLocalServiceUtil = staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
5 mkspAPI = serviceLocator.findService("eu.suggesto.suggestogui.service.SuggestoGuiLocalService")
6 favouriteServiceAPI = serviceLocator.findService("eu.suggesto.d40.builder.d40.service.FavoriteServiceLocalService")
7 wishlistObj = favouriteServiceAPI.getWishList(groupId, themeDisplay.getSessionId(), themeDisplay.getUserId()?string)
8 wishlist = wishlistObj.getJSONArray("data")
9 serverName = request.getServerName()
10 defLng = themeDisplay.getSiteDefaultLocale()
11 vocTipoProgramma = 1080085
12 vocSottocategoriaProgramma = 1088412
13 structureProgramma = 932161
14 structureSoggiorno = 402303
15 portletTitle = ""
16 btnLink = "#"
17 articleId = 1
18 portletClass = "d-none"
19
20 prefs = renderRequest.getPreferences()
21 structureKey = ""
22 classTypeIds = prefs.getValue("classTypeIds", "")!""
23 classTypeIds = prefs.getValue("classTypeIds", "")!""
24 orderByColumn1 = prefs.getValue("orderByColumn1", "")!""
25 orderByColumn2 = prefs.getValue("orderByColumn2", "")!""
26 orderByType1 = prefs.getValue("orderByType1", "")!""
27 orderByType2 = prefs.getValue("orderByType2", "")!""
28 queryValues0 = prefs.getValues("queryValues0", null)!""
29 queryValues1 = prefs.getValues("queryValues1", null)!""
30 f0 = prefs.getValue("queryValues0", "")
31 f1 = prefs.getValue("queryValues1", "")
32 queryAndOperator0 = prefs.getValue("queryAndOperator0", "")
33 queryAndOperator1 = prefs.getValue("queryAndOperator1", "")
34 numItems = prefs.getValue("delta", "10")!5
35/>
36
37<#if entries?has_content>
38 <#assign portletClass = "">
39</#if>
40
41<#if classTypeIds?has_content>
42 <#assign structureKey = classTypeIds?number-1!>
43</#if>
44
45<#if queryValues0?has_content>
46 <#assign f0 = queryValues0?join(", ")>
47</#if>
48
49<#if queryValues1?has_content>
50 <#assign f1 = queryValues1?join(", ")>
51</#if>
52
53<#if structureKey == structureProgramma>
54 <#assign
55 portletTitle = "Programmi"
56 btnLink = "/ricerca-programmi"
57 />
58</#if>
59<#if structureKey == structureSoggiorno>
60 <#assign
61 portletTitle = "Soggiorni studio"
62 btnLink = "/soggiorni-studio"
63 />
64</#if>
65
66<section id="${d40.portletNamespace}" class="${portletClass}">
67 <#if portletTitle?has_content>
68 <div class="container pt-5 my-5">
69 <div class="d-flex justify-content-between">
70 <p class="h1 display-5 text-center text-lg-left title-responsive title-large text-gradient jost font-weight-bolder text-uppercase my-auto">
71 ${portletTitle}
72
73 <#if queryValues0?has_content && queryValues0[0]!= "1205870" >
74 per ${d40.getCategoryName(queryValues0[0]?number)}
75 </#if>
76 </p>
77
78 <a href="${btnLink}" class="see-all btn btn-gradient btn-lg d-none d-lg-flex px-5 ml-auto">
79 <span class="my-auto">Vedi tutti</span>
80 </a>
81 </div>
82 </div>
83 </#if>
84
85 <#if entries?has_content>
86 <div class="swiper-container px-3 px-lg-0">
87 <div class="card-row carousel-controls position-absolute half-float mb-5 mb-lg-0">
88 <div class="autofit-col autofit-col-expand no-events">
89 <section class="autofit-section">
90 <div class="swiper-button-prev rounded-circle raised all-events">
91 <i class="fas fa-caret-left text-white"></i>
92 </div>
93 </section>
94 </div>
95 <div class="autofit-col autofit-col-expand no-events">
96 <section class="autofit-section">
97 <div class="swiper-button-next rounded-circle raised all-events">
98 <i class="fas fa-caret-right text-white"></i>
99 </div>
100 </section>
101 </div>
102 </div>
103 <div class="swiper-wrapper">
104
105 <#list entries as entry>
106 <#assign
107 entry = entry
108 assetRenderer = entry.getAssetRenderer()
109 className = assetRenderer.getClassName()
110 entryTitle = htmlUtil.escape(assetRenderer.getTitle(themeDisplay.getLocale()))
111 />
112
113 <#if className == "com.liferay.journal.model.JournalArticle">
114 <#assign
115 journalArticle = assetRenderer.getArticle()
116 document = saxReaderUtil.read(journalArticle.getContent())
117 rootElement = document.getRootElement()
118 articleId = journalArticle.articleId
119 />
120
121 <#assign stringSelector = "dynamic-element[@name='anteprima']">
122 <#assign xPathSelector = saxReaderUtil.createXPath(stringSelector)>
123 <#if xPathSelector.selectSingleNode(rootElement)??>
124 <#assign
125 immagine = xPathSelector.selectSingleNode(rootElement).getStringValue()
126 fileEntryId = assetRenderer.getClassPK()
127 />
128 <#if immagine?trim?has_content>
129 <#assign
130 jsonField = jsonFactoryUtil.createJSONObject(immagine)
131 fileEntry = DLAppLocalServiceUtil.getFileEntryByUuidAndGroupId(jsonField.uuid, groupId)
132 immagine = "/documents/" + jsonField.groupId + "/" + fileEntry.folderId + "/" + jsonField.title + "/" + jsonField.uuid
133 />
134 <#else>
135 <#assign immagine = "https://via.placeholder.com/450x300?text=Anteprima">
136 </#if>
137 </#if>
138
139 <#assign stringSelector = "dynamic-element[@name='nome_scuola']/dynamic-content[@language-id = '" + themeDisplay.getLocale() + "']">
140 <#assign xPathSelector = saxReaderUtil.createXPath(stringSelector)>
141 <#if xPathSelector.selectSingleNode(rootElement)??>
142 <#assign nome = xPathSelector.selectSingleNode(rootElement).getStringValue()>
143 </#if>
144
145 <#assign viewUrl = mkspAPI.getArticleUrl(groupId, serverName, journalArticle.articleId, localeUtil.fromLanguageId(themeDisplay.getLocale()), defLng, "/placeholder")>
146
147 <div class="swiper-slide">
148 <a href="${viewUrl}" class="card aspect-ratio aspect-ratio-3-to-4 card-item-first rounded invertible hoverable">
149 <img data-src="${d40.getPrefix(immagine, 550, 365)}" loading="lazy" class="lazyload aspect-ratio-item-vertical-fluid fit-cover w-100 h-100" alt="${entryTitle}">
150 <div class="overlay"></div>
151 <div class="d-flex card-img-overlay">
152 <div class="w-100 mt-auto">
153 <div class="mb-4">
154 <p class="h2 text-truncate font-weight-bold text-white jost text-uppercase mb-0">${entryTitle}</p>
155 <p class="h2 text-white jost font-weight-regular"></p>
156 <p class="h2 font-weight-bold text-white jost text-uppercase mb-0"></p>
157
158 <#list d40.getEntryCategories(entry) as cat>
159 <#if cat.vocabularyId == vocTipoProgramma>
160 <div class="btn btn-gradient no-events px-2 py-1">
161 ${cat.name}
162
163 <img src="${d40.icons_folder}/world_marker_white.svg" class="ml-1" height="25">
164 </div>
165 </#if>
166 </#list>
167 </div>
168 </div>
169 </div>
170 </a>
171 <div class="triangle-top d-flex position-absolute rounded-right">
172 <div class="mb-auto ml-auto p-3 p-lg-2 text-right">
173 <#if isFavourite(articleId)>
174 <button class="btn btn-monospaced bg-transparent" onclick="removeFavourite('${articleId}')">
175 <img src="${d40.icons_folder}/heart_filled.svg" width="35" height="35">
176 </button>
177 <#else>
178 <button class="btn btn-monospaced bg-transparent" onclick="addFavourite('${articleId}')">
179 <img src="${d40.icons_folder}/heart.svg" width="35" height="35">
180 </button>
181 </#if>
182 </div>
183 </div>
184 </div>
185 </#if>
186 </#list>
187 </div>
188 </div>
189 <#else>
190 <div class="row">
191 <div class="col-12 text-center">
192 <p class="text-dark my-4">Nessun risultato</p>
193 </div>
194 </div>
195 </#if>
196
197 <div class="container text-center my-4">
198 <a href="#" class="btn btn-gradient btn-lg d-lg-none px-5">
199 <span class="my-auto">Vedi tutti</span>
200 </a>
201 </div>
202</section>
203
204<script>
205 document.addEventListener("DOMContentLoaded", function (){
206 function addFavourite(elemId){
207 Liferay.Service('/destinazione.favorite/add-to-wish-list', {
208 groupId: Liferay.ThemeDisplay.getScopeGroupId(),
209 sessionId: String(Liferay.ThemeDisplay.getSessionId()),
210 userId: String(Liferay.ThemeDisplay.getUserId()),
211 itemGroupId: 11,
212 itemId: String(elemId)
213 }, function(res) {
214 console.log("addToWishList response: ", res);
215 }).catch(function(err){
216 console.error("Error adding to wishlist: ", err);
217 });
218
219 Liferay.Portlet.refresh('#p_p_id${renderResponse.getNamespace()}');
220 }
221
222 function removeFavourite(elemId){
223 Liferay.Service('/destinazione.favorite/get-wish-list', {
224 groupId: Liferay.ThemeDisplay.getScopeGroupId(),
225 sessionId: String(Liferay.ThemeDisplay.getSessionId()),
226 userId: String(Liferay.ThemeDisplay.getUserId()),
227 }, function(res){
228 console.log("getWishList response: ", res);
229
230 if(res.data){
231 res.data.forEach(function(elem){
232 if(elem.itemId == elemId){
233 elemOid = elem._id.$oid;
234
235 Liferay.Service('/destinazione.favorite/delete-item-from-wish-list', {
236 oid: elemOid
237 }, function(res) {
238 console.log("deleteFromWishList response: ", res);
239 }).catch(function(err){
240 console.error("Error removing from wishlist: ", err);
241 });
242 }
243 });
244 }
245 }).catch(function(err){
246 console.log("Error adding to wishlist: ", err);
247 });
248
249 Liferay.Portlet.refresh('#p_p_id${renderResponse.getNamespace()}');
250 }
251
252 <#if entries?has_content>
253 new Swiper("#${d40.portletNamespace} .swiper-container", {
254 slidesPerView: 1,
255 spaceBetween: 25,
256 navigation: {
257 nextEl: '.swiper-button-next',
258 prevEl: '.swiper-button-prev',
259 },
260 breakpoints: {
261 576: {
262 slidesPerView: 1,
263 spaceBetween: 20
264 },
265 992: {
266 slidesPerView: 3,
267 spaceBetween: 25
268 },
269 1200: {
270 slidesPerView: 5,
271 spaceBetween: 25
272 }
273 }
274
275 });
276 </#if>
277 });
278</script>
279
280<#function isFavourite articleId>
281 <#assign ret = false>
282
283 <#if (wishlist.length() > 0)>
284 <#list 0..wishlist.length()-1 as i>
285 <#if wishlist.getString(i)?has_content>
286 <#assign item = wishlist.getJSONObject(i)>
287
288 <#if item.itemId?has_content>
289 <#if item.itemId?number == articleId?number>
290 <#assign ret = true>
291 </#if>
292 </#if>
293 </#if>
294 </#list>
295 </#if>
296
297 <#return ret>
298</#function>
Programmi per Work Experience - Stage
Vedi tuttiesempi di as xml: xml serveResource con templateId (chiave)
esempi di as json: json serveResource con templateId (chiave)
esempi di as json e siteId: json serveResource con siteid