Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> urlListePublicationsDomaine [in template "20116#20152#PUBLICATION" at line 202, column 116] ---- 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: ${urlListePublicationsDomaine} [in template "20116#20152#PUBLICATION" at line 202, column 114] ----
1<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
2<#assign httpServletRequest = serviceContext.getRequest()/>
3<#assign themeDisplay = serviceContext.getThemeDisplay() />
4<#assign cncCategoriesService = serviceLocator.findService("fr.cnc.categories.api.CncCategoriesService") />
5<#assign cncTagsService = serviceLocator.findService("fr.cnc.tags.api.CncTagsService") />
6<#assign cncUrlService = serviceLocator.findService("fr.cnc.url.api.CncUrlService") />
7<#assign ArticleJournalId = .vars['reserved-article-id'].data>
8<#assign categoriesDomainesList = cncCategoriesService.getDomaines(groupId, ArticleJournalId) />
9<#assign categoriesDomainesPrimairesList = cncCategoriesService.getDomainesPrimaires(groupId, ArticleJournalId) />
10<#assign tagEntries = cncTagsService.recupererTagsArticle(groupId, ArticleJournalId) />
11<#assign categoriesTypePublicationList = cncCategoriesService.recupererCategoriesArticleParVocabulaire(groupId, ArticleJournalId , "Type de publication") />
12
13<#-- test si on vient d'une page de liste de contenu -->
14<#assign siPagePrecedenteCorrespondPageListeContenu = cncUrlService.siPagePrecedenteCorrespondPageListeContenu(httpServletRequest) />
15<#assign categoryDomainePrimaireList = "">
16<#assign categoryList = "">
17
18<#if categoriesDomainesPrimairesList?size != 0>
19 <#assign categoryDomainePrimaireList = categoriesDomainesPrimairesList[0]>
20</#if>
21
22<#if categoriesDomainesList?size != 0>
23
24 <#assign categoryList = categoriesDomainesList[0]>
25
26<#-- Calcul de l'url vers la page liste de publication filtrée sur le domaine-->
27 <#if categoriesDomainesPrimairesList?size != 0>
28 <#assign urlListePublicationsDomaine = cncUrlService.calculUrlPageListeDomainePublicationsTypeParArticleId(themeDisplay, journalArticleId, categoryDomainePrimaireList, null) />
29 </#if>
30
31<#-- Calcul de l'url vers la page liste de publication filtrer sur le domaine-->
32 <#assign urlListePublicationsDomaine = cncUrlService.calculUrlPageListeDomainePublicationsTypeParArticleId(themeDisplay, ArticleJournalId, categoryList, null) />
33 <#assign categoriesSousDomainesList = cncCategoriesService.recupererCategoriesArticleParVocabulaire(groupId, ArticleJournalId , "Sous-domaine") />
34 <#if categoriesTypePublicationList?size != 0>
35 <#assign type = categoriesTypePublicationList[0]>
36 <#-- Calcul de l'url vers la page liste de publication filtrer sur le type-->
37 <#assign urlListePublicationsType = cncUrlService.calculUrlPageListeDomainePublicationsTypeParArticleId(themeDisplay, ArticleJournalId, categoryList, type) />
38 </#if>
39
40 <#assign cncArticleRechercheService = serviceLocator.findService("fr.cnc.recherche.api.CncArticleRechercheService") />
41
42 <#assign articlesMemesSujet = cncArticleRechercheService.recupererRenduDerniersArticlesMemeSujet(themeDisplay, ArticleJournalId, "PUBLICATION", categoriesDomainesList, categoriesSousDomainesList, "PUBLICATION-MEME-SUJET", 2) />
43
44</#if>
45
46
47<#setting locale=locale.toString()>
48<#setting datetime_format="EEE, d MMM yyyy HH:mm:ss Z">
49
50<style>
51
52 .news-downloads {
53 display: flex;
54 flex-direction: column;
55 gap: 1rem;
56 padding-top: 10px;
57 }
58
59 .news-downloads .news-download {
60 display: flex;
61 }
62
63 .news-download .details {
64 display: block;
65 }
66
67 .news-download-title {
68 overflow: hidden;
69 display: -webkit-box;
70 -webkit-box-orient: vertical;
71 -webkit-line-clamp: 2;
72 }
73
74</style>
75
76
77<#if siPagePrecedenteCorrespondPageListeContenu>
78 <div class="back">
79 <div class="container">
80 <div class="row">
81 <div class="col">
82 <div class="link-icon">
83 <a href="javascript:boutonRetour.goBack();" >
84 <i class="icon icon-back"></i>
85 <@liferay.language key="pages.liste.bouton.retour.a.la.liste" />
86 </a>
87 </div>
88 </div>
89 </div>
90 </div>
91 </div>
92</#if>
93
94<div class="single publication">
95 <div class="container">
96 <article>
97 <div class="row justify-content-center">
98 <div class="col-12 col-lg-10">
99 <div class="article-head">
100 <div class="article-title">
101 <#assign ArticleJournalTitle = .vars['reserved-article-title'].data>
102 <#if ArticleJournalTitle?has_content>
103 <h1>
104 ${ArticleJournalTitle}
105 </h1>
106 </#if>
107
108 <#assign Templates_Path = templatesPath />
109 <#include "${Templates_Path}/BLOC-SHARETHIS">
110 </div>
111 </div>
112 </div>
113 </div>
114 <div class="article-content">
115 <div class="row">
116 <div class="col-12 col-lg-3" style="overflow: visible">
117 <div style="position: sticky; top: 100px">
118 <div class="picture">
119 <#if VisuelPrincipal?has_content && VisuelPrincipal.getData()?has_content && VisuelPrincipal.getData()?length gt 2>
120 <#assign altVisuelPrincipalDefaut = VisuelPrincipal.getAttribute("name")?split(".")[0] />
121
122 <#if VisuelPrincipal.getAttribute("alt")?has_content>
123 <#assign altVisuelPrincipalDefaut = VisuelPrincipal.getAttribute("alt") />
124 </#if>
125 <img data-fileentryid="${VisuelPrincipal.getAttribute("fileEntryId")}"
126 alt="${altVisuelPrincipalDefaut}"
127 src="${VisuelPrincipal.getData()}&thumb=cncThumb" />
128 </#if>
129 </div>
130 <div class="link-icon news-downloads" style="margin-top: 10px;">
131 <#if FichiersAssocies?has_content && FichiersAssocies.getData()?has_content>
132 <#list FichiersAssocies.getSiblings() as cur_fichiersAssocies>
133 <#assign counter = 0 >
134 <#assign uuId = "" >
135 <#list cur_fichiersAssocies.getData()?split("/") as x>
136 <#if counter == 5>
137 <#if x?split("?t")?has_content >
138 <#assign uuId = x?split("?t")[0] >
139 </#if>
140 </#if>
141 <#assign counter = counter+1 >
142 </#list>
143 <#assign fileEntry = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService")>
144 <#if uuId != "">
145 <#assign file = fileEntry.getFileEntryByUuidAndGroupId(uuId,groupId) >
146 </#if>
147 <#if file?has_content && uuId?has_content>
148
149 <#assign fileExtension = "" />
150 <#if file.getFileName()?has_content && file.getFileName()?split(".")?size gt 1>
151 <#assign fileExtension = file.getFileName()?split(".")[1] />
152 </#if>
153 <#if file.getFileName()?has_content && file.getFileName()?split(".")?size gt 1>
154 <#assign fileExtension = file.getFileName()?split(".")[1] />
155 </#if>
156 <#assign fileSize = 0 />
157
158 <a href="${cur_fichiersAssocies.getData()}" class="round news-download" target="_blank">
159 <div>
160 <i class="icon icon-download"></i>
161 </div>
162 <div>
163 <span class="news-download-title">
164 <#if cur_fichiersAssocies.LibelleDuFichier?has_content && cur_fichiersAssocies.LibelleDuFichier.getData()?has_content>
165 ${cur_fichiersAssocies.LibelleDuFichier.getData()}
166 <#elseif LibelleDuFichier?has_content && LibelleDuFichier.getData()?has_content>
167 <#-- Avant que le champ document devienne repetable le champ libelle n'etait pas un enfant du document.
168 Tant que les contenus web n'ont pas étés re-publiés il faut chercher le contenu du libellé dans l'ancien champ,
169 même si celui-ci n'est plus dans le json de la scruture-->
170 ${LibelleDuFichier.getData()}
171 <#else>
172 <@liferay.language key="article.publication.telechargement" />
173 </#if>
174 </span>
175
176 <#if file.getSize()?has_content>
177 <#assign fileSize = file.getSize()/1000 />
178 <span class="details">
179 (
180 <#if fileExtension?has_content && fileExtension?length gt 0 >
181 <span class="extension">
182 ${fileExtension?upper_case}
183 </span>
184 </#if>
185 <span class="weight">${fileSize?int} Ko</span>)
186 </span>
187 </#if>
188 </div>
189 </a>
190 </#if>
191 </#list>
192 </#if>
193 </div>
194 </div>
195 </div>
196 <div class="col-12 col-lg-8">
197 <div class="infos">
198 <#assign originalLocale = locale>
199 <#setting locale = localeUtil.getDefault()>
200 <#if categoriesDomainesPrimairesList?size != 0>
201 <div class="category">
202 <#if locale.toString()!="en_US"><a href="${urlListePublicationsDomaine}"></#if>
203 ${categoryDomainePrimaireList.getTitle(locale)}
204 <#if locale.toString()!="en_US"></a></#if>
205 </div>
206 </#if>
207
208 <#if tagEntries?has_content>
209 <div class="tags">
210 <div class="title-tag">
211 <@liferay.language key="article.texte.tags" /> :
212 </div>
213 <ul class="list-unstyled">
214 <#list tagEntries as tagEntry>
215 <#assign urlTags = cncUrlService.calculeUrlPageRechercheParTag(themeDisplay, tagEntry.getName()) />
216 <li>
217 <#if locale.toString()!="en_US"><a href="${urlTags}" ></#if>
218 ${tagEntry.getName()}
219 <#if locale.toString()!="en_US"></a></#if>
220 </li>
221 </#list>
222 </ul>
223 </div>
224 </#if>
225
226 <ul class="list-unstyled simple">
227 <li>
228 <strong><@liferay.language key="article.publication.type.publication" /></strong> :
229 <#if categoriesTypePublicationList?size != 0 >
230 <#list categoriesTypePublicationList as categoryTPList>
231 <#if urlListePublicationsType?has_content && locale.toString()!="en_US"><a href="${urlListePublicationsType}"></#if>
232 ${categoryTPList.getTitle(locale)}
233 <#if urlListePublicationsType?has_content && locale.toString()!="en_US"></a></#if>
234 </#list>
235 </#if>
236 </li>
237 <li>
238 <strong><@liferay.language key="article.publication.date" /></strong> :
239 <#assign originalLocale = locale>
240 <#setting locale = localeUtil.getDefault()>
241
242 <#assign displaydate = .vars['reserved-article-display-date'].data>
243 <#assign displaydate = displaydate?datetime("EEE, d MMM yyyy HH:mm:ss Z")>
244 <#if displaydate?has_content>
245 <#assign date_value = dateUtil.getDate(displaydate, "dd/MM/yyyy", locale)>
246 <div class="date date-2" style="margin-top: auto;font-family: Arial;font-size: 1.4rem;color: #212529;">${date_value}</div>
247 </#if>
248 <#setting locale = originalLocale>
249 </li>
250 </ul>
251 <#setting locale = originalLocale>
252 </div>
253 <p>
254 <#if Resume?has_content>
255 <div class="intro">${Resume.getData()}</div>
256 </#if>
257 </p>
258 <p>
259 <#if Contenu?has_content>
260 ${Contenu.getData()}
261 </#if>
262 </p>
263
264 </div>
265 </div>
266 </div>
267 </article>
268 </div>
269 <hr/>
270 <#if articlesMemesSujet?? && articlesMemesSujet?size != 0>
271 <div class="rebound">
272 <div class="container">
273 <div class="related-publications">
274 <div class="row">
275 <div class="col-12 text-center">
276 <div class="section-title"><@liferay.language key="article.voir.aussi" /></div>
277 </div>
278 </div>
279 <div class="row">
280 <#list articlesMemesSujet as articleMemeSujet>
281 <div class="col-12 col-lg-6">
282 ${articleMemeSujet}
283 </div>
284 </#list>
285 </div>
286 </div>
287 </div>
288 </div>
289 </#if>
290</div>
291
292<#if InformationComplementaire?has_content>
293 <div class="footer-text">
294 <div class="container">
295 <div class="row">
296 <div class="col-12">
297 ${InformationComplementaire.getData()}
298 </div>
299 </div>
300 </div>
301 </div>
302</#if>