Viaggi Studio in Spagna

Programmi per Anno scolastico all'estero
Vedi tuttiProgrammi per Corsi Online
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.$Proxy93.getCategory(long)" threw an exception when invoked on com.sun.proxy.$Proxy93 object "com.liferay.asset.categories.internal.service.AssetCategoryPropertyAssetCategoryLocalServiceWrapper@2c3f49e8"; 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