Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> mlxDocumentsHelperService  [in template "20101#20128#CLIENT-CP-TPL" at line 32, column 42]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

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

Fale com um especialista