An error occurred while processing the template.
The following has evaluated to null or missing: ==> eta_min [in template "383767#383802#402339" at line 73, column 96] ---- Tip: If the failing expression is known to be 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: ${eta_min} [in template "383767#383802#402339" at line 73, column 94] ----
1<#assign
2 DLAppLocalServiceUtil = staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
3 mkspAPI = serviceLocator.findService("eu.suggesto.suggestogui.service.SuggestoGuiLocalService")
4
5 serverName = request.getServerName()
6 defLng = themeDisplay.getSiteDefaultLocale()
7/>
8
9<section id="study-stay" data-aos="fade">
10 <div class="container-fluid py-5">
11 <div class="row justify-content-center">
12 <div class="col-12 col-lg-11">
13 <div class="text-dark">
14 <h1 class="display-4">Soggiorni <br><span class="font-weight-bold">studio</span></h1>
15 </div>
16 <div class="row mt-5">
17 <#if entries?has_content>
18 <#list entries as entry>
19 <#assign
20 entry = entry
21 assetRenderer = entry.getAssetRenderer()
22 className = assetRenderer.getClassName()
23 entryTitle = htmlUtil.escape(assetRenderer.getTitle(themeDisplay.getLocale()))
24 />
25
26 <#if className == "com.liferay.journal.model.JournalArticle">
27 <#assign
28 journalArticle = assetRenderer.getArticle()
29 document = saxReaderUtil.read(journalArticle.getContent())
30 rootElement = document.getRootElement()
31 />
32
33 <#assign stringSelector = "dynamic-element[@name='anteprima']">
34 <#assign xPathSelector = saxReaderUtil.createXPath(stringSelector)>
35 <#if xPathSelector.selectSingleNode(rootElement)??>
36 <#assign
37 immagine = xPathSelector.selectSingleNode(rootElement).getStringValue()
38 fileEntryId = assetRenderer.getClassPK()
39 />
40 <#if immagine?trim?has_content>
41 <#assign
42 jsonField = jsonFactoryUtil.createJSONObject(immagine)
43 fileEntry = DLAppLocalServiceUtil.getFileEntryByUuidAndGroupId(jsonField.uuid, groupId)
44 immagine = "/documents/" + jsonField.groupId + "/" + fileEntry.folderId + "/" + jsonField.title + "/" + jsonField.uuid
45 />
46 <#else>
47 <#assign immagine = "https://via.placeholder.com/450x300?text=Anteprima">
48 </#if>
49 </#if>
50
51 <#assign stringSelector = "dynamic-element[@name='eta_min']/dynamic-content[@language-id = '" + themeDisplay.getLocale() + "']">
52 <#assign xPathSelector = saxReaderUtil.createXPath(stringSelector)>
53 <#if xPathSelector.selectSingleNode(rootElement)??>
54 <#assign eta_min = xPathSelector.selectSingleNode(rootElement).getStringValue()>
55 </#if>
56
57 <#assign stringSelector = "dynamic-element[@name='eta_max']/dynamic-content[@language-id = '" + themeDisplay.getLocale() + "']">
58 <#assign xPathSelector = saxReaderUtil.createXPath(stringSelector)>
59 <#if xPathSelector.selectSingleNode(rootElement)??>
60 <#assign eta_max = xPathSelector.selectSingleNode(rootElement).getStringValue()>
61 </#if>
62
63 <#assign viewUrl = mkspAPI.getArticleUrl(groupId, serverName, journalArticle.articleId, localeUtil.fromLanguageId(themeDisplay.getLocale()), defLng, "/placeholder")?keep_after("/web/guest")>
64
65 <@setCategories />
66
67 <div class="col-12 col-md-6 col-lg-4 mb-4">
68 <a href="/viaggi-studio" class="tab-horizontal rounded">
69 <div class="size-wrapper">
70 <img data-src="${getPrefix(immagine, 1280, 720)}" draggable="false" loading="lazy" class="w-100 h-100 lazyload fit-cover">
71 <div class="shade position-absolute d-flex flex-column justify-content-end align-items-start w-100 h-100 p-4">
72 <h2 class="text-white font-weight-bold mb-3">${entryTitle}</h2>
73 <h2 class="text-white font-weight-bold mb-0">${eta_min} - ${eta_max}</h2>
74 <p class="text-white mb-0">anni</p>
75 </div>
76 </div>
77 </a>
78 </div>
79 </#if>
80 </#list>
81 </#if>
82 </div>
83 </div>
84 </div>
85 </div>
86</section>
87
88<script>
89 AUI().ready(function(){
90 $("a.tab-horizontal").on("click", function(e){
91 e.preventDefault();
92 var link = $(this).attr('href');
93 var cats = JSON.stringify(${selectedCategories});
94
95 sessionStorage.setItem("fasce", cats);
96 console.log("cats set");
97
98 $(location).attr('href', link);
99 });
100 });
101</script>
102
103<#macro setCategories>
104 <#assign selectedCategories>
105 [
106 <#list entry.getCategories() as cat>
107 <#if cat.vocabularyId == 433795> <#-- Fasce di età -->
108 {
109 "categoryId" : "${cat.categoryId}",
110 "label": "${cat.name}"
111 },
112 </#if>
113 </#list>
114 ]
115 </#assign>
116</#macro>
117
118<#function getPrefix img width height>
119 <#assign
120 baseUrl = "https://d28r45jypu6nt9.cloudfront.net/o/d40/img/"
121 siteUrl = themeDisplay.getURLPortal()?replace("://", ".")
122 w = width
123 h = height
124 />
125 <#if height?is_string>
126 <#assign prefix = baseUrl + "w_" + w + "/" + siteUrl>
127 <#else>
128 <#assign prefix = baseUrl + "w_" + w + ",h_" + h + "/" + siteUrl>
129 </#if>
130
131 <#if !img?contains("/documents/")>
132 <#assign prefix = "">
133 </#if>
134
135 <#return prefix + img>
136</#function>