Actualités et perspectives - SFL - DSFRI
Une erreur s'est produite en traitant le modèle.
The following has evaluated to null or missing: ==> fileService.fetchDLFileEntryByUuidAndGroupId(vignetteJSON.getString('uuid'), vignetteJSON.getLong('groupId')) [in template "20099#20136#688905" at line 107, column 50] ---- 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: #assign vignetteFileEntry = fileServi... [in template "20099#20136#688905" at line 107, column 21] ----
1<div id="sfl-aggregateur-content">
2<#-- DELTA : Nombres de résultats par page -->
3<#assign delta = 5 >
4
5<#-- Nom de la structure des contenus à afficher -->
6<#assign structureName = "Blogue" >
7
8<#assign serverName = themeDisplay.getServerName() >
9<#assign virtualHost = (virtualHostLocalService.fetchVirtualHost(serverName))! >
10<#assign isVirtualHost = (virtualHost?has_content && (virtualHost.getLayoutSetId() != 0)) >
11
12<#if entries?has_content >
13 <#assign blogueVedetteFlag = true >
14 <#if locale == "fr_CA" >
15 <#assign lireArticleTexte = "Lire l'article" >
16 <#assign lireVideoTexte = "Visionner la vidéo" >
17 <#assign precedant = "Précédent" >
18 <#assign suivant = "Suivant" >
19 <#assign pagesResultats = "pages de résultats" >
20 <#assign premierePageTexte = "Première page">
21 <#assign dernierePageTexte = "Dernière page" >
22 <#assign motDe = "de" >
23 <#else>
24 <#assign lireArticleTexte = "Read more" >
25 <#assign lireVideoTexte = "Watch video" >
26 <#assign precedant = "Previous" >
27 <#assign suivant = "Next" >
28 <#assign pagesResultats = "pages of results" >
29 <#assign premierePageTexte = "First page" >
30 <#assign dernierePageTexte = "Last page" >
31 <#assign motDe = "of" >
32 </#if>
33 <div class="blog-hub-container">
34 <ul class="blog-hub blog-list list-unstyled">
35 <#list entries as curEntry>
36
37 <#assign renderer = curEntry.getAssetRenderer() >
38 <#assign className = renderer.getClassName() >
39 <#function RetournerUrlSansWebSfl url>
40 <#if url?contains("/web/sfl-staging")>
41 <#assign url = url?replace("/web/sfl-staging","")>
42 </#if>
43 <#if url?contains("/web/sfl")>
44 <#assign url = url?replace("/web/sfl","")>
45 </#if>
46 <#return url>
47 </#function>
48 <#if className?contains("JournalArticle")>
49 <#assign journalArticle = renderer.getArticle() >
50 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) >
51
52 <#assign link = renderer.getURLViewInContext(renderRequest, renderResponse, "") >
53 <#if link?contains("/web/sfl-staging")>
54 <#assign link = link?replace("/web/sfl-staging","")>
55 </#if>
56 <#if link?contains("/web/sfl")>
57 <#assign link = link?replace("/web/sfl","")>
58 </#if>
59
60 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='titreBlogueAggregateur']/dynamic-content") >
61 <#assign titreBlogueAggregateur = node.getText() >
62
63 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='vignetteBlogueAggregateur']/dynamic-content") >
64 <#assign vignetteBlogueAggregateur = node.getText() >
65
66 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='descriptionBlogueAggregateur']/dynamic-content") >
67 <#assign descriptionBlogueAggregateur = node.getText() >
68
69 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='titreBlogue']/dynamic-content") >
70 <#assign titreBlogue = node.getText() >
71
72 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='imageBlogue']/dynamic-content") >
73 <#assign imageBlogue = node.getText() >
74
75 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='video']/dynamic-element[@name='idYoutube']/dynamic-content") >
76 <#assign video = node.getText() >
77
78 <#if blogueVedetteFlag >
79 <#assign blogueVedetteFlag = false >
80 <#assign blogFeatureClass = "blog-featured" >
81 <#else>
82 <#assign blogFeatureClass = "" >
83 <#assign descriptionBlogueAggregateur = "" >
84 </#if>
85
86 <#if video?has_content >
87 <#assign blogVideoClass = "blog-video" >
88 <#assign ctaTexte = lireVideoTexte >
89 <#else>
90 <#assign blogVideoClass = "" >
91 <#assign ctaTexte = lireArticleTexte >
92 </#if>
93
94 <#if titreBlogueAggregateur?has_content >
95 <#assign texteTitreBlogue = titreBlogueAggregateur >
96 <#else>
97 <#assign texteTitreBlogue = titreBlogue >
98 </#if>
99
100 <#if vignetteBlogueAggregateur?has_content >
101 <#assign srcVignetteImg = vignetteBlogueAggregateur >
102 <#else>
103 <#assign srcVignetteImg = imageBlogue >
104 </#if>
105
106 <#assign vignetteJSON = jsonFactoryUtil.createJSONObject(srcVignetteImg) />
107 <#assign vignetteFileEntry = fileService.fetchDLFileEntryByUuidAndGroupId(vignetteJSON.getString('uuid'), vignetteJSON.getLong('groupId')) />
108 <#assign fileURL = themeDisplay.getPathContext() + "/documents/" + vignetteFileEntry.getRepositoryId()?c + "/" + vignetteFileEntry.getFolderId()?c + "/" + urlCodec.encodeURL(htmlUtil.unescape(vignetteFileEntry.getTitle()), true) + "/" + vignetteFileEntry.getUuid() />
109 <#assign srcVignetteImg = fileURL />
110
111 <li class="blog-item ${blogVideoClass!} ${blogFeatureClass!}">
112 <div class="blog-text">
113 <h2 class="blog-title">
114 <a data-senna-off="true" href="${RetournerUrlSansWebSfl(link)}" class="blog-link">${texteTitreBlogue}</a>
115 </h2>
116 <#if descriptionBlogueAggregateur?has_content >
117 <p class="blog-desc">${descriptionBlogueAggregateur}</p>
118 </#if>
119 <span class="blog-cta" aria-hidden="true">${ctaTexte}</span>
120 </div>
121 <div class="blog-img">
122 <img src="${srcVignetteImg}" alt="">
123 </div>
124 </li>
125
126 </#if>
127 </#list>
128
129 </ul>
130 </div>
131</#if>
132
133<#assign structures = ddmStructureLocalService.getStructures(groupId) >
134
135<#list structures as str>
136 <#if str.getName("fr_CA") == structureName >
137 <#assign structureKey = str.getStructureKey() >
138 <#assign structureId = str.getStructureId() >
139 </#if>
140</#list>
141
142<#assign countTag = renderRequest.getAttribute("assetsCount") >
143
144<#assign numNews = countTag >
145
146<#assign cur = "" >
147<#if renderRequest.getParameter("cur")?has_content >
148 <#assign cur = renderRequest.getParameter("cur") >
149</#if>
150<#assign extraNews = numNews % delta >
151<#if cur == "" || getterUtil.getInteger(cur) == 1 >
152 <#assign page = 1 >
153<#else>
154 <#assign page = getterUtil.getInteger(cur) >
155</#if>
156
157<#if (numNews > delta) >
158 <#if extraNews == 0 >
159 <#assign totalPages = (numNews / delta) >
160 <#else>
161 <#assign totalPages = (numNews / delta) + 1 >
162 </#if>
163<#else>
164 <#assign totalPages = 1 >
165</#if>
166
167<#if (page < 3) >
168 <#assign pointer = 3 >
169<#elseif (page > totalPages - 2) >
170 <#assign pointer = totalPages - 2 >
171<#else>
172 <#assign Integer = 0 >
173 <#assign pointer = getterUtil.getInteger(cur) >
174</#if>
175
176<#assign start = pointer - 2 >
177<#if start < 1 >
178 <#assign start = 1 >
179</#if>
180<#assign end = pointer + 2 >
181<#if (end > totalPages) >
182 <#assign end = totalPages >
183</#if>
184
185<#assign end = getterUtil.getInteger(end) >
186<#assign totalPages = getterUtil.getInteger(totalPages) >
187
188<#-- Set pagination URL -->
189<#-- portletURLFactory.create(javax.servlet.http.HttpServletRequest request, String portletId, long plid, String lifecycle) -->
190<#assign paginationBaseURL = portletURLFactory.create(request, themeDisplay.getPortletDisplay().getId(), themeDisplay.getPlid(), "RENDER_PHASE") >
191${(paginationBaseURL.setPortletMode("view"))}
192${(paginationBaseURL.setWindowState("normal"))}
193${(paginationBaseURL.setParameter("delta", delta?string))}
194<#if paramCategoryId?has_content >
195 ${paginationBaseURL.setParameter("categoryId", paramCategoryId?string)}
196</#if>
197${(paginationBaseURL.setParameter("advancedSearch", "false"))}
198${(paginationBaseURL.setParameter("andOperator", "true"))}
199${(paginationBaseURL.setParameter("resetCur", "false"))}
200${(paginationBaseURL.setParameter("sfl-senna-route", "true"))}
201
202<#assign ppid = themeDisplay.getPortletDisplay().getId() >
203
204<nav class="navPagination" aria-label="${totalPages} ${(pagesResultats)!}">
205<ul class="pagination">
206 <#if (page > 1) >
207 <li class="page-item visible-xs-inline">
208 ${(paginationBaseURL.setParameter("cur", "1"))}
209
210 <#assign paginationBaseURLStr = paginationBaseURL?string >
211 <#if paginationBaseURLStr?contains("/web/sfl-staging")>
212 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl-staging","")>
213 </#if>
214 <#if paginationBaseURLStr?contains("/web/sfl")>
215 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl","")>
216 </#if>
217 <a data-senna-sfl="true" href="${paginationBaseURLStr}#sfl-aggregateur-content" class="page-link first" role="button">
218 <span class="sr-only">${(premierePageTexte)!}</span>
219 </a>
220 </li>
221 <li class="page-item">
222 <#assign previousPageNumber = page - 1 >
223 ${(paginationBaseURL.setParameter("cur", previousPageNumber?string))}
224
225 <#assign paginationBaseURLStr = paginationBaseURL?string >
226 <#if paginationBaseURLStr?contains("/web/sfl-staging")>
227 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl-staging","")>
228 </#if>
229 <#if paginationBaseURLStr?contains("/web/sfl")>
230 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl","")>
231 </#if>
232 <a data-senna-sfl="true" href="${paginationBaseURLStr}#sfl-aggregateur-content" class="btn btn-default precedent page-link" role="button"><span class="hidden-xs">${(precedant)!}</span></a>
233 </li>
234 </#if>
235
236 <li class="page-item visible-xs-inline">
237 <span class="page-link text"><span class="sr-only">Page </span>${page} ${(motDe)!} ${totalPages}</span>
238 </li>
239
240 <#if (totalPages > 1) >
241 <#list start..end as i >
242 <#if i != page >
243 <li class="page-item hidden-xs">
244 ${(paginationBaseURL.setParameter("cur", i?string))}
245
246 <#assign paginationBaseURLStr = paginationBaseURL?string >
247 <#if paginationBaseURLStr?contains("/web/sfl-staging")>
248 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl-staging","")>
249 </#if>
250 <#if paginationBaseURLStr?contains("/web/sfl")>
251 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl","")>
252 </#if>
253 <a data-senna-sfl="true" href="${paginationBaseURLStr}#sfl-aggregateur-content" class="page-link number" aria-pressed="false" aria-controls="table" role="button"><span class="sr-only">Page </span>${i}</a>
254 </li>
255 <#else>
256 <li class="page-item active hidden-xs">
257 <a data-senna-sfl="true" href="#" class="page-link number selected" tabindex="0" aria-pressed="true" aria-controls="table" role="button"><span class="sr-only">Page </span>${page}</a>
258 </li>
259 </#if>
260 </#list>
261 </#if>
262
263 <#if (page < totalPages) >
264 <li class="page-item">
265 <#assign nextPageNumber = page + 1 >
266 ${(paginationBaseURL.setParameter("cur", nextPageNumber?string))}
267 <#assign paginationBaseURLStr = paginationBaseURL?string >
268 <#if paginationBaseURLStr?contains("/web/sfl-staging")>
269 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl-staging","")>
270 </#if>
271 <#if paginationBaseURLStr?contains("/web/sfl")>
272 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl","")>
273 </#if>
274 <a data-senna-sfl="true" href="${paginationBaseURLStr}#sfl-aggregateur-content" class="btn btn-default suivant page-link" role="button"><span class="hidden-xs">${(suivant)!} </span></a>
275 </li>
276 <li class="page-item visible-xs-inline">
277 ${(paginationBaseURL.setParameter("cur", totalPages?string))}
278 <#assign paginationBaseURLStr = paginationBaseURL?string >
279 <#if paginationBaseURLStr?contains("/web/sfl-staging")>
280 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl-staging","")>
281 </#if>
282 <#if paginationBaseURLStr?contains("/web/sfl")>
283 <#assign paginationBaseURLStr = paginationBaseURLStr?replace("/web/sfl","")>
284 </#if>
285 <a data-senna-sfl="true" href="${paginationBaseURLStr}#sfl-aggregateur-content" class="page-link last" role="button">
286 <span class="sr-only">${(dernierePageTexte)!}</span>
287 </a>
288 </li>
289 </#if>
290</ul>
291</nav>
292<script type="text/javascript">
293 //code executé lorsqu'on navigue dans les blogues et les catégorie
294 if (typeof editBlogItems !== "undefined") {
295 editBlogItems();
296 }
297 //code executé seulement au chargement de la page
298 document.addEventListener('blogMethodReady', function (elem) {
299 editBlogItems();
300 }, false);
301
302</script>
303</div>