Qui sommes-nous ?

La Rochelle Technopole encourage et soutient l’innovation en accompagnant l’émergence de projets et la création d’entreprises.

Au service de votre projet !

Une erreur s'est produite en traitant le calibre.
No signature of method create matches the arguments
1<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") /> 
2<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.service.ClassNameLocalService") /> 
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetLinkLocalService") /> 
4<#assign bookmarksEntryLocalService = serviceLocator.findService("com.liferay.portlet.bookmarks.service.BookmarksEntryLocalService") /> 
5<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService") /> 
6<#assign journalStructureLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalService") /> 
7<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService") /> 
8 
9<#assign typeJournalArticle = "com.liferay.portlet.journal.model.JournalArticle" /> 
10<#assign typeBookmarksEntry = "com.liferay.portlet.bookmarks.model.BookmarksEntry" /> 
11<#assign typeDLFileEntry = "com.liferay.portlet.documentlibrary.model.DLFileEntry" /> 
12 
13<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
14<#assign entry = assetEntryLocalService.getEntry(typeJournalArticle, journalArticle.getResourcePrimKey()) /> 
15<#assign relatedAssetTypedLists = buildRelatedAssetTypedLists(entry, "false") /> 
16 
17<#assign jaClassNameId = classNameLocalService.getClassNameId(typeJournalArticle) /> 
18 
19<#assign pdfViewer = '/fu/js/pdfjs/web/viewer.html?zoom=page-fit&file=' /> 
20 
21<#assign anchorInProgress = "false" /> 
22<#assign carouselNb = 0 /> 
23<#assign anchorNb = 0 /> 
24 
25<#assign serviceContextThreadLocal = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"] /> 
26<#assign themeDisplay = serviceContextThreadLocal.getServiceContext().getThemeDisplay() /> 
27 
28<article class="interior-article"> 
29     
30    <section class="interior-article-mainContent" > 
31         
32        <h2 class="interior-article-title">${.vars['reserved-article-title'].data}</h2> 
33             
34        <#if content.getSiblings()?has_content> 
35         
36            <#list content.getSiblings() as contenu> 
37                 
38                <#assign zoomDisplay = "" /> 
39                <#if contenu.is_zoom.getData() == "true"> 
40                    <#assign zoomDisplay = "zoomed-paragraph" /> 
41                </#if> 
42                <@displayContent contenu=contenu isZoom=zoomDisplay /> 
43 
44            </#list> 
45         
46        </#if> 
47         
48        <#if anchorInProgress == "true"> 
49            </div> 
50        </#if> 
51          
52    </section> 
53     
54    <#if relatedAssetTypedLists?? && relatedAssetTypedLists?has_content > 
55        <@getCustomRelatedAssets relatedAssetTypedLists=relatedAssetTypedLists /> 
56    </#if> 
57     
58</article> 
59 
60<footer class="interior-article-footer"> 
61    <ul class="interior-article-footer-items-list"> 
62        <li class="interior-article-footer-item interior-article-print"><button type="button" class="inner-link" title="Imprimer"><span class="sr-only">Imprimer</span></button></li> 
63        <li class="interior-article-footer-item interior-article-mail"><button type="button" class="inner-link" title="Partager par mail"><span class="sr-only">Partager par mail</span></button></li> 
64        <li class="interior-article-footer-item interior-article-linkedin"><button type="button" class="inner-link" title="Partager sur LinkedIn"><span class="sr-only">Partager sur LinkedIn</span></button></li> 
65        <li class="interior-article-footer-item interior-article-twitter"><button type="button" class="inner-link" title="Partager sur Twitter"><span class="sr-only">Partager sur Twitter</span></button></li> 
66        <li class="interior-article-footer-item interior-article-facebook"><button type="button" class="inner-link" title="Partager sur Facebook"><span class="sr-only">Partager sur Facebook</span></button></li> 
67    </ul> 
68</footer> 
69 
70 
71<#--************************************* 
72** CONTENT BLOCKS DISPLAY 
73*************************************--> 
74 
75<#macro displayContent contenu isZoom > 
76     
77    <#assign floatingMedia = "no-floating-media" /> 
78    <#assign alignValue = contenu.Media.media_options.alignment.getData() /> 
79    <#if alignValue == "fLeft" || alignValue == "fRight"> 
80        <#assign floatingMedia = "floating-media" /> 
81    </#if> 
82     
83    <#assign contentTitle = contenu.content_title.getData() /> 
84    <#assign contentText = contenu.content_text.getData() /> 
85     
86    <#assign innerMedia = contenu.Media /> 
87    <#assign mediaSrc = innerMedia.media_doc.getData()/> 
88    <#assign urlIframePortlet = innerMedia.url_iframe_portlet.getData() /> 
89         
90    <#assign anchor = "" /> 
91    <#if contenu.anchor?has_content> 
92        <#assign anchor = contenu.anchor.getData() /> 
93    </#if> 
94     
95    <#if contentTitle!="" || contentText!="" || mediaSrc!="" || urlIframePortlet !="" > 
96         
97        <#if anchor == "anchor-stop" && anchorInProgress == "true"> 
98            </div> 
99            <#assign anchor = "" /> 
100            <#assign anchorInProgress = "false" /> 
101        </#if> 
102         
103        <#if anchor != "" && contentTitle != "" && isZoom=""> 
104            <#if anchorInProgress == "true"> 
105                </div> 
106            </#if> 
107            <h3 id="${anchor}" class="anchor-title displayed"><button type="button" class="anchor-button" id="accord-btn-${anchorNb}" aria-controls="accord-sect-${anchorNb}" aria-expanded="true" data-anchor="${anchor}">${contentTitle}</button></h3> 
108            <div class="anchor-content" role="region" id="accord-sect-${anchorNb}" aria-labelledby="accord-btn-${anchorNb}"> 
109            <#assign anchorNb = anchorNb + 1 /> 
110            <#assign anchorInProgress = "true" /> 
111        </#if> 
112         
113        <div class="interior-article-paragraph ${isZoom} ${floatingMedia}"> 
114 
115            <#if contentTitle != "" > 
116                <#if anchor == "" || anchor == "anchor-stop" > 
117                    <h3>${contentTitle}</h3> 
118                <#else> 
119                    <#if isZoom != ""> 
120                        <h3 id="${anchor}" class="anchor-title displayed"><button type="button" class="anchor-button" id="accord-btn-${anchorNb}" aria-controls="accord-sect-${anchorNb}" aria-expanded="true" data-anchor="${anchor}">${contentTitle}</button></h3> 
121                        <div class="anchor-content" role="region" id="accord-sect-${anchorNb}" aria-labelledby="accord-btn-${anchorNb}"> 
122                        <#assign anchorNb = anchorNb + 1 /> 
123                    </#if> 
124                </#if> 
125            <#else> 
126                <#if anchor != "" > 
127                    <a id="${anchor}" class="anchor-content"></a> 
128                </#if> 
129            </#if> 
130             
131            <#if floatingMedia == "no-floating-media" > 
132                 
133                ${contentText?replace("<p></p>","")} 
134                <#if innerMedia??> 
135                    <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue /> 
136                </#if> 
137                 
138                 
139            <#elseif floatingMedia == "floating-media"> 
140                 
141                <#if innerMedia??> 
142                    <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue /> 
143                </#if> 
144                ${contentText?replace("<p></p>","")} 
145                <div class="clear-float"></div> 
146                 
147            </#if> 
148 
149            <#if contentTitle != "" && anchor != "" && anchor != "anchor-stop" && isZoom != ""> 
150                </div> 
151            </#if> 
152             
153        </div> 
154         
155    </#if> 
156     
157</#macro> 
158 
159 
160<#--************************************* 
161** MEDIA DISPLAY 
162*************************************--> 
163 
164<#macro getMedia media mediaSrc urlIframePortlet alignment> 
165     
166    <#if mediaSrc != '' || urlIframePortlet != ''> 
167         
168        <#local mediaType = media.media_type.getData() /> 
169        <#assign carouselWrapper = "" /> 
170        <#if mediaType == "carousel"> 
171            <#assign carouselWrapper = "interior-article-media-carousel-wrapper" /> 
172        </#if> 
173        <#local width = media.media_options.width.getData() /> 
174        <#local displayWidth = '' /> 
175        <#if width == 'null'> 
176            <#local displayWidth = '' /> 
177        <#elseif width != ""> 
178            <#local displayWidth = 'style="width:'+width+'px;"' /> 
179        </#if> 
180         
181        <#local height = media.media_options.height.getData() /> 
182        <#if height == 'null'> 
183            <#local height = '' /> 
184        </#if> 
185        <#local displayMode = media.media_options.display_mode.getData() /> 
186        <#local imgMini = media.media_options.img_mini.getData() /> 
187        <#local legend = media.media_options.legend.getData() /> 
188        <#local altText = media.alt_text.getData() /> 
189        <#if altText == 'null'> 
190            <#local altText = '' /> 
191        </#if> 
192         
193        <figure class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}> 
194             
195            <#switch mediaType> 
196                <#case "image"> 
197                    <#if displayMode == "normal"> 
198                       <@getImageMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet altText=altText height=height width=width /> 
199                    <#elseif displayMode == "popup"> 
200                        <@getImageMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width /> 
201                    </#if> 
202                    <#break > 
203                <#case "video"> 
204                    <#if displayMode == "normal"> 
205                       <@getVideoMedia imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width /> 
206                    <#elseif displayMode == "popup"> 
207                        <@getVideoMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width /> 
208                    </#if> 
209                    <#break > 
210                <#case "pdf"> 
211                    <#if displayMode == "normal"> 
212                       <@getPdfMedia mediaSrc=mediaSrc altText=altText height=height /> 
213                    <#elseif displayMode == "popup"> 
214                        <@getPdfMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width /> 
215                    </#if> 
216                    <#break > 
217                <#case "iframe"> 
218                    <#if displayMode == "normal"> 
219                       <@getIframeMedia urlIframePortlet=urlIframePortlet altText=altText height=height /> 
220                    <#elseif displayMode == "popup"> 
221                        <@getIframeMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height width=width /> 
222                    </#if> 
223                    <#break > 
224                <#case "portlet"> 
225                    <#if displayMode == "normal"> 
226                       <@getPortletMedia urlIframePortlet=urlIframePortlet height=height /> 
227                    <#elseif displayMode == "popup"> 
228                        <@getPortletMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height width=width /> 
229                    </#if> 
230                    <#break > 
231                <#case "carousel"> 
232                    <#if displayMode == "normal"> 
233                       <@getCarouselMedia media=media altText=altText height=height width=width /> 
234                       <#assign carouselNb = carouselNb + 1 /> 
235                    <#elseif displayMode == "popup"> 
236                        <@getCarouselMediaPopup imgMini=imgMini media=media altText=altText height=height width=width /> 
237                    </#if> 
238                    <#break > 
239                <#default> 
240            </#switch> 
241 
242            <#local hasLegend = legend?length != 0 /> 
243            <#if hasLegend> 
244                <figcaption class="interior-article-media-legend">${legend}</figcaption> 
245            </#if> 
246             
247        </figure> 
248         
249    </#if> 
250     
251</#macro> 
252 
253 
254<#macro getImageMedia mediaSrc urlIframePortlet altText height width > 
255    <#local displayedHeight = '' /> 
256    <#if height != ""> 
257        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
258    </#if> 
259    <#if urlIframePortlet != ""> 
260        <#assign target = "href='"+ urlIframePortlet +"'" /> 
261        <#if !isInternalLink(urlIframePortlet)> 
262            <#assign target = target + " target='_blank' rel='noopener noreferrer'" /> 
263        </#if> 
264        <a ${target} title="${htmlUtil.escapeAttribute(altText)}"> 
265            <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
266        </a> 
267    <#else> 
268        <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
269    </#if> 
270</#macro> 
271 
272 
273<#macro getImageMediaPopup imgMini mediaSrc altText height width > 
274    <#if imgMini != ""> 
275        <#local displayedHeight = '' /> 
276        <#if height != ""> 
277            <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
278        </#if> 
279        <a class="link-img" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}"> 
280            <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
281        </a> 
282    <#else> 
283        <a class="link-img interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}"> 
284            ${htmlUtil.escapeAttribute(altText)} 
285        </a> 
286    </#if> 
287</#macro> 
288 
289 
290<#macro getVideoMedia imgMini mediaSrc height altText width> 
291    <#local displayedHeight = '' /> 
292    <#if height != ""> 
293        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
294    </#if> 
295    <video class="interior-article-media-video" itemprop="url" poster="${imgMini}" title="${htmlUtil.escapeAttribute(altText)}" controls="" preload="metadata" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> > 
296        <source itemprop="url" content="https://www2.larochelle-technopole.fr${mediaSrc}" src="${mediaSrc}" type="video/mp4"> 
297        <a href="${mediaSrc}" download="">${htmlUtil.escapeAttribute(altText)}</a> 
298    </video> 
299</#macro> 
300 
301 
302<#macro getVideoMediaPopup imgMini mediaSrc altText height width > 
303    <#if imgMini != ""> 
304        <#local displayedHeight = '' /> 
305        <#if height != ""> 
306            <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
307        </#if> 
308        <a class="link-video" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}"> 
309            <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
310        </a> 
311    <#else> 
312        <a class="link-video interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}"> 
313            ${htmlUtil.escapeAttribute(altText)} 
314        </a> 
315    </#if> 
316</#macro> 
317 
318 
319<#macro getPdfMedia mediaSrc altText height > 
320    <#local displayedHeight = '' /> 
321    <#if height != ""> 
322        <#local displayedHeight = 'style="height:'+height+'px;"' /> 
323    </#if> 
324    <iframe class="interior-article-media-iframe" src="${pdfViewer+mediaSrc}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe> 
325</#macro> 
326 
327 
328<#macro getPdfMediaPopup imgMini mediaSrc altText height width > 
329    <#if imgMini != ""> 
330        <#local displayedHeight = '' /> 
331        <#if height != ""> 
332            <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
333        </#if> 
334        <a class="link-pdf" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" target="_blank" rel="noopener noreferrer"> 
335            <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
336        </a> 
337    <#else> 
338        <a class="link-pdf interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}" target="_blank" rel="noopener noreferrer"> 
339            ${htmlUtil.escapeAttribute(altText)} 
340        </a> 
341    </#if> 
342</#macro> 
343 
344 
345<#macro getIframeMedia urlIframePortlet altText height > 
346    <#local displayedHeight = '' /> 
347    <#if height != ""> 
348        <#local displayedHeight = 'style="height:'+height+'px;"' /> 
349    </#if> 
350    <#if urlIframePortlet?contains("youtube")> 
351        <#local youtubeId = urlIframePortlet?substring(urlIframePortlet?index_of("embed/")+6) /> 
352        <div class="interior-article-media-youtube-blocker" ${displayedHeight}> 
353            <div class="youtube-blocker-img-wrapper"> 
354                <img class="youtube-blocker-img" src="https://img.youtube.com/vi/${youtubeId}/0.jpg" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" /> 
355            </div> 
356            <p class="youtube-blocker-text">Cette vidéo est fournie par la plateforme YouTube. En la visionnant vous acceptez les conditions d'utilisation de YouTube.</p> 
357            <div class="youtube-blocker-btn-wrapper"> 
358                <button type="button" class="youtube-blocker-btn" data-src="${urlIframePortlet?replace('youtube.com','youtube-nocookie.com')}?autoplay=1" data-title="${htmlUtil.escapeAttribute(altText)}">Voir la vidéo</button> 
359                <a href="https://www.youtube.com/static?template=terms&gl=FR" class="youtube-blocker-btn" target="_blank" rel="noopener noreferrer">En savoir plus</a> 
360            </div> 
361        </div> 
362    <#else> 
363        <#assign ariaHidden = '' /> 
364        <#if urlIframePortlet?contains("/carto/")> 
365            <#assign ariaHidden = 'aria-hidden="true"' /> 
366        </#if> 
367        <iframe class="interior-article-media-iframe" src="${urlIframePortlet}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} ${ariaHidden} allowfullscreen ></iframe> 
368    </#if> 
369</#macro> 
370 
371 
372<#macro getIframeMediaPopup imgMini urlIframePortlet altText height width > 
373    <#if imgMini != ""> 
374        <#local displayedHeight = '' /> 
375        <#if height != ""> 
376            <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
377        </#if> 
378        <a class="link-iframe" href="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}" target="_blank" rel="noopener noreferrer"> 
379            <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
380        </a> 
381    <#else> 
382        <a class="link-iframe interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${urlIframePortlet}" target="_blank" rel="noopener noreferrer"> 
383            ${htmlUtil.escapeAttribute(altText)} 
384        </a> 
385    </#if> 
386</#macro> 
387 
388 
389<#macro getCarouselMedia media altText height width >  
390     
391    <#local ratioDisplay = "" /> 
392    <#if height != "" && width != "" > 
393        <#local ratio = height?number / width?number * 100 /> 
394        <#local ratioDisplay = 'style="padding-top:' + ratio + '%"' /> 
395    </#if> 
396     
397    <div class="carousel" id="carousel-${carouselNb}" data-carousel="carousel-${carouselNb}" ${ratioDisplay}> 
398         
399        <button type="button" id="carousel-${carouselNb}-arrow-prev" data-carousel="carousel-${carouselNb}" data-direction="prev" class="carousel-arrow carousel-arrow-prev"><span class="sr-only">Image précédente</span></button> 
400        <button type="button" id="carousel-${carouselNb}-arrow-next" data-carousel="carousel-${carouselNb}" data-direction="next" class="carousel-arrow carousel-arrow-next"><span class="sr-only">Image suivante</span></button> 
401 
402        <#list media.media_doc.getSiblings() as node> 
403            <#if node_index == 0> 
404                <img id="carousel-${carouselNb}-img-${node_index}" data-carousel="carousel-${carouselNb}" data-img="${node_index}" class="carousel-img carousel-img-displayed" src="${node.getData()}" data-src="" alt="${altText}"> 
405            <#else> 
406                <img id="carousel-${carouselNb}-img-${node_index}" data-carousel="carousel-${carouselNb}" data-img="${node_index}" class="carousel-img carousel-img-noDisplay" src="/lr-technopole-theme/images/blank.png" data-src="${node.getData()}" alt="${altText}"> 
407            </#if> 
408        </#list> 
409 
410    </div> 
411 
412</#macro> 
413 
414 
415<#macro getCarouselMediaPopup imgMini media altText height width > 
416    <#local diapos = "" /> 
417    <#list media.media_doc.getSiblings() as node> 
418        <#if node_index != 0> 
419            <#local diapos = diapos + "," /> 
420        </#if> 
421        <#local diapos = diapos + node.getData() /> 
422    </#list> 
423    <#if imgMini != ""> 
424        <#local displayedHeight = '' /> 
425        <#if height != ""> 
426            <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
427        </#if> 
428        <a class="link-diapo" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" data-diapos="${diapos}"> 
429            <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
430        </a> 
431    <#else> 
432        <a class="link-diapo interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}" data-diapos="${diapos}"> 
433            ${htmlUtil.escapeAttribute(altText)} 
434        </a> 
435    </#if> 
436</#macro> 
437 
438 
439<#macro getPortletMedia urlIframePortlet height > 
440     
441    <#local displayedHeight = '' /> 
442    <#if height != ""> 
443        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
444    </#if> 
445     
446    <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') /> 
447    <#local hasQueryString = urlIframePortlet?contains('?') /> 
448    <#local queryString = '' /> 
449    <#local instanceId = '' /> 
450    <#local portletName = urlIframePortlet /> 
451    <#local portletId = urlIframePortlet /> 
452    <#local fullPortletName = '' /> 
453     
454    <#if hasInstanceId> 
455        <#if hasQueryString> 
456            <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..urlIframePortlet?index_of('?')-1] /> 
457        <#else> 
458            <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..] /> 
459        </#if> 
460        <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('INSTANCE'))-2] /> 
461    <#else> 
462        <#if hasQueryString> 
463            <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('?'))-1] /> 
464        </#if> 
465    </#if> 
466     
467    <#if hasQueryString> 
468        <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] /> 
469    </#if> 
470     
471    <#if hasInstanceId> 
472        <#local fullPortletName = portletName+'_INSTANCE_'+instanceId /> 
473    <#else> 
474         <#local fullPortletName = portletName /> 
475    </#if> 
476 
477    <#local divId = "embedded-portlet-" + fullPortletName + randomNamespace /> 
478    <#local plid = themeDisplay.plid /> 
479     
480    <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice') || urlIframePortlet?contains('cuCreate')> 
481         
482        <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive&currentURL=" + themeDisplay.getURLCurrent() /> 
483 
484        <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="" data-querystring="${queryString}" ${displayedHeight}></div> 
485         
486    <#else> 
487         
488        <#local plid = themeDisplay.plid /> 
489        <#local portletURL = portletURLFactory.create(renderRequest, fullPortletName, plid, "RENDER_PHASE") /> 
490        <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") /> 
491        ${portletURL.setWindowState(windowState)} 
492        <#local remoteUrl = portletURL.toString() + "&" + queryString + "&currentURL=" + themeDisplay.getURLCurrent() /> 
493         
494        <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="${remoteUrl}" data-querystring="${queryString}" ${displayedHeight}></div> 
495         
496    </#if> 
497     
498</#macro> 
499 
500 
501<#macro getPortletMediaPopup imgMini urlIframePortlet altText height width > 
502     
503    <#local displayedHeight = '' /> 
504    <#if height != ""> 
505        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
506    </#if> 
507 
508    <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') /> 
509    <#local hasQueryString = urlIframePortlet?contains('?') /> 
510    <#local portletId = urlIframePortlet /> 
511    <#local queryString = '' /> 
512     
513    <#if hasInstanceId> 
514        <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of(instanceId))] /> 
515    </#if> 
516    <#if hasQueryString> 
517        <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of('?')-1)] /> 
518        <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] /> 
519    </#if> 
520     
521    <#local divId = "embedded-portlet-" + portletId /> 
522     
523    <#if themeDisplay?? && themeDisplay.plid?? > 
524         
525        <#local plid = themeDisplay.plid /> 
526     
527        <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice')> 
528             
529            <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive&currentURL=" +themeDisplay.getURLCurrent() /> 
530             
531            <#local formPictoClass = "" /> 
532            <#if urlIframePortlet?contains('FiberOpticalConnectionRequest')> 
533                <#local formPictoClass = "eservice-form-opener-picto-fiber" /> 
534            <#elseif urlIframePortlet?contains('AntContact')> 
535                <#local formPictoClass = "eservice-form-opener-picto-contact" /> 
536            <#elseif urlIframePortlet?contains('ReinscriptionConservatoire')> 
537                <#local formPictoClass = "eservice-form-opener-picto-music" /> 
538            <#elseif urlIframePortlet?contains('ContactUs')> 
539                <#local formPictoClass = "eservice-form-opener-picto-contact" /> 
540            <#elseif urlIframePortlet?contains('JobApplication')> 
541                <#local formPictoClass = "eservice-form-opener-picto-job" /> 
542            <#elseif urlIframePortlet?contains('WastebinRepair')> 
543                <#local formPictoClass = "eservice-form-opener-picto-wastebin" /> 
544            <#elseif urlIframePortlet?contains('WastewaterConnection')> 
545                <#local formPictoClass = "eservice-form-opener-picto-water" /> 
546            <#elseif urlIframePortlet?contains('WastesortingTour')> 
547                <#local formPictoClass = "eservice-form-opener-picto-altriane" /> 
548            </#if> 
549             
550            <div class="link-portlet eservice-form-opener" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="" tabindex="0"> 
551                <div class="eservice-form-opener-picto ${formPictoClass}"></div> 
552                <p class="eservice-form-opener-text">${htmlUtil.escapeAttribute(altText)}</p> 
553            </div> 
554 
555        <#else> 
556             
557            <#local portletClass = "link-portlet" /> 
558            <#if urlIframePortlet?contains('19_WAR')> 
559                <#local portletClass = "link-portlet planning-cmd-opener" /> 
560            </#if> 
561            <#local plid = themeDisplay.plid /> 
562            <#local portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE") /> 
563            <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") /> 
564            ${portletURL.setWindowState(windowState)} 
565            <#local remoteUrl = portletURL.toString() + "&" + queryString + "&currentURL=" + themeDisplay.getURLCurrent() /> 
566             
567            <div class="${portletClass}" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="${remoteUrl}" tabindex="0"> 
568                <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${altText}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> /> 
569            </div> 
570         
571        </#if> 
572         
573    </#if> 
574     
575</#macro> 
576 
577 
578<#--************************************* 
579**  RELATED CONTENT 
580*************************************--> 
581 
582<#function buildRelatedAssetTypedLists entry info > 
583    <#assign relatedAssetTypedLists = {} /> 
584    <#assign infos = "" /> 
585    <#assign assetLinks = assetLinkLocalService.getDirectLinks(entry.getEntryId()) /> 
586 
587    <#list assetLinks as assetLink> 
588        <#if assetLink.getEntryId1() == entry.getEntryId() > 
589            <#assign assetLinkEntry = assetEntryLocalService.getEntry(assetLink.getEntryId2()) /> 
590        <#else> 
591            <#assign assetLinkEntry = assetEntryLocalService.getEntry(assetLink.getEntryId1()) /> 
592        </#if> 
593         
594        <#if assetLinkEntry?? && assetLinkEntry.isVisible() > 
595            <#assign linkedAssetRenderer = assetLinkEntry.getAssetRenderer() /> 
596     
597            <#if linkedAssetRenderer.hasViewPermission(permissionChecker) > 
598             
599                <#assign type = assetLinkEntry.getClassName() /> 
600                 
601                <#assign newEntry = [{"assetEntry":assetLinkEntry,"assetLink":assetLink}] /> 
602                <#if relatedAssetTypedLists?keys?seq_contains(type)> 
603                    <#assign relatedAssetTypedList = relatedAssetTypedLists[type] + newEntry /> 
604                <#else> 
605                    <#assign relatedAssetTypedList = newEntry /> 
606                </#if> 
607                <#assign relatedAssetTypedLists = relatedAssetTypedLists + {type : relatedAssetTypedList} /> 
608            </#if> 
609        </#if> 
610    </#list> 
611     
612    <#if info == "true"> 
613        <#return infos /> 
614    <#else> 
615        <#return relatedAssetTypedLists /> 
616    </#if> 
617    <#return {} /> 
618</#function> 
619 
620 
621<#macro getCustomRelatedAssets relatedAssetTypedLists> 
622    <#local hasRelatedAssets = "false" /> 
623    <#if relatedAssetTypedLists[typeDLFileEntry]?? && relatedAssetTypedLists[typeDLFileEntry]?size != 0> 
624        <#local hasRelatedAssets = "true" /> 
625    </#if> 
626    <#if hasRelatedAssets == "true" > 
627        <aside class="interior-article-moreContent-container"> 
628            <#if relatedAssetTypedLists[typeDLFileEntry]?? && relatedAssetTypedLists[typeDLFileEntry]?has_content > 
629                <@getRelatedDocuments assets=relatedAssetTypedLists[typeDLFileEntry] /> 
630            </#if> 
631        </aside> 
632    </#if> 
633</#macro> 
634 
635 
636<#macro getRelatedDocuments assets> 
637     
638    <#if assets?has_content && assets?size != 0> 
639         
640        <ul class="interior-article-moreContent-docs"> 
641             
642            <#local orderedAssets = getOrderedAssets(assets) /> 
643            <#list orderedAssets?reverse as assetMap> 
644                 
645                <#local assetDocEntry = assetMap.assetEntry /> 
646                <#local docEntry = dlFileEntryLocalService.getFileEntry(assetDocEntry.getClassPK()) /> 
647                 
648                <#if assetDocEntry.getAssetRenderer()??> 
649                 
650                    <#local linkedAssetRenderer = assetDocEntry.getAssetRenderer() /> 
651                     
652                    <#local assetLinkEntryTitle = assetDocEntry.getTitle(locale) /> 
653                    <#local assetLinkEntryDescription = assetDocEntry.getDescription(locale) /> 
654                    <#local assetURL = linkedAssetRenderer.getURLDownload(themeDisplay) /> 
655                     
656                    <#local extension = docEntry.getLatestFileVersion(true).getExtension() /> 
657                    <#local extensionType = "" /> 
658                    <#switch extension> 
659                        <#case "pdf"> 
660                            <#local extensionType = "link-pdf" /> 
661                            <#break> 
662                        <#case "jpg"> 
663                            <#local extensionType = "link-img" /> 
664                            <#break> 
665                        <#case "png"> 
666                            <#local extensionType = "link-img" /> 
667                            <#break> 
668                        <#case "mp4"> 
669                            <#local extensionType = "link-video" /> 
670                            <#break> 
671                        <#default> 
672                    </#switch> 
673                     
674                    <#local target = " href='"+ assetURL +"'" /> 
675                     
676                    <li class="interior-article-moreContent-doc-item" data-entry-id="${assetDocEntry.entryId}"> 
677                       <a ${target} class="inner-link interior-article-moreContent-doc ${extensionType}" title="${htmlUtil.escapeAttribute(assetLinkEntryDescription)}" > 
678                            ${assetLinkEntryTitle} <span class="interior-article-moreContent-aria">Ouvrir dans un nouvel onglet</span> 
679                        </a>  
680                    </li> 
681                     
682                </#if> 
683                 
684            </#list> 
685             
686        </ul> 
687         
688    </#if> 
689     
690</#macro> 
691 
692 
693<#function getOrderedAssets assets> 
694    <#local orderedAssets = [] /> 
695    <#local assetsWithDate = [] /> 
696    <#list assets as assetMap> 
697        <#local asset = assetMap.assetEntry /> 
698        <#local modifiedDate = asset.getModifiedDate() /> 
699        <#local assetsWithDate = assetsWithDate + [{'assetMap':assetMap,'modifiedDate':modifiedDate}] /> 
700    </#list> 
701    <#list assetsWithDate?sort_by('modifiedDate') as orderedAsset> 
702        <#local orderedAssets = orderedAssets + [orderedAsset.assetMap] /> 
703    </#list> 
704    <#return orderedAssets> 
705</#function> 
706 
707 
708<#function getOrderedDocs docs> 
709    <#local orderedDocs = [] /> 
710    <#local docsWithDate = [] /> 
711    <#list docs as docMap> 
712        <#local doc = assetEntryLocalService.getEntry(docMap.getGroupId(),docMap.getUuid()) /> 
713        <#local modifiedDate = doc.getModifiedDate() /> 
714        <#local docsWithDate = docsWithDate + [{'docMap':docMap,'modifiedDate':modifiedDate}] /> 
715    </#list> 
716    <#list docsWithDate?sort_by('modifiedDate') as orderedDoc> 
717        <#local orderedDocs = orderedDocs + [orderedDoc.docMap] /> 
718    </#list> 
719    <#return orderedDocs> 
720</#function> 
721 
722 
723<#function isInternalLink link> 
724  <#local internal = link?contains("www.agglo-larochelle.fr") || link?contains("www2.agglo-larochelle.fr") || link?contains("www-new.agglo-larochelle.fr") || !link?contains("//")> 
725  <#return internal> 
726</#function> 
727 
728 
729<#function getField journalArticle fieldName> 
730    <#local fieldValue = ''/> 
731     <#local document = saxReaderUtil.read(journalArticle.getContent()) /> 
732     <#local rootElement = document.getRootElement() /> 
733     <#if (rootElement?? && rootElement?has_content)> 
734        <#local xPathSelector =  saxReaderUtil.createXPath("dynamic-element[@name='"+fieldName+"']/dynamic-content") /> 
735        <#if (validator.isNotNull(xPathSelector))> 
736            <#local nbNodes = xPathSelector.selectNodes(rootElement)?size /> 
737            <#if (nbNodes &gt; 0)> 
738                <#local fieldValue = xPathSelector.selectSingleNode(rootElement).getStringValue() /> 
739            </#if> 
740         </#if> 
741     <#return fieldValue /> 
742     </#if> 
743 </#function> 

Ils en parlent