Chargement en cours...
Une erreur s'est produite lors du traitement du gabarit.
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> stade  [in template "20099#20135#ARTICLE-DÉTAIL" at line 131, column 50]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lstTag += " " + stade.name  [in template "20099#20135#ARTICLE-DÉTAIL" at line 131, column 25]
----
1<#import "${templatesPath}/UTIL" as util> 
2<#import "${templatesPath}/DICTIONNAIRE" as dico> 
3 
4<#assign  
5    journalArticleId = .vars['reserved-article-id'].data 
6    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
7    journalArticle = JournalArticleLocalService.fetchArticle(groupId, journalArticleId) 
8    AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
9    categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) 
10     
11    AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
12    vocabularyCultureId = AssetVocabularyLocalService.fetchGroupVocabulary(company.getGroupId(), 'Culture').vocabularyId 
13    urlPortal = themeDisplay.getURLPortal() 
14    url = urlPortal + themeDisplay.getURLCurrent() 
15    vocabularyTheme = AssetVocabularyLocalService.fetchGroupVocabulary(groupId, 'Theme') 
16    listCategoriesCultureOuStade=util.filterCategoriesByVocabulary(categories,vocabularyCultureId) 
17    stade = '' 
18    art = '' 
19    nomCulture = ''  
20    href = '' 
21    listThemeCulture=[] 
22     
23    title = .vars['reserved-article-title'].data 
24    summary = (.vars['reserved-article-description'].data)!"" 
25
26 
27<#-- RECUPERATION DES PARAMETRES --> 
28    <#assign 
29        serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
30        renderRequest = serviceContext.getRequest() 
31        currentUrl = portalUtil.getCurrentURL(renderRequest) 
32        stadeId = util.getNumericParameter(currentUrl, 'p_r_p_categoryId') 
33        themeId = util.getNumericParameter(currentUrl, 'p_r_p_tag') 
34
35     
36<#-- Recuperation du nom du stade --> 
37<#if stadeId?? && stadeId != ''> 
38	<#assign  
39		stade = AssetCategoryLocalService.fetchAssetCategory(stadeId?number)!'' 
40
41</#if> 
42 
43<#--  Sommes-nous sur une page detail-article ? --> 
44<#if url?? && url?contains('/-/') > 
45	<#assign  
46		modeDetailArticle=true 
47
48<#else> 
49	<#assign  
50		modeDetailArticle=false 
51
52</#if>  
53 
54<#if stade?? && stade != ''> 
55	<#assign  
56		nomStade = stade.name?split(" - ")[1] 
57		culture = stade.getParentCategory() 
58
59<#elseif listCategoriesCultureOuStade?has_content> 
60	<#-- Le stade n'est pas dans l'url. On récupère le premier de la liste des stades  --> 
61	<#list listCategoriesCultureOuStade as cat> 
62		<#if !cat.isRootCategory()> 
63			<#assign firstStade=cat> 
64			<#break> 
65		<#elseif !(firstCulture)??> 
66			<#-- Si aucun stade n'est dans la liste, on récupère la première culture --> 
67			<#assign firstCulture=cat> 
68		</#if>	 
69	 </#list> 
70	 <#if firstStade??>  
71		<#assign  
72			stade=firstStade 
73			culture=stade.getParentCategory() 
74
75	<#elseif firstCulture??>  
76		<#assign  
77			culture=firstCulture 
78		>		 
79	</#if> 
80</#if> 
81 
82<#assign 
83	nomCulture = (culture.name)!"" 
84	listThemeCulture=util.getListThemeCulture(nomCulture) 
85
86 
87<#if modeDetailArticle > 
88	<#--  Changement du titre de la page dans le header --> 
89	<script> 
90	    $(".current-crop").addClass("${util.normalizeCultureNameCss(nomCulture)}"); 
91	    $(".current-crop").html("<h2> ${dico.prettyCulture(nomCulture, true)} </h2>"); 
92	     
93	    <#-- Mise en évidence de l'icone cultures --> 
94	    $("li.cultures").addClass("active"); 
95	</script> 
96	 
97	<#assign  
98		AssetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") 
99		tags = AssetTagLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) 
100
101 
102	<#-- Ajout des méta tags pour Open Graph -->  
103	<@liferay_util["html-top"]> 
104	    <meta property="og:type" content="article" /> 
105	    <meta property="og:title" content="${title?html}" /> 
106	    <meta property="twitter:title" content="${title?html}" /> 
107	    <meta property="og:description" content='${summary?replace("<[^>]*>", "", "r")?html}' /> 
108	    <meta property="twitter:description" content='${summary?replace("<[^>]*>", "", "r")?html}' /> 
109	    <meta property="og:image" content="${urlPortal + image.getData()}"/> 
110	    <#-- meta property="og:image:width" content="620" -->  
111	    <#-- meta property="og:image:height" content="400" --> 
112	     
113	    <meta property="og:article:published_time" content="${journalArticle.getCreateDate()?datetime?iso_local}" /> 
114	    <meta property="og:article:modified_time" content="${journalArticle.getModifiedDate()?datetime?iso_local}" /> 
115	    <meta property="og:article:author" content="${auteur.getData()}" /> 
116	    <meta property="og:article:section" content="${nomCulture}" /> 
117	     
118	    <#if journalArticle.getExpirationDate()??>  
119			<meta property="og:article:expiration_time" content="${journalArticle.getExpirationDate()?datetime?iso_local}" /> 
120	    </#if> 
121 
122		<#if tags??> 
123			<#assign lstTag = tags?join(' ') > 
124    	<#else> 
125    		<#assign lstTag = "" > 
126		</#if> 
127		 
128		<#if nomStade??>  
129			<#assign lstTag += " " + nomStade > 
130		<#elseif stade??> 
131			<#assign lstTag += " " + stade.name > 
132		</#if> 
133		 
134   		<meta property="og:article:tag" content="${lstTag}" /> 
135	</@> 
136	     
137	<#-- Creation du lien pour le bouton retour --> 
138    <#assign 
139    	returnLink = urlPortal + "/" + nomCulture?lower_case + "?p_r_p_categoryId=" 
140
141 
142    <#if stadeId?? && stadeId != ''> 
143    	<#assign 
144    		returnLink += stadeId 
145
146    </#if> 
147     
148	<div class = "theme-selecteur"> 
149	    <div class="ariane"> 
150	    	<a href="${urlPortal}">Accueil</a> 
151
152	        <a href ="${returnLink}">${dico.prettyCulture(nomCulture, true)}</a> 
153	    </div> 
154	    <div class="select-stade"> 
155	    	<#assign 
156	    		txtStade = "" 
157
158	         
159	        <#if (stade?? || stade != '') && nomStade?? > 
160	        	<#assign  
161	        		txtStade = "<b>${nomStade}</b>" 
162
163	        </#if> 
164	 
165	        <div class="txt-culture"></div> 
166	        <div class="select-stade-2"> 
167	            <div class="txt-stade">${txtStade}</div>	 
168	            <div class  = "styled-select2"> 
169					<#assign hrefArticleTheme = ('/${nomCulture?lower_case}/articles-theme?p_r_p_categoryId=${stadeId!""}') > 
170				    <#-- Si le theme est fourni dans l'url, on prend celui-ci. Sinon on prend le premier de la liste  --> 
171				    <#assign selectedThemeId><#compress> 
172				    	<#if themeId?has_content> 
173				    		<#-- Si le theme est fourni dans l'url --> 
174				    		${themeId} 
175				    	<#else>    	 
176				    		<#--  S'il n'y a pas de thème, on n'en sélectionne aucun --> 
177	    					${((util.filterCategoriesByVocabulary(categories,vocabularyTheme.vocabularyId)?first).categoryId)!""} 
178				    	</#if> 
179				    	</#compress> 
180				    </#assign> 
181	                <select onchange="location = this.value"> 
182	                    <option value ="">Filtrer par</option> 
183	                    <#list listThemeCulture as theme> 
184	                    	<#assign href = hrefArticleTheme + '&p_r_p_tag=' + theme.categoryId > 
185	                        <#assign selected = (selectedThemeId == theme.categoryId?string)?then("selected","")> 
186	                        <option value ="${href}" ${selected}>${theme.name}</option> 
187	                    </#list> 
188	                </select> 
189	            </div> 
190	        </div> 
191	    </div> 
192	</div> 
193</#if> 
194 
195<div class="article-detail"> 
196    <div class="box-detail"> 
197        <#assign isRestrictedValue = getterUtil.getBoolean(isRestricted.getData())> 
198 
199        <#-- AFFICHAGE --> 
200		<#-- L'article est accessible uniquement si non restreint ou si l'utilisateur est connecté -->  
201		<#if !isRestrictedValue || (isRestrictedValue && themeDisplay.isSignedIn())> 
202            <#-- Affichage du titre de l'asset --> 
203            <h1>${title}</h1> 
204     
205            <div class="article-infos pb-2"> 
206                <small> 
207                    <#if (auteur.getData())?? && auteur.getData() != ""> 
208                	     Auteur : ${auteur.getData()} -  
209                    </#if> 
210				    <#if dateDerniereModification??> 
211	                    <#assign dateDerniereModification_Data = getterUtil.getString(dateDerniereModification.getData())> 
212	                    <#if validator.isNotNull(dateDerniereModification_Data)> 
213	                        <#assign dateDerniereModification_DateObj = dateUtil.parseDate("yyyy-MM-dd", dateDerniereModification_Data, locale)> 
214	                        Modifié le : ${dateUtil.getDate(dateDerniereModification_DateObj, "dd MMM yyyy", locale)} 
215	                    </#if> 
216	           	    </#if> 
217                     
218                </small> 
219            </div> 
220 
221            <#if video.getData()?? && video.getData() != ""> 
222               	<#assign 
223                    videoId = video.getData()?keep_after("watch?v=") 
224	                <#-- Creation de l'url de la video embeded --> 
225	                videoUrl = 'https://www.youtube.com/embed/' + videoId 
226
227				<#-- Affichage de la video si l'article est un contenu avec video --> 
228                <div class="video"> 
229                    <iframe title="Vidéo de l'article" 
230                        src="${videoUrl}"> 
231                    </iframe>  
232                </div> 
233            </#if> 
234 
235            ${html.getData()} 
236             
237            <#if (libelleDoc.document.data)?has_content> 
238                <h5>- Document${(libelleDoc.getSiblings()?size<=1)?then('','s')} à télécharger :</h5> 
239                <ul> 
240                    <#list libelleDoc.getSiblings() as curDoc> 
241                        <#if (curDoc.document.data)??> 
242                            <li><a href="${curDoc.document.getData()}" download target="_blank" type="application/octet-stream">${curDoc.getData()!curDoc.document.data}</a></li> 
243                        </#if> 
244                    </#list> 
245                </ul> 
246            </#if> 
247        <#else> 
248            <span class="fa fa-exclamation-triangle" aria-hidden="true"></span> 
249            Désolé, cet article est reservé aux membres connectés. 
250         </#if> 
251    </div> 
252</div> 
Chargement en cours...
Veuillez selectionner un stade afin de pouvoir consulter les articles.