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

Ils en parlent