Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> mlxSeoService [in template "20101#20128#BREADCRUMBS-TPL" at line 12, column 24]
----
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 landingData = mlxSeoService.g... [in template "20101#20128#BREADCRUMBS-TPL" at line 12, column 1]
----
1<#assign listItems = []>
2
3<#assign images_folder = themeDisplay.getPathThemeImages() />
4<#assign masterName = mlxMastersHelperService.getMasterNameByLayout(layout) />
5<#assign pageMaster = masterName />
6<#assign pageURL = portalUtil.getCurrentURL(request) />
7
8<#assign mlxPageInfo = request.getAttribute("mlxPageInfo")!"" />
9<#if !mlxPageInfo?has_content>
10 <#assign mlxPageInfo= mlxPageInfoService.getPageInfoByUrl(pageURL, scopeGroupId, locale)!"" />
11</#if>
12<#assign landingData = mlxSeoService.getLandingSEMForUrl(themeDisplay)!"" />
13<#if landingData?has_content>
14
15<#assign landingTitle = (mlxJournalHelperService.getStructureFieldValue(landingData, "pageTitle", locale)?string)!name.getData() />
16
17</#if>
18<#if (pageMaster?lower_case != "home") >
19 <nav id="breadcrumbs" class="corporate--breadcrumb--container">
20 <ul class="corporate--breadcrumb">
21 <li class="corporate--breadcrumb--inicio">
22 <a class="corporate--breadcrumb--link" href="/" title='<@corporate.mlxlanguage key="mlx.breadcrumb.go-to-home" />' data-track-event-label="Home" data-track-event-category="BreadCrumb" data-gtm-event="click" data-gtm-event-label="/Home" data-gtm-event-click-category="[currentPage]_Header_Breadcrumb">
23 <img src="${images_folder}/common/homepage.svg" class="corporate--breadcrumb--image" alt="Home" width="14" height="14">
24 </a>
25 <span class="divider"> > </span>
26 </li>
27 <#if mlxPageInfo?has_content>
28 <#if mlxPageInfo.mlxReverseNavigationMenuDTO??>
29 <#macro breadcrumbItem item>
30 <#assign itemName=item.name>
31 <#assign itemUrl=item.url>
32 <#assign itemMaster=item.masterName>
33 <#assign itemLayoutMasterName=item.layoutMasterName>
34
35 <#assign listItems = listItems + [item]>
36
37 <#if (item.getChilds()?size > 0)>
38 <li class="corporate--breadcrumb--item">
39 <#if itemUrl?has_content>
40 <a href="${itemUrl}"
41 class="corporate--breadcrumb--link"
42 data-track-event-label="${itemMaster}"
43 data-track-event-category="BreadCrumb"
44 data-gtm-event="click"
45 data-gtm-event-label="${itemMaster}"
46 data-gtm-event-click-category="[currentPage]_Header_Breadcrumb">
47 <strong>${itemName}</strong>
48 </a>
49 <#else>
50 <span class="breadcrumb-last corporate--breadcrumb--link">${itemName}</span>
51 </#if>
52 <span class="divider"> > </span>
53 </li>
54 <@breadcrumbItem item=item.getChilds()[0] />
55 <#else>
56 <li class="corporate--breadcrumb--item">
57 <#if landingData?has_content>
58 <span class="breadcrumb-last corporate--breadcrumb--link">${landingTitle}</span></li>
59 <#else>
60 <span class="breadcrumb-last corporate--breadcrumb--link">${itemName}</span></li>
61 </#if>
62 </#if>
63
64 </#macro>
65 <@breadcrumbItem item=mlxPageInfo.getMlxNavigationMenuDTO() />
66 <#else>
67 <li class="corporate--breadcrumb--item"><!--¡¡[[No vienen datos en mlxReverseNavigationMenuDTO]]!!--></li>
68 </#if>
69 </#if>
70 </ul>
71 </nav>
72
73 <!-- INIT DATO ESTRUCTURADO BREADCRUMB -->
74 <#if mlxPageInfo?has_content>
75 <#if mlxPageInfo.mlxReverseNavigationMenuDTO??>
76 <script type="application/ld+json">
77 {
78 "@context": "https://schema.org",
79 "@type": "BreadcrumbList",
80 "itemListElement": [
81 <#list listItems as item >
82 <#if (item?counter > 1)>
83 ,
84 </#if>
85 {
86 "@type": "ListItem",
87 "position": ${item?counter},
88 "name": "${item.name?replace("\"","\\\"")?replace("“","\\\"")}",
89 "item": "https://${themeDisplay.getPortalDomain()}${item.url}"
90 }
91 </#list>
92 ]
93 }
94 </script>
95 </#if>
96 </#if>
97 <!-- END -->
98
99</#if>
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