Une erreur s'est produite lors du traitement du modèle.
Failed to "?eval" string with this error:

---begin-message---
Syntax error in ?eval-ed string in line 1, column 125:
Lexical error: encountered "u" (117), after "\"PCaseImage - Gallery - 0 - Cp-diager-automated-warehouses-for-boxes-miniload \\".
---end-message---

The failing expression:
==> background?eval  [in template "20101#20128#PRACTICAL-CASE-STR-DEFAULT-TEMPLATE" at line 337, column 59]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign background = background?eval  [in template "20101#20128#PRACTICAL-CASE-STR-DEFAULT-TEMPLATE" at line 337, column 37]
----
1<#--HEADER--> 
2<div class="corporate--case--header--container"> 
3    <figure class="corporate--case--header--background-figure"> 
4        ${corporate.img(list_image.getData(), false, 'alt="' + name.getData() + '"', 'title="' + name.getData() + '"', 'class="corporate--case--header--background-image"')} 
5    </figure> 
6    <div class="corporate--case--header"> 
7        <h1 data-sticky-title="true" class="corporate--case--header--heading">${name.getData()}</h1> 
8        <p data-sticky-subheading="true" class="corporate--case--header--subheading">${subheader.getData()}</p> 
9    </div> 
10</div> 
11   
12<#--TOP DESCRIPTION--> 
13<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
14<#assign articleId = .vars["reserved-article-id"].data /> 
15<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
16<#assign clientStrKey = "CLIENT-STR" /> 
17<#assign clientRelated = (mlxAssetHelperService.getFirstRelatedArticle(groupId, articleId, clientStrKey))!"" /> 
18<div class="corporate--case--subheader--container"> 
19    <#if clientRelated?has_content> 
20        <#assign clientLogoContentValues = (mlxJournalHelperService.getStructureFieldValues(clientRelated, locale))!{}  /> 
21        <#assign clientLogoContent = (clientLogoContentValues["logo"])!{}  /> 
22        <#if clientLogoContent?has_content> 
23            <#assign clientLogo = jsonFactoryUtil.createJSONObject(clientLogoContent) /> 
24            <#assign clientName = (clientLogoContentValues["name"]?string)!"" /> 
25 
26            <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(clientLogo.uuid, globalGroupId)!"" /> 
27            <#if fileEntry?has_content> 
28                <#assign clientLogoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientLogo.uuid, "${locale}")/> 
29                <#assign clientLogoAlt = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle", fileEntry.getFileVersion().getFileVersionId()).getString(locale)!""/> 
30 
31                <#if clientLogoAlt == ""> 
32                    <#assign clientLogoAlt = clientName /> 
33                </#if> 
34 
35                <figure class="corporate--case--subheader--figure"> 
36                        ${corporate.img(cdn + clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--case--subheader--figure-image"')} 
37                </figure> 
38            </#if> 
39        </#if> 
40    </#if> 
41    <div class="corporate--case--subheader"> 
42        <p class="corporate--case--subheader--description">${description.getData()}</p> 
43    </div> 
44</div> 
45 
46<#--MEDIABAR--> 
47<#assign technicalSheetStr = "TECHNICAL-SHEET-STR" /> 
48<#assign relatedTechnicalSheets = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, technicalSheetStr) /> 
49 
50    <div class="corporate--case--mediabar--container"> 
51        <ul class="corporate--case--mediabar" data-gtm-block-name="Case-study_Detail"> 
52        	<#--videos tab--> 
53			<#if video_gallery?has_content> 
54				<#list video_gallery.getSiblings() as cur_video_gallery> 
55					<#if cur_video_gallery?has_content && cur_video_gallery.video_gallery_file?has_content > 
56						<#if cur_video_gallery.video_gallery_file.getData()?has_content> 
57							<li class="corporate--case--mediabar--item" data-name="corporate--case--video"> 
58								<a href="#corporate--case--video" data-fancybox-trigger='<@corporate.mlxlanguage key="mlx.mediabar.videos" />' class="corporate--case--mediabar--item--link" data-track-tab-name="corporate--case--video" data-href="corporate--case--video"> 
59									<#-- Cambiar url por otra del entorno --> 
60									<i style="background-image:url('/documents/20128/594105/Video.svg/cb33ef6c-7074-f8da-b5a8-c7cb1270b68c?t=1522060500000'); background-repeat:no-repeat; width: 24px; height: 24px; margin: .5rem 0"></i> 
61									<span class="corporate--case--mediabar--item--text"><@corporate.mlxlanguage key="mlx.mediabar.videos" /></span>     
62								</a> 
63							</li> 
64						</#if> 
65					</#if> 
66				</#list> 
67			</#if> 
68 
69			<#--images tab--> 
70			<#if image_gallery?has_content> 
71				<#list image_gallery.getSiblings() as cur_image_gallery> 
72					<#if cur_image_gallery.image_gallery_file.getData()?has_content> 
73						<#if cur_image_gallery.image_gallery_type.getData() == "images"> 
74							<#assign tabText><@corporate.mlxlanguage key="mlx.mediabar.images" /></#assign> 
75							<#if cur_image_gallery.getData() != ""> 
76								<#assign tabText = cur_image_gallery.getData()> 
77							</#if> 
78						</#if> 
79						<#if cur_image_gallery.image_gallery_type.getData() == "plans"> 
80							<#assign tabText><@corporate.mlxlanguage key="mlx.mediabar.drawings" /></#assign> 
81							<#if cur_image_gallery.getData() != ""> 
82								<#assign tabText = cur_image_gallery.getData()> 
83							</#if> 
84						</#if> 
85						 
86						<li class="corporate--case--mediabar--item" data-name="corporate--case--gallery">   
87							<a href="#corporate--case--gallery" class="corporate--case--mediabar--item--link" data-gtm-event="clicktab" data-gtm-event-click-category="Practical_Case_Detail_Tab" data-gtm-event-label="technical-details-tab" data-track-tab-name="corporate--case--gallery" data-href="corporate--case--gallery" > 
88								<#-- Cambiar url por otra del entorno --> 
89								<i style="background-image:url('/documents/20128/594105/Image.svg/414451cc-aced-be3c-4072-c42d32126845?t=1522060451000'); background-repeat:no-repeat; width: 24px; height: 24px; margin: .5rem 0"></i> 
90								<span class="corporate--case--mediabar--item--text">${tabText!""}</span> 
91							</a> 
92						</li> 
93					</#if> 
94				</#list> 
95			</#if> 
96 
97            <#--technicalSheet tab--> 
98            <#if relatedTechnicalSheets?has_content> 
99                <li class="corporate--case--mediabar--item"> 
100                    <a title='' data-fancybox data-src="#technicalsheet" href="javascript:;" class="techTr tech-gallery corporate--case--mediabar--item--link" data-gtm-event="clicktab" data-gtm-event-click-category="Practical_Case_Detail_Tab" data-gtm-event-label="technical-details-tab"> 
101                        <#-- Cambiar url por otra del entorno --> 
102                        ${corporate.img('/documents/20128/594105/Tech+specs.svg/7401d7f0-d66c-3b49-1a9e-271878bfc795?t=1522060479000', true, 'class="corporate--case--mediabar--item--image"')} 
103                        <span class="corporate--case--mediabar--item--text"><@corporate.mlxlanguage key="mlx.mediabar.specifications" /></span> 
104                    </a>  
105                    <div style="display: none;" id="technicalsheet"> 
106                        <#list relatedTechnicalSheets as technicalSheet> 
107                        <#assign technicalSheetView = mlxJournalContentService.getContent(technicalSheet, technicalSheet.getDDMTemplateKey(), locale, themeDisplay, 'view') />  
108                        ${technicalSheetView}       
109                        </#list> 
110                    </div>  
111                </li> 
112            </#if> 
113             
114            <#--PDF tab--> 
115            <#if pdf.getData() != ''> 
116                <li class="corporate--case--mediabar--item"> 
117                    <a href="${pdf.getData()}" rel="nofollow" title='<@corporate.mlxlanguage key="mlx.practical-case.pdf-download" />' class="pdf-generator corporate--case--mediabar--item--link" target="_blank" data-gtm-event="download" data-gtm-event-click-category="Download" data-gtm-event-label="${clientName!""}"> 
118                        <#-- Cambiar url por otra del entorno --> 
119                        ${corporate.img('/documents/20128/594105/Download+PDF.svg/2f94eda9-5ab4-754c-cef8-735d15686732?t=1522060427000', true, 'class="corporate--case--mediabar--item--image"')} 
120                        <span class="corporate--case--mediabar--item--text"><@corporate.mlxlanguage key="mlx.practical-case.pdf-download" /></span> 
121                    </a> 
122                </li> 
123            </#if> 
124        </ul> 
125    </div> 
126 
127 
128<#--  PRIMER VIDEO  --> 
129<#if (video_gallery)?has_content> 
130    <#if (video_gallery.getSiblings()?first.video_gallery_file.getData())?has_content> 
131     
132        <div class="corporate--case--video"> 
133            <span id="corporate--case--video" class="corporate--product-section--nav-anchor"></span> 
134            <div class="corporate--case--video-player--container"> 
135                <div class="corporate--case--video-player"> 
136                    <#assign first_video = video_gallery.video_gallery_file.getData()> 
137                    <#assign videoUuid = mlxUrlUtilService.getUuidFromLiferayUrl(first_video)!""  /> 
138                    <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId)!"" /> 
139 
140                    <#if videoFileEntry?has_content> 
141                        <#assign videoFileEntry = videoFileEntry /> 
142 
143                        <#assign VideoFile = videoFileEntry.getFileVersion().getFileVersionId()!"" /> 
144                        <#assign videoYoutube = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxyoutubeembeddedcode",VideoFile).getString(locale))!"" />  
145                        <#assign videoDuration = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry", "Mlxduration", VideoFile)!"" /> 
146                        <#assign videoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(videoUuid, locale)!"" /> 
147 
148                        <#assign videoBackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
149                        <#if videoBackground?has_content> 
150                            <#assign videoBackground = videoBackground?replace('\\u','')?eval /> 
151                            <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoBackground.uuid, globalGroupId) /> 
152                            <#assign videoBackground = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry) /> 
153                        </#if> 
154 
155                        <!-- DATOS ESTRUCTURADOS SEO JSON+LD --> 
156                        <#assign domain = themeDisplay.getPortalDomain() />  
157                        <#assign organizationName = "Mecalux"> 
158                        <#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) /> 
159                        <#assign publicDate = dateUtil.getDate(article.displayDate, "dd/MM/yyyy", locale, timeZoneUtil.getTimeZone("UTC")) /> 
160 
161                        <#-- logo --> 
162                        <#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" /> 
163                        <#if (domain?contains("es")) || (domain?contains("mecalux.es")) > 
164                            <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" /> 
165                        </#if> 
166                        <#if (domain?contains("us")) || (domain?contains("interlake")) > 
167                            <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000"> 
168                        </#if> 
169 
170                        <#if videoYoutube?has_content> 
171                            <figure class="corporate--case--video-player--figure-youtube" > 
172                                <div id="player"></div> 
173                            </figure> 
174														 
175                            <script > 
176                                let iframeYoutube = document.querySelector('[data-track-tab-name="corporate--case--video"]'); 
177                                var tag = document.createElement('script'); 
178                                tag.src = "https://www.youtube.com/player_api"; 
179                                var firstScriptTag = document.getElementsByTagName('script')[0]; 
180                                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
181 
182                                let player; 
183                                function onYouTubeIframeAPIReady() { 
184                                    player = new YT.Player('player', { 
185                                        height: '100%', 
186                                        width: '100%', 
187                                         videoId: '${videoYoutube}',  
188                                        playerVars: { 'autoplay': 1, 'controls': 1 }, 
189                                        events: { 
190                                        'onReady': onPlayerReady, 
191                                        'onStateChange': onPlayerStateChange 
192
193                                    }); 
194                                    document.getElementById('player').classList.add('corporate--case--video-player--youtube'); 
195 
196
197 
198                                function onPlayerReady(event) { 
199                                    iframeYoutube.addEventListener('click', () => { 
200                                        event.target.playVideo(); 
201                                    }); 
202
203 
204                                function onPlayerStateChange(event) { 
205                                    if (event.data == YT.PlayerState.ENDED) { 
206                                        event.target.stopVideo(-1); 
207
208
209							</script>  
210                        <#else> 
211                            <figure class="corporate--case--video-player--figure"> 
212                                <video class="corporate--case--video-player--vid" poster="${videoBackground}" controls="controls" controlsList="nodownload"> 
213                                    <source src="${videoUrl}" > 
214                                </video> 
215                            </figure> 
216                        </#if>  
217 
218                        <script type="application/ld+json"> 
219
220                                "@context": "https://schema.org", 
221                                "@type": "VideoObject", 
222                                "name": "${name.getData()?replace("\"","\\\"")?replace("“","\\\"")}", 
223                                "description": "${subheader.getData()}", 
224                                "thumbnailUrl": "${videoBackground!}", 
225                                "uploadDate": "${publicDate}", 
226                                <#if videoDuration?has_content> 
227                                    "duration": "${videoDuration.getData()}", 
228                                </#if> 
229                                "publisher": { 
230                                    "@type": "Organization", 
231                                    "name": "${organizationName}", 
232                                    "logo": { 
233                                        "@type": "ImageObject", 
234                                        "url": "${logo}", 
235                                        "width": 600, 
236                                        "height": 60 
237
238                                }, 
239                                "contentUrl": "${cdn}${videoUrl}", 
240                                "embedUrl": "${cdn}${videoUrl}" 
241
242                        </script> 
243                    </#if> 
244 
245                </div> 
246            </div> 
247        </div> 
248 
249    </#if> 
250</#if> 
251 
252 
253<#--CONTENT--> 
254<section class="corporate--section"> 
255    ${content.getData()} 
256</section> 
257 
258<#--TECHNICAL SHEET--> 
259<#assign technicalSheetRelated = (mlxAssetHelperService.getFirstRelatedArticle(groupId, articleId, technicalSheetStr)) ! "" /> 
260<#if technicalSheetRelated?has_content> 
261    <#assign technicalSheet = mlxJournalContentService.getContent(technicalSheetRelated,technicalSheetRelated.getDDMTemplateKey(),locale,themeDisplay,'view') />  
262    ${technicalSheet} 
263</#if>  
264 
265<#--GALERY BANNERS--> 
266<#assign typeLength = [] /> 
267<#assign existsImageGallery = false /> 
268<#assign existsVideoGallery = false /> 
269 
270<#list video_gallery.getSiblings() as videoCategory > 
271    <#if videoCategory.video_gallery_file.getData()?has_content >  
272        <#assign typeLength = typeLength + [videoCategory] /> 
273        <#assign existsImageGallery = true /> 
274    </#if> 
275</#list> 
276 
277<#list image_gallery.getSiblings() as imageCategory> 
278    <#if imageCategory.image_gallery_file.getData()?has_content > 
279        <#assign typeLength = typeLength + [imageCategory] /> 
280        <#assign existsVideoGallery = true /> 
281    </#if> 
282</#list> 
283 
284<#if (existsImageGallery) || (existsVideoGallery)> 
285    <div class="corporate--case--gallery" data-gtm-block-name="Multimedia"> 
286        <span id="corporate--case--gallery" class="corporate--product-section--nav-anchor"></span> 
287        <div class="corporate--case--gallery--container"> 
288            <h2 class="corporate--case--gallery--title"> <@corporate.mlxlanguage key="mlx.product.tab.gallery" /> </h2> 
289 
290            <div id="fancyGallery" style="display:none"> 
291                <#-- IMAGENES --> 
292                <#assign imageCounter = 0 /> 
293                <#assign typesCounter = [] /> 
294 
295                <#if image_gallery.getSiblings()?has_content > 
296                    <#list image_gallery.getSiblings() as curImageGallery > 
297                        <#list curImageGallery.image_gallery_file.getSiblings() as cur_file >   
298                            <#assign url = cur_file.getData() /> 
299                            <#if url?has_content > 
300                                <#assign typesCounter = typesCounter + [ curImageGallery.image_gallery_type.getData()!"" ] /> 
301                                <#assign uuid =  mlxUrlUtilService.getUuidFromLiferayUrl(url) /> 
302                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(uuid, globalGroupId) /> 
303                                <#assign title = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)/> 
304                                <#assign titleDocument = fileEntry.getTitle() /> 
305                                <#assign urlParamConcat = cur_file.getData()?contains("?")?then("&","?")> 
306                                <#assign imageFancy = cur_file.getData()+urlParamConcat+'imwidth=1280&imdensity=1'/> 
307                                <#assign imageThumb = cur_file.getData()+urlParamConcat+'imwidth=320&imdensity=1'/> 
308 
309                                <a href="${imageFancy}" data-fancybox='${curImageGallery.image_gallery_type.getData()?replace(" ", "-")}' data-caption="${title}" data-thumb='${imageThumb}'> 
310                                    ${corporate.img(imageFancy, true, 'alt="' + title + '"', 'title="' + title + '"', 'class="corporate--case--gallery--image" data-js-urlparams="'+curImageGallery.image_gallery_type.getData()?replace(" ", "-")+'"')} 
311                                </a> 
312                                     
313                                <#if imageCounter == 0> 
314                                    <#assign firstImageGallery = {'src': imageFancy!"", 'title':title!""} /> 
315                                    <#assign imageCounter = imageCounter + 1 /> 
316                                </#if> 
317                            </#if> 
318                        </#list> 
319                    </#list> 
320                </#if> 
321                 
322                <#-- VIDEOS --> 
323                <#if video_gallery.getSiblings()?has_content > 
324                    <#list video_gallery.getSiblings() as curVideoGalley > 
325                        <#list curVideoGalley.video_gallery_file.getSiblings() as cur_file >  
326                            <#assign url = cur_file.getData() /> 
327                            <#if url?has_content > 
328 
329                                <#assign typesCounter = typesCounter + [ curVideoGalley.video_gallery_type.getData()!"" ]  /> 
330                                <#assign uuid =  mlxUrlUtilService.getUuidFromLiferayUrl(url) /> 
331                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(uuid, globalGroupId) /> 
332                                <#assign title = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)/> 
333                                <#assign titleDocument = fileEntry.getTitle() /> 
334                                <#assign background = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", fileEntry.getFileEntryId()))!"" /> 
335                                 
336                                <#if background?has_content> 
337                                    <#assign background = background?eval /> 
338                                    <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(background.uuid, globalGroupId) /> 
339                                    <#assign background = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry) /> 
340                                    <#assign urlParamConcat = background?contains("?")?then("&","?")> 
341                                    <#assign imageThumb = background+urlParamConcat+'imwidth=320&imdensity=1'/> 
342                                </#if> 
343                                 
344                                <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
345                                <#assign href = url /> 
346                                <#if youtubeEmbeddedCode?has_content > 
347                                    <#assign href = "https://www.youtube.com/embed/${youtubeEmbeddedCode}?autoplay=1&rel=0" /> 
348                                <#else> 
349                                    <#assign htmlVideo = 'data-type="html5video"'> 
350                                </#if> 
351                                 
352                                <a href="${href}" ${htmlVideo!} data-fancybox='${curVideoGalley.video_gallery_type.getData()?replace(" ", "-")}' data-caption="${title!''}" data-thumb='${imageThumb!""}'> 
353                                    ${corporate.img(background, true, 'alt="' + title + '"', 'title="' + title + '"', 'class="corporate--case--gallery--image" data-js-urlparams="'+curVideoGalley.video_gallery_type.getData()?replace(" ", "-")+'"')} 
354                                </a> 
355                            </#if> 
356                        </#list> 
357                    </#list> 
358                </#if> 
359            </div> 
360 
361            <#if (typeLength?size > 0) > 
362                <div class="corporate--case--gallery--filters"> 
363                    <#assign imagesCheck = false> 
364                    <#assign illustrationsCheck = false> 
365                    <#assign plansCheck = false> 
366                                 
367                    <#if (image_gallery.getSiblings()?size > 1)> 
368                        <#list image_gallery.getSiblings() as curImageGallery> 
369                            <#if curImageGallery.image_gallery_type.data == 'images'> 
370                                <#assign imagesCheck = true> 
371                            </#if> 
372                            <#if curImageGallery.image_gallery_type.data == 'illustrations'> 
373                                <#assign illustrationsCheck = true> 
374                            </#if> 
375                            <#if curImageGallery.image_gallery_type.data == 'plans'> 
376                                <#assign plansCheck = true> 
377                            </#if> 
378                        </#list> 
379                    </#if> 
380                                         
381                    <#-- Todos --> 
382                    <#if (((existsImageGallery) && (existsVideoGallery)) || ((imagesCheck) && (illustrationsCheck)) || (plansCheck)) > 
383                        <button class="corporate--case--gallery--chip" data-js-filter="all" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='All' onclick="Fancybox.fromOpener('#fancyGallery [data-fancybox]')"> 
384                            <@corporate.mlxlanguage key="mlx.theme.all" /> 
385                            <span class="corporate--case--gallery--badge">${typesCounter?size}</span> 
386                        </button>  
387                    </#if> 
388 
389                    <#-- IMAGENES --> 
390                    <#if image_gallery.getSiblings()?has_content > 
391                        <#list image_gallery.getSiblings() as curImageGallery > 
392                            <#if curImageGallery.image_gallery_file.getData()?has_content > 
393                                <#assign gtmTextFormat = curImageGallery.image_gallery_type.getData()?replace(" ", "-")?cap_first /> 
394                                <button class="corporate--case--gallery--chip" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}' data-fancybox-trigger="${curImageGallery.image_gallery_type.getData()?replace(' ', '-')}"> 
395                                    <#if gtmTextFormat == 'Plans'> 
396                                        <@corporate.mlxlanguage key='mlx.offers.doctype.Plane' /> 
397                                    <#else> 
398                                        <@corporate.mlxlanguage key='mlx.mediabar.${curImageGallery.image_gallery_type.getData()}' /> 
399                                    </#if> 
400                                    <span class="corporate--case--gallery--badge">${typesCounter?filter(x -> x = curImageGallery.image_gallery_type.getData()?replace(' ', '-'))?size}</span> 
401                                </button> 
402                            </#if> 
403                        </#list> 
404                    </#if> 
405                    <#-- VIDEOS --> 
406                    <#if video_gallery.getSiblings()?has_content > 
407                        <#list video_gallery.getSiblings() as curVideoGalley > 
408                            <#if curVideoGalley.video_gallery_file.getData()?has_content > 
409                                <#assign gtmTextFormat = curVideoGalley.video_gallery_type.getData()?replace(" ", "-")?cap_first /> 
410                                <button class="corporate--case--gallery--chip" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}' data-fancybox-trigger="${curVideoGalley.video_gallery_type.getData()?replace(' ', '-')}"> 
411                                    <#if (curVideoGalley.video_gallery_type.getData())?has_content> 
412                                        <@corporate.mlxlanguage key='mlx.mediabar.${curVideoGalley.video_gallery_type.getData()}' /> 
413                                    <#else> 
414                                        <@corporate.mlxlanguage key='mlx.mediabar.videos' /> 
415                                    </#if>     
416                                    <span class="corporate--case--gallery--badge">${typesCounter?filter(x -> x = curVideoGalley.video_gallery_type.getData()?replace(' ', '-'))?size}</button> 
417                                </button> 
418                            </#if> 
419                        </#list> 
420                    </#if> 
421                </div> 
422            </#if> 
423 
424            <div class="corporate--case--gallery--mosaic"> 
425                <#if (firstImageGallery.src)?has_content> 
426                    <figure class="corporate--case--gallery--figure-main" data-gtm-event="modal" data-gtm-event-label="open-product-gallery"> 
427                        <img class="corporate--case--gallery--image" src="${firstImageGallery.src!''}" alt="${firstImageGallery.title!''}" onclick="Fancybox.fromOpener('#fancyGallery [data-fancybox]')"> 
428                    </figure> 
429                </#if> 
430                 
431                <#if (firstImageGallery.title)?has_content> 
432                    <div class="corporate--case--gallery--ribbon"> 
433                        <p> 
434                            ${firstImageGallery.title} 
435                            <button class="corporate--case--gallery--media-button"> 
436                                ${corporate.img(cdn + '/o/corporate-theme/images/icons/ico-open-modal.svg', false,'class="corporate--case--gallery--media-button-image" alt="Gallery Media Button" width="18" height="18"')} 
437                            </button> 
438                        </p> 
439                    </div> 
440                </#if> 
441            </div> 
442        </div> 
443    </div> 
444</#if> 
445 
446 
447<#--RELATED PRODUCTS--> 
448<#assign productStrKeys = ["PRODUCT-STR", "SOFTWARE-SOLUTIONS-PRODUCTS-STR", "SOFTWARE-PRODUCT-STR"] /> 
449<#assign productRelated = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, productStrKeys) /> 
450<#if productRelated?has_content> 
451    <div class="corporate--case--relateds--container"> 
452        <h3 class="corporate--case--relateds--title"><@corporate.mlxlanguage key="mlx.practical-case.products" /></h3> 
453        <div class="corporate--case--relateds"> 
454            <#list productRelated as product> 
455                <#assign productImageContentValues = (mlxJournalHelperService.getStructureFieldValues(product, locale))!{}  /> 
456 
457                <#if product.getDDMStructure().getStructureKey() == "SOFTWARE-PRODUCT-STR" > 
458                    <#assign productImageContent = (productImageContentValues["detail_imageFieldSet"])!{}  /> 
459                    <#assign productImageContent = productImageContent.detail_image!""  /> 
460                <#else> 
461                    <#assign productImageContent = (productImageContentValues["list_imageFieldSet"])!{}  /> 
462                    <#assign productImageContent = productImageContent.list_image!""  /> 
463                </#if> 
464 
465                <#assign productName = (productImageContentValues["name"]?string)!"" /> 
466 
467                <#if !(productName?ends_with("*"))> 
468                    <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(product,locale, groupId)?string /> 
469                    <#assign productMasterName = mlxMastersHelperService.getMasterNameByJournalArticle(product) /> 
470                    <div class="corporate--case--relateds--item"> 
471                        <#if productImageContent?has_content> 
472                            <#assign productImage = jsonFactoryUtil.createJSONObject(productImageContent) /> 
473                        </#if> 
474                        <#if productImage?has_content> 
475                            <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(productImage.uuid, globalGroupId) /> 
476                            <#assign productImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
477                            <#assign urlParamConcat = productImageUrl?contains("?")?then("&","?")> 
478                            <figure class="corporate--case--relateds--item--figure"> 
479                                ${corporate.img(productImageUrl+urlParamConcat+'imwidth=320&imdensity=1', true, 'alt="' + productName + '"', 'title="' + productName + '"', 'class="corporate--case--relateds--item--image"')} 
480                            </figure> 
481                        </#if> 
482                        <div class="corporate--case--relateds--item--content"> 
483                            <a href="${productUrl}" class="corporate--case--relateds--item--link" title="${productName}" data-content-master="${productMasterName}" data-content-structure="${product.getDDMStructure().getStructureKey()}">${productName}</a> 
484                        </div> 
485                    </div> 
486                </#if> 
487            </#list> 
488        </div> 
489    </div> 
490</#if> 
491 
492<#-- DATOS ESTRUCTURADOS SEO JSON+LD --> 
493 
494<#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) /> 
495<#assign articleUrl =  mlxUrlUtilService.getUrlByJournalArticle(article, locale, groupId)?string /> 
496<#assign domain = themeDisplay.getPortalDomain()  />  
497<#assign currentUrl = "https://"+ domain + articleUrl /> 
498 
499<#--Valorar si hacerlo por el siteName o por el dominio. De momento lo haremos por dominio--> 
500<#assign organizationName = 'Mecalux' /> 
501<#if (domain?contains("us")) || (domain?contains("interlake")) > 
502    <#assign organizationName = 'Interlake Mecalux' /> 
503</#if> 
504 
505<#-- logo --> 
506<#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" /> 
507<#if (domain?contains("es")) || (domain?contains("mecalux.es")) > 
508	<#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" /> 
509</#if> 
510<#if (domain?contains("us")) || (domain?contains("interlake")) > 
511	<#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000" /> 
512</#if> 
513 
514<script type="text/javascript"> 
515    window.addEventListener('load', function() { 
516     
517        var metaTag = document.querySelector("meta[property='og:image']"); 
518        var content = metaTag.getAttribute('content'); 
519 
520        var imageSeo = '${list_image.getData()}' || content; 
521         
522        var image = new Image(); 
523        image.src = imageSeo; 
524         
525        image.onload = function() { 
526          var imageWidth = this.width; 
527          var imageHeight = this.height; 
528           
529          var domain = `https://${domain}`; 
530          var currentUrl = "${currentUrl}"; 
531          var headline = "${.vars["name"].getData()}"; 
532          var description = "${html_description.getData()}"; 
533          var socialImage = content; 
534          var datePublished = "${(article.getDisplayDate()?string['dd/MM/yyyy'])!''}"; 
535          var organizationName = "${organizationName}"; 
536          var logo = "${logo}"; 
537         
538          var schema =  { 
539                "@context": "https://schema.org", 
540                "@type": "Article", 
541                "mainEntityOfPage": { 
542                    "@type": "WebPage", 
543                    "@id": currentUrl 
544                }, 
545                "headline": headline, 
546                "description": description, 
547                "image": { 
548                    "@type": "ImageObject", 
549                    "url": imageSeo, 
550                    "width": imageWidth, 
551                    "height": imageHeight 
552                }, 
553                "datePublished": datePublished, 
554                "dateModified": datePublished, 
555                "author": { 
556                    "@type": "Organization", 
557                    "name": organizationName, 
558                    "url": domain 
559                }, 
560                "publisher": { 
561                    "@type": "Organization", 
562                    "name": organizationName, 
563                    "logo": { 
564                        "@type": "ImageObject", 
565                        "url": logo, 
566                        "width": 600, 
567                        "height": 60 
568
569
570
571           
572          var script = document.createElement('script'); 
573          script.type = 'application/ld+json'; 
574          script.text = JSON.stringify(schema); 
575           
576          document.querySelector('body').appendChild(script); 
577        }; 
578    }); 
579</script> 

Demandez conseil à un expert