Accueil Actualités Véronique Roussel : première formatrice du Mooc cuisine
Une erreur s'est produite lors du traitement du modèle.
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> curRelatedAsset.getDDMStructureKey()  [in template "21355#21395#TEMOIGNAGE-DETAILS" at line 27, column 15]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if (curRelatedAsset.getDDMStructureK...  [in template "21355#21395#TEMOIGNAGE-DETAILS" at line 27, column 9]
----
1<#assign images_folder = themeDisplay.getPathThemeImages() /> 
2<#assign date = dateUtil.parseDate('EEE, dd MMM yyyy HH:mm:ss Z', .vars["reserved-article-display-date"].data, localeUtil.getDefault()) /> 
3<#assign dateFormated = date?string["dd/MM/yyyy"] /> 
4 
5 
6<#--## On recupere la primaryKey de l'article affiche, puis ses categories--> 
7<#assign longGroupId = getterUtil.getLong(groupId) /> 
8<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") /> 
9<#assign primKey = journalArticleResourceLocalService.getArticleResourcePrimKey(longGroupId, .vars["reserved-article-id"].data) /> 
10 
11<#--##On recup l'entry--> 
12<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
13<#assign entry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", primKey) /> 
14 
15<#--##Classe utilitaire pour récupérer les related assets--> 
16<#assign journalArticleUtil = serviceLocator.findService("fr.afpa.ws.service.AfpaJournalArticleLocalService") /> 
17<#assign allRelatedAssets = journalArticleUtil.getRelatedAssets(entry.getEntryId())! /> 
18 
19<#--## Recuperation de l'url courante pour les twitter cards--> 
20<#assign url = portalUtil.getCurrentCompleteURL(httpServletRequest) /> 
21<#assign titleSEO = httpServletRequest.getAttribute("titleSEO") /> 
22 
23<#assign relatedAssets = [] /> 
24 
25<#assign nbAsset = 0 /> 
26<#list allRelatedAssets as curRelatedAsset> 
27	<#if (curRelatedAsset.getDDMStructureKey().equals("TEMOIGNAGE") && nbAsset < 2)> 
28		<#if (journalArticleUtil.isJournalArticleLinkToCategory(curRelatedAsset.getResourcePrimKey(), categoryname_GRAND_PUBLIC, vocabularyname_PUBLIC))> 
29    		<#assign void = relatedAssets.add(curRelatedAsset) /> 
30    		<#assign nbAsset = nbAsset + 1 /> 
31		</#if> 
32    <#elseif (nbAsset >= 2)> 
33    	<#break> 
34	</#if> 
35</#list> 
36 
37<#--## Récupération de la friendlyUrl courrante--> 
38<#assign currentFriendlyUrl = themeDisplay.getLayout().getFriendlyURL() /> 
39 
40<#--## Affichage d'un lien retour sur on est dans l'espace prescritpteur (friendlyUrl == detail_afpa_en_direct)--> 
41<#if (currentFriendlyUrl?? && currentFriendlyUrl == friendlyurl_ESPACE_PERSO_DETAIL_AFPA_EN_DIRECT)> 
42	<a class="simple-link" href="#" onclick="javascript:history.go(-1);" id="boutonRetour"> <@liferay.language key="actualite.lien.retour"/> </a> 
43</#if> 
44 
45<article> 
46<#--    ##Header--> 
47    <div> 
48        <span class="edito-title-one"><@liferay.language key="temoignage.libelle"/></span> 
49<#--        ${dateTool.format("dd/MM/yyyy",date)}--> 
50        <span class="date"> ${dateFormated}</span> 
51 
52        <#assign titreActu=parentStructureFieldSet22996.Titre_actualite.getData() /> 
53		<h1 class="left-one" id="twitterCardTitle">${titreActu}</h1> 
54		<script> 
55			// On change le titre de la page en JS pour mettre ne pas mettre le titre du contenu BO 
56			jQuery("title").html("${titreActu?html} ${titleSEO}"); 
57		</script> 
58 
59    </div> 
60<#--    ##/Header--> 
61 
62<#--    ##Partager & réseaux sociaux--> 
63    <div class="social-bar"> 
64<#--    	## On n'affiche pas le bouton FB et partage sur l'espace perso--> 
65    	<#if (currentFriendlyUrl?? && currentFriendlyUrl != friendlyurl_ESPACE_PERSO_DETAIL_AFPA_EN_DIRECT)> 
66	    	<#assign facebookAppID = propsUtil.get("facebook.app.id") /> 
67	        <div id="fb-root"></div> 
68	        <script>( 
69	            function(d, s, id) { 
70	              var js, fjs = d.getElementsByTagName(s)[0]; 
71	              if (d.getElementById(id)) return; 
72	              js = d.createElement(s); js.id = id; 
73	              js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&appId=${facebookAppID}&version=v2.3"; 
74	              fjs.parentNode.insertBefore(js, fjs); 
75	            }(document, 'script', 'facebook-jssdk')); 
76 
77	            jQuery( document ).ready(function() { 
78	                jQuery("#share-link").on("click",function(event) { 
79	                    jQuery("#share-div").toggle(); 
80	                    jQuery(this).toggleClass("active"); 
81	                }); 
82	                jQuery("#print-link").on("click",function(event) { 
83	                    event.preventDefault(); 
84	                    print(); 
85	                }); 
86	                //ajout du tooltip sur le bouton imprimer 
87					jQuery('#print-link').tooltipster({ 
88						theme: '.tooltip-custom-theme', 
89						position: 'top-left' 
90					}); 
91	                //ajout du tooltip sur le bouton share 
92					jQuery('#share-link').tooltipster({ 
93						theme: '.tooltip-custom-theme', 
94						position: 'top-left' 
95					}); 
96 
97	            }); 
98	        </script> 
99	    	<div class="fb-like" data-layout="button_count" data-action="like" data-show-faces="false" data-share="false"></div> 
100		</#if> 
101 
102    	<a id="print-link" href="javascript:;" title="<@liferay.language key="partage.imprimer.fiche"/>">print</a> 
103 
104<#--    	## On n'affiche pas le bouton FB et partage sur l'espace perso--> 
105    	<#if (currentFriendlyUrl?? && currentFriendlyUrl != friendlyurl_ESPACE_PERSO_DETAIL_AFPA_EN_DIRECT)> 
106	    	<a id="share-link" href="javascript:;" title="<@liferay.language key="partage.partager.fiche"/>">share</a> 
107	        <div id="share-div" style="display:none;"> 
108	    		<span class='st_email_large' displayText='Email' st_image="${images_folder}/afpa/pinAfpa.png"></span> 
109	    		<span class='st_facebook_large' displayText='Facebook'></span> 
110	    		<span class='st_twitter_large' displayText='Tweet'></span> 
111	    		<span class='st_linkedin_large' displayText='LinkedIn'></span> 
112	        </div> 
113		</#if> 
114    </div> 
115<#--	##/ Partager & réseaux sociaux--> 
116 
117<#--    ##Résumé--> 
118    <div class="header-article"> 
119<#--    	## lien image pour facebook--> 
120    	<link rel="image_src" href="$Visuel.getData()"/> 
121 
122        <div class="big-mask "> 
123        <#if parentStructureFieldSet22996.Visuel.getData() != ""> 
124        	<img id="twitterCardImg" alt="$Auteur.getData()" src="${parentStructureFieldSet22996.Visuel.getData()}" /> 
125        </#if> 
126        	</div> 
127        <div class="header-teaser"> 
128            <h2>${Auteur.getData()}</h2>&nbsp; <span class="age"> 
129 
130<#--            ## On ne peut pas éviter le string null en base--> 
131            <#if Age?? && Age?has_content && Age.getData() != 'null'> 
132            - ${Age.getData()} <@liferay.language key="temoignage.detail.age"/> </span> 
133            </#if> 
134            <h3 class="medium">${Profession_de_l_auteur.getData()}</h3> 
135<#--            ## Atention, le nommage des variables prête à confusion. $en_bref = citation--> 
136            <p class="chapeau">${En_Bref.getData()}</p> 
137        </div> 
138    </div> 
139<#--    ##/Résumé--> 
140 
141    <div class="article-content"> 
142<#--        ## EnBref : attention, le nommage des variable prête à confusion. $en_bref = citation--> 
143        <div class="article-part"> 
144            <h2><@liferay.language key="temoignage.detail.enbref"/></h2> 
145            <p class="exergue" id="twitterCardDescription"> 
146            	${.vars["reserved-article-description"].getData()} 
147            </p> 
148        </div> 
149<#--        ##/EnBref--> 
150 
151<#--        ##contenu--> 
152        <div class="contribution"> 
153            ${Contenu.getData()} 
154        </div> 
155<#--        ##/contenu--> 
156 
157<#--        ##formations--> 
158		<#assign rechercheFormationByMetierUrl = journalArticleUtil.buildUrlToSearchFormationByMetier(longGroupId, serviceContext, Profession_de_l_auteur.getData()) /> 
159 
160        <a href="${rechercheFormationByMetierUrl}" title="<@liferay.language key="temoignage.detail.voir.les.formations.pour.ce.metier"/>" class="pink-button"><@liferay.language key="temoignage.detail.voir.les.formations.pour.ce.metier"/></a> 
161<#--        ##/formations--> 
162 
163<#--        ## Il vous raconte--> 
164        <div> 
165            <#if Video.getData()?has_content> 
166            <h2><@liferay.language key="temoignage.detail.il.vous.raconte"/></h2> 
167             <div class="videoWrapper"> 
168             	<iframe title="Vidéo de témoignage" width="100%" height="100%" src="https://www.youtube.com/embed/${Video.getData()}" frameborder="0" allowfullscreen></iframe> 
169             </div> 
170            </#if> 
171        </div> 
172<#--        ##/Il vous raconte--> 
173 
174<#--        ##Ils temoignent aussi--> 
175        <#if relatedAssets?has_content> 
176	        <div class="same-subject"> 
177	            <h2><@liferay.language key="temoignage.detail.ils.temoignent.aussi"/></h2> 
178 
179	    		${serviceContext.setAttribute("parentRelatedArticleId", primKey)} 
180		        ${serviceContext.setAttribute("afpa_sticky", "DETAIL")} 
181				<#if journalArticleUtil?? > 
182					<#list relatedAssets as curRelatedAsset> 
183				    	<div class="relative">${journalArticleUtil.render(curRelatedAsset,"Temoignage resume small",themeDisplay)}</div> 
184			    	</#list> 
185				</#if> 
186				<#assign void = serviceContext.removeAttribute("parentRelatedArticleId") /> 
187				<#assign void = serviceContext.removeAttribute("afpa_sticky") /> 
188	        </div> 
189        </#if> 
190<#--        ##/Ils temoignent aussi--> 
191    </div> 
192</article> 
193 
194<#assign  x = httpServletRequest.getSession().setAttribute("TemoignageSmallImg", "${.vars['reserved-article-small-image-url'].data}")/> 
195 
196<#--	TODO réparer twitter--> 
197<#--##Ajout des twitter card--> 
198<#--<#assign afpa_twitter_titre = ["twitter:title", $titreActu.trim()])--> 
199<#--<#assign afpa_twitter_description = ["twitter:description", $reserved-article-description.getData().trim()])--> 
200 
201<#--## Sur l'url, on retire les elements après afpa_query pour ne pas prendre en compte le sticky--> 
202<#--<#assign index = $url.trim().indexOf('&afpa_query'))--> 
203<#--#if ($index != -1)--> 
204<#--	<#assign url = $url.trim().substring(0, $index))--> 
205<#--#end--> 
206<#--<#assign afpa_twitter_url = ["twitter:url",$url])--> 
207 
208<#--##Pour le visuel, on a un pattern /image/journal/article?img_id--> 
209<#--## qui est pris en compte par le ContentTransformerListener qui prefix par--> 
210<#--##  (cf. ContentTransformerListener l.169)--> 
211<#--## Du coup, je retire le /image de la variable, pour l'ajouter ensuite--> 
212<#--<#assign image = $Visuel.getData().trim().toString())--> 
213<#--#if($image && $image != '')--> 
214<#--    <#assign index = $image.indexOf('/image')+6)--> 
215<#--    <#assign image = $image.substring($index))--> 
216<#--#end--> 
217 
218<#--<#assign cur_visuel = "${themeDisplay.getURLPortal()}/image${image}" )--> 
219<#--<#assign afpa_twitter_image = ["twitter:image",$cur_visuel])--> 
220 
221<#--<#assign afpa_twitter = [$afpa_twitter_titre, $afpa_twitter_description, $afpa_twitter_url, $afpa_twitter_image])--> 
222<#--<#assign v = $httpServletRequest.getSession().setAttribute("afpa_twitter", $afpa_twitter))--> 
223<#--<#assign w = $httpServletRequest.getSession().setAttribute("current_visual", $cur_visuel))-->