SMART STORAGE SOLUTIONS
Add efficiency to your warehouse with intelligent space management
Mecalux: experience and innovation for your warehouse
Mecalux is one of the world’s leading intralogistics technology companies. It is at the cutting edge of warehouse automation and software development, while its metal racking systems are synonymous with quality in the industry.
We are backed by 60 years of experience, a determined commitment to innovation and — most importantly — our customers' satisfaction. Whatever the characteristics of your business, we have a storage solution for you.
Case Studies
See more case studiesFEATURED PRODUCT
AUTONOMOUS MOBILE ROBOTS (AMRs)
The robotic solution that streamlines internal goods transport
Automate internal material flows with Mecalux’s innovative range of AMRs. Expedite multiple intralogistics operations and boost warehouse productivity with intelligent vehicles designed to operate independently.
MECALUX IN NUMBERS
-
60 years
of experience
-
+70 countries
in commercial network
-
12 production
centres
-
7 R&D centres
for technological development
The following has evaluated to null or missing:
==> officeValues["name"] [in template "20101#20128#3282514" at line 146, column 130]
----
Tip: It's the final [] step that caused this error, not those before it.
----
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: ${officeValues["name"]?upper_case} [in template "20101#20128#3282514" at line 146, column 128]
----
1<#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" />
2<#assign masterName = mlxMastersHelperService.getMasterNameByLayout(layout) />
3
4<!--INIT MKTG-464 SUCCESSPAGE REDESIGN(Estilos para hacer doble columna + Dark)-->
5<style>
6 .corporate--successpage--title, .corporate--successpage--subtitle {color:#fff!important}
7 @media(min-width: 1300px){
8 .corporate--successpage--row {
9 display:flex
10 }
11 .corporate--successpage--item {
12 max-width:50%
13 }
14 }
15 .corporate--successpage *{
16 color: #fff
17 }
18 .corporate--successpage{
19 background-color: #333!important
20 }
21 .corporate--successpage--item-card {
22 background-color: #444!important
23 }
24 .corporate--successpage--description a {
25 color: #fa6900 !important;
26 }
27
28 .corporate--successpage--description a:hover {
29 color: #ff9549 !important
30 }
31 </style>
32 <!--END MKTG-464-->
33
34
35 <#assign privacyMasterId = 46002 />
36
37 <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL") />
38 <#assign office = '' />
39 <#assign siteInternationalArticleId = '3534343' />
40
41 <#assign vocabularyId = mlxConstants.getLongConstant('VocabularyIds','VOCABULARY_OFFICES_COUNTRIES') />
42 <#assign categoryList = mlxAssetHelperService.getAssetCategoriesByVocabularyId(vocabularyId) />
43 <#assign currentOfficesCategory = 0 />
44
45 <#assign language_id = themeDisplay.getLanguageId() />
46
47 <#list categoryList as cat>
48 <#if cat.description?contains(">"+countryCode+"<")>
49 <#assign currentOfficesCategory = cat.categoryId />
50 </#if>
51 </#list>
52
53 <#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
54 <#assign telDash = telValue?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
55
56 <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> <#-- AÑADIR CDN -->
57
58 <div id="corporate--v3--contact-form--v1" class="corporate--contact-us"
59 data-gtm-event="form"
60 data-gtm-event-category="${ctaOriginParam!'CTA_Default'}"
61 data-gtm-event-ctaorigin="${ctaOriginParam!'CTA_Default'}"
62 data-gtm-event-gaformid="${mlxForm["gaFormId"]!''}"
63 data-gtm-event-formType="${mlxForm.getType()!''}"
64 data-gtm-event-formPosition="footer"
65 data-js-form
66 data-js-form-type="${mlxForm.getPopup()}">
67 <#-- Cambiar url del background por una de la document library cuando esté, de momento pongo la url de PRO actual -->
68 <figure class="corporate--contact-us--figure">
69 <#assign imgWidth = '2048'>
70 <#assign imgUrl = '/documents/20128/3352716/10_contacta_bkg.jpg'>
71 <#assign imgClass = 'corporate--contact-us--figure-image'>
72 <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")>
73
74 ${corporate.img(cdn + imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true,
75 'alt="background contact"', 'class="' + imgClass + '" srcset="' + cdn + imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +
76 cdn + imgUrl + urlParamConcat + 'imwidth=1024&imdensity=1 1024w,' +
77 cdn + imgUrl + urlParamConcat + 'imwidth=2048&imdensity=1 2048w"')}
78
79 </figure>
80 <div class="corporate--contact-us--container">
81 <div class="corporate--contact-us--info-section">
82 <p class="corporate--contact-us--title">${(i18nLabels["supra_title"])}</p>
83 <ul class="corporate--contact-us--info-list">
84 <p class="corporate--contact-us--subtitle">${(i18nLabels["title"])}</p>
85 <#-- Cambiar url del icono phone por una de la document library cuando esté, de momento pongo la url de PRO actual y tambien mirar de poner bien el alt -->
86 <li class="corporate--contact-us--info-list--item"><span class="corporate--contact-us--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_phone.svg/2eb57424-7250-dff9-7f15-812b2807b653', true, 'alt="$titlePhone" class="corporate--contact-us--icon"')}</span>
87 <a class="corporate--contact-us--title-highlighted" href="tel:${telDash}" dir="ltr" rel="nofollow">${telValue}</a>
88 </li>
89 <#--<#if (offices?has_content)> -->
90 <p class="corporate--contact-us--subtitle">
91 <@corporate.mlxlanguage key="mlx.contactv3.offices.subtitle" />
92 </p>
93 <#-- Cambiar url del icono location por una de la document library cuando esté, de momento pongo la url de PRO actual y tambien mirar de poner bien el alt -->
94 <li class="corporate--contact-us--info-list--item"><span class="corporate--contact-us--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_location.svg/4d23278d-3bf3-a723-0382-89edd823f884', true, 'alt="$titleLocation" class="corporate--contact-us--icon"')}</span>
95 <#-- #set($article = $mlxHelperLocalServiceUtil.getArticleByAssetUrl($assetUrl, $globalGroupId, "$locale")) -->
96 <ul class="corporate--contact-us--office-list">
97
98
99 <#assign language_id = themeDisplay.getLanguageId() />
100 <#assign offices = mlxSalesOfficeService.getOfficesMapByCategoryId(3705718, language_id, groupId) />
101
102 <#if offices?has_content>
103
104 <#list offices as key, value>
105
106 <#list value as keyChild, valueChild>
107
108 <#assign office = (mlxUrlUtilService.getJournalArticleByUrl(keyChild, locale, groupId, true))!"" />
109
110 <#if office?has_content>
111
112 <#assign officeValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) />
113
114 <#if key?index == 0>
115
116 <!--MAIN OFFICE-->
117 <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) />
118 <#assign contentFromGlobalClassPK = globalContent.classPK />
119 <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/>
120 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) />
121
122 <li class="corporate--contact-us--office-list--item"><span class="corporate--contact-us--office--name">${officeValues["name"]?upper_case}</span> <p class="corporate--contact-us--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]}${jaMapStrValues["postal_code"]?has_content?then(' - '+jaMapStrValues["postal_code"],"")}, ${jaMapStrValues["locality"]}</p></li>
123 <#else>
124 <#assign ctgs = mlxAssetHelperService.getAssetCategoryListByJournalArticle(office) />
125 <#list ctgs as cat>
126 <!--OTHER OFFICES DESTACADAS DE LA HOME-->
127 <#if cat.categoryId?number == 3705718> <#-- "Oficina Destacada Home"-->
128 <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) />
129 <#assign contentFromGlobalClassPK = globalContent.classPK />
130 <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/>
131 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) />
132
133 <li class="corporate--contact-us--office-list--item"><span class="corporate--contact-us--office--name">${officeValues["name"]?upper_case}</span> <p class="corporate--contact-us--office--location">${jaMapStrValues["street_address"]} - ${jaMapStrValues["extended_street_address"]} ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>
134 </#if>
135 </#list>
136 </#if>
137 </#if>
138 </#list>
139 </#list>
140 <#else>
141 <!--INTERNATIONAL OFFICE SI NO LLEGA NINGUNA OFICINA DESTACADA-->
142
143 <#assign office = mlxAssetHelperService.fetchLatestApprovedArticle(globalGroupId, siteInternationalArticleId) />
144 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) />
145 <#assign officeValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) />
146 <li class="corporate--contact-us--office-list--item"><span class="corporate--contact-us--office--name">${officeValues["name"]?upper_case}</span> <p class="corporate--contact-us--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]} - ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>
147 </#if>
148
149 <!--VER MÁS OFICINAS-->
150 <#assign officeMasterId = 48003 />
151 <#assign siteId = themeDisplay.getLayout().getGroupId()>
152 <#assign officeLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(officeMasterId,scopeGroupId)!"") />
153
154 <#if officeLayout?has_content>
155 <#assign officePage = officeLayout.getFriendlyURL() />
156 <li class="corporate--contact-us--office-list--viewmore"><a href="${officePage}" class="corporate--contact-us--office-list--viewmore-link"><@corporate.mlxlanguage key="mlx.contactv3.offices.see-more" /></a>
157 </li>
158 </#if>
159
160 </ul>
161 </div>
162 <div class="corporate--contact-us--form-section">
163 <p class="corporate--contact-us--subtitle">${(i18nLabels["sub_title"])}</p>
164 <#--form:init-->
165 <form action="${mlxFormSaveActionURL}" method="POST" class="formlyWrapper-Base" id="${pn!''}_contact" data-js-form-submittype="${mlxSubmit!''}">
166 <input name="${pn!''}utmz" type="hidden"/>
167 <input type="hidden" id="${pn!''}g-recaptcha-response" name="${pn!''}g-recaptcha-response">
168 <input type="hidden" id="${pn!''}g-recaptcha-response-action" name="${pn!''}g-recaptcha-response-action" value="validate_captcha">
169 <div class="hide">
170 <label><@corporate.mlxlanguage key="mlx.contact.adt.common.honeypot" /></label>
171 <input type="text" maxlength="480" id="myusername" name="${pn!''}myusername">
172 </div>
173 <#--form:init-->
174 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
175 <label for="contact-name" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-name" /></label>
176 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-name" id="contact-name" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-name" />' tabindex="1" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-name" />' type="text" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-name'])!''}">
177 </div>
178 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
179 <label for="contact-surname" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-surname" /></label>
180 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-surname" id="contact-surname" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-surname" />' tabindex="2" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-surname" />' type="text" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-surname'])!''}">
181 </div>
182 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
183 <label for="contact-company" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-company" /></label>
184 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-company" id="contact-company" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-company" />' tabindex="3" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-company" />' type="text" maxlength="120" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="120" value="${(previousFormValues['contact-company'])!''}">
185 </div>
186 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
187 <label for="contact-email" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-email" /></label>
188 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-email" id="contact-email" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-email" />' tabindex="4" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-email" />' type="email" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-type='email' data-parsley-required="true" data-parsley-maxlength="100" value="${(previousFormValues['contact-email'])!''}">
189 </div>
190 <div class="corporate--contact-us--form--row">
191 <div class="corporate--contact-us--form--textbox-small" data-js="js__form-item">
192 <label for="contact-telephone" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" /></label>
193 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-telephone" id="contact-telephone" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" />' tabindex="5" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" />' type="text" maxlength="40" required="required" data-js="js__form-field" maxlength="40" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-telephone'])!''}">
194 </div>
195 <div class="corporate--contact-us--form--textbox-small" data-js="js__form-item">
196 <label for="contact-postcode" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" /></label>
197 <input class="corporate--contact-us--form--textbox--input" name="${pn!''}contact-postcode" id="contact-postcode" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" />' tabindex="6" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" />' type="text" maxlength="50" required="required" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="50" value="${(previousFormValues['contact-postcode'])!''}" >
198 </div>
199 </div>
200 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
201 <label for="contact-countryHidden" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-country" /></label>
202 <#-- De momento el current countryCode lo pillo del campo personalizado de site contact-country-default, si hace falta cambiarlo es aqui -->
203 <#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" />
204 <#-- Geolocalizar el pais por IP -->
205 <#assign countryIp = (mlxGeoIpUtilService.getCountry(mlxServiceContext))!"" />
206 <#if !countryIp?has_content >
207 <#assign countryIp = countryCode /> <#-- si falla el pais por ip se pone el default -->
208 </#if>
209
210 <select class="corporate--contact-us--form--textbox--select" tabindex="7" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-country" />' id="contact-country" name="${pn!''}contact-country">
211 <#-- Obtener select de paises -->
212 <#assign articleCountry = mlxMastersHelperService.getJournalArticleByMasterAndGroup(countrySelectorMasterId?number, groupId) />
213 <#-- Se hace un replace para poner como seleccionado o el valor previo introducido o el codigo del pais actual -->
214 <#assign countryOptionsHtml = htmlUtil.unescape(mlxJournalContentService.getContent(articleCountry, articleCountry.getDDMTemplateKey(),"${locale}",themeDisplay,'view'))?replace('value="${(previousFormValues["contact-country"])!countryIp}"','value="${(previousFormValues["contact-country"])!countryIp}" selected') />
215 ${countryOptionsHtml}
216 </select>
217 </div>
218 <div class="corporate--contact-us--form--textbox" data-js="js__form-item">
219 <label for="contact-message" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-message" /></label>
220 <#if (masterName?lower_case?contains("software"))>
221 <textarea class="corporate--contact-us--form--textbox--input corporate--contact-us--form--textbox--textarea" name="${pn!''}contact-message" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' id="contact-message" tabindex="8" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' maxlength="200" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-maxlength="200" data-parsley-required="true" required="required">${(previousFormValues['contact-message'])!''}</textarea>
222 <#else>
223 <textarea class="corporate--contact-us--form--textbox--input corporate--contact-us--form--textbox--textarea" name="${pn!''}contact-message" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' id="contact-message" tabindex="8" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" /> <@corporate.mlxlanguage key="mlx.contact.adt.common.optional" />' maxlength="200" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-maxlength="200" >${(previousFormValues['contact-message'])!''}</textarea>
224 </#if>
225 </div>
226
227 <div class="corporate--contact-us--form--bottom">
228 <div class="corporate--contact-us--form--textbox corporate--contact-us--form--checkbox" data-js="js__form-item">
229 <input id="contact-agree" name="${pn!''}contact-agree" tabindex="9" type="checkbox" data-parsley-required="true" data-parsley-trigger="change focusout" required requinetworking="" >
230 <label for="contact-agree"></label>
231 <#assign customPrivacyLayout = mlxMastersHelperService.getLayoutByMasterAndGroup(privacyMasterId, groupId) />
232 <#assign customPrivacyUrl = customPrivacyLayout.getFriendlyURL(locale) />
233
234 <p class="corporate--contact-us--form--textbox-paragraph">
235 <#if validator.isNotNull(i18nLabels["privacity"]!)>
236 ${(i18nLabels["privacity"])}
237 <#else>
238 ${languageUtil.format(locale, "mlx.contact.adt.common.agree", customPrivacyUrl + "?l=true")}
239 </#if>
240 </p>
241 </div>
242 <#--
243 #set($mlxCacheUtilsService = $serviceLocator.findService("mecalux-portlet", "com.mecalux.portal.service.MlxCacheUtilLocalService"))
244 #set($domainDataMap = $mlxCacheUtilsService.getDomainData($groupId))
245 #set($expandoAtributes = $domainDataMap.getExpandoAttributesMap())
246 #set($siteName = $expandoAtributes.get('Site-name'))
247
248 #set($newsAdvice = $languageUtil.get($locale, "mlx.contact.adt.common.lssi") + $languageUtil.get($locale, "mlx.contact.adt.common.optional"))
249
250 #if($siteName.toString().toLowerCase().contains(".com") && $newsAdvice.toString().toLowerCase().contains("interlake"))
251 #set($newsAdvice = $newsAdvice.replace("Interlake ", ""))
252 #end
253 -->
254 <#assign langCommonLssi><@corporate.mlxlanguage key='mlx.contact.adt.common.lssi' /></#assign>
255 <#assign langCommonOptional><@corporate.mlxlanguage key='mlx.contact.adt.common.optional' /></#assign>
256 <#if validator.isNotNull(i18nLabels["lssi"]!)>
257 <#assign newsAdvice = (i18nLabels["lssi"]) />
258 <#else>
259 <#assign newsAdvice = langCommonLssi + " " + langCommonOptional />
260 </#if>
261 <#assign siteName = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","site-name", scopeGroupId).getString())!"" />
262 <#if (siteName?lower_case?contains(".com") && newsAdvice?lower_case?contains("interlake")) >
263 <#assign newsAdvice = newsAdvice?replace("Interlake ", "") />
264 </#if>
265 <div class="corporate--contact-us--form--textbox corporate--contact-us--form--checkbox" data-js="js__form-item">
266 <input id="checkLssi" name="${pn!''}checkLssi" tabindex="10" type="checkbox">
267 <label for="checkLssi"></label>
268 <p class="corporate--contact-us--form--textbox-paragraph">${newsAdvice}</p>
269 </div>
270 </div>
271 <div class="corporate--contact-us--form--textbox">
272 <#if validator.isNotNull(i18nLabels["button"]!)>
273 <#assign buttonSumbitValue = i18nLabels["button"]>
274 <#else>
275 <#assign buttonSumbitValue><@corporate.mlxlanguage key='mlx.contact.adt.common.button.submit' /></#assign>
276 </#if>
277 <button id="submitButton" type="submit" class="corporate--contact-us--button" tabindex="11" data-js="js__form-submit">${buttonSumbitValue}</button>
278 </div>
279 <#-- </form> -->
280 <#-- Imagen de cargando -->
281 <#--<img alt="" class="sending hide" src="${cdn}/o/corporate-theme/images/common/loading2.gif">-->
282 ${corporate.img(cdn+"/o/corporate-theme/images/common/loading2.gif", false, 'alt=""', 'title=""', 'class="sending hide"', 'loading="lazy"')}
283 <#--form:end-->
284 <input type="hidden" title="track-consent" name="${pn}track-consent" id="track-consent" maxlength="10">
285 <input id="geotowns" type="hidden" value="" name="${pn!''}geotowns">
286 <input id="geotowns" type="hidden" value="" name="${pn!''}geotowns">
287 <input id="geostates" type="hidden" value="" name="${pn!''}geostates">
288 </form>
289 <#--form:end-->
290 </div>
291 </div>
292</div>
293
294<!-- DATOS ESTRUCTURADOS SEO JSON+LD -->
295
296<#assign domain = themeDisplay.getPortalDomain() />
297<#assign currentUrl = "https://"+ domain />
298
299<#-- logo -->
300<#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg" />
301<#if (domain?contains("es")) || (domain?contains("mecalux.es")) >
302 <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg" />
303</#if>
304<#if (domain?contains("us")) || (domain?contains("interlake")) >
305 <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg" />
306</#if>
307
308<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
309<#assign telDash = telValue?replace("+", "")?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
310<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
311<script type="application/ld+json">
312 {
313 "@context": "https://schema.org",
314 "@type": "Organization",
315 "url": "${currentUrl}",
316 "logo": "${currentUrl}${logo}",
317 "contactPoint": [{
318 "@type": "ContactPoint",
319 "telephone": "+${telDash}",
320 "contactType": "customer service",
321 "areaServed": "${countryCode}",
322 "availableLanguage": [
323 "${locale.getDisplayLanguage()}"
324 <#if siteName?lower_case?contains("belgique")>
325 ,"Dutch"
326 </#if>
327 <#if siteName?lower_case?contains("mecalux.be")>
328 ,"French"
329 </#if>
330 <#if locale.getDisplayLanguage() != "English">
331 ,"English"
332 </#if>
333 ]
334 },{
335 "@type": "ContactPoint",
336 "telephone": "+${telDash}",
337 "contactType": "sales",
338 "areaServed": "${countryCode}",
339 "availableLanguage": [
340 "${locale.getDisplayLanguage()}"
341 <#if siteName?lower_case?contains("belgique")>
342 ,"Dutch"
343 </#if>
344 <#if siteName?lower_case?contains("mecalux.be")>
345 ,"French"
346 </#if>
347 <#if locale.getDisplayLanguage() != "English">
348 ,"English"
349 </#if>
350 ]
351 }]
352 }
353</script>
354
355<script>
356 window.addEventListener('load', function() {
357 var heroContactLinks = document.querySelectorAll(".corporate--hero-video--contact");
358 var inContentCTALinks = document.querySelectorAll(".corporate--home--hero--highlighted--third-column a");
359 var stickyCTALinks = document.querySelectorAll(".corporate--sticky-header--cta");
360
361 function setGTMEventAttributes(category, ctaOrigin) {
362 var contactForm = document.querySelector("#corporate--v3--contact-form--v1");
363 if (contactForm) {
364 contactForm.setAttribute("data-gtm-event-category", category);
365 contactForm.setAttribute("data-gtm-event-ctaorigin", ctaOrigin);
366 }
367 }
368
369 heroContactLinks.forEach(function(link) {
370 link.addEventListener("click", function(ev) {
371 setGTMEventAttributes("CTA_Hero", "CTA_Hero");
372 });
373 });
374
375 inContentCTALinks.forEach(function(link) {
376 link.addEventListener("click", function(ev) {
377 setGTMEventAttributes("CTA_InContent", "CTA_InContent");
378 });
379 });
380
381 stickyCTALinks.forEach(function(link) {
382 link.addEventListener("click", function(ev) {
383 setGTMEventAttributes("CTA_Sticky", "CTA_Sticky");
384 });
385 });
386 });
387</script>