Při zpracování šablony došlo k chybě.
The following has evaluated to null or missing: ==> mlxJournalContentService.getContent(articleCountry, articleCountry.getDDMTemplateKey(),"${locale}",themeDisplay,'view') [in template "20101#20128#3282514" at line 233, column 55] ---- 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)?? ---- Tip: It has been noticed that you are using ${...} as the sole content of a quoted string. That does nothing but forcably converts the value inside ${...} to string (as it inserts it into the enclosing string). If that's not what you meant, just remove the quotation marks, ${ and }; you don't need them. If you indeed wanted to convert to string, use myExpression?string instead. ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign countryOptionsHtml = mlxJourn... [in template "20101#20128#3282514" at line 233, column 25] ----
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 map = mlxSalesOfficeService.getOfficesMapByCategoryId(currentOfficesCategory, language_id, groupId) />
54
55
56 <#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
57 <#assign telDash = telValue?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
58
59 <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> <#-- AÑADIR CDN -->
60
61 <div id="corporate--v3--contact-form--v1" class="corporate--v3--contact-form--v1"
62 data-gtm-event="form"
63 data-gtm-event-category="${ctaOriginParam!'CTA_Default'}"
64 data-gtm-event-ctaorigin="${ctaOriginParam!'CTA_Default'}"
65 data-gtm-event-gaformid="${mlxForm["gaFormId"]!''}"
66 data-gtm-event-formType="${mlxForm.getType()!''}"
67 data-gtm-event-formPosition="footer"
68 data-js-form
69 data-js-form-type="${mlxForm.getPopup()}">
70 <#-- Cambiar url del background por una de la document library cuando esté, de momento pongo la url de PRO actual -->
71 <figure class="corporate--v3--contact-form--v1--figure">
72 <#assign imgWidth = '2048'>
73 <#assign imgUrl = '/documents/20128/3352716/10_contacta_bkg.jpg'>
74 <#assign imgClass = 'corporate--v3--contact-form--v1--figure-image'>
75 <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")>
76
77 ${corporate.img(cdn + imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true,
78 'alt="background contact"', 'class="' + imgClass + '" srcset="' + cdn + imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +
79 cdn + imgUrl + urlParamConcat + 'imwidth=1024&imdensity=1 1024w,' +
80 cdn + imgUrl + urlParamConcat + 'imwidth=2048&imdensity=1 2048w"')}
81
82 </figure>
83 <div class="corporate--v3--contact-form--v1--container">
84 <div class="corporate--v3--contact-form--v1--info-section">
85 <p class="corporate--v3--contact-form--v1--title"><@corporate.mlxlanguage key="mlx.contactv3.title" /></p>
86 <ul class="corporate--v3--contact-form--v1--info-list">
87 <p class="corporate--v3--contact-form--v1--subtitle"><@corporate.mlxlanguage key="mlx.contactv3.telephone.subtitle" /></p>
88 <#-- 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 -->
89 <li class="corporate--v3--contact-form--v1--info-list--item"><span class="corporate--v3--contact-form--v1--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_phone.svg/2eb57424-7250-dff9-7f15-812b2807b653', true, 'alt="$titlePhone" class="corporate--v3--contact-form--v1--icon"')}</span>
90 <a class="corporate--v3--contact-form--v1--title-highlighted" href="tel:${telDash}" dir="ltr" rel="nofollow">${telValue}</a>
91 </li>
92 <#--<#if (offices?has_content)> -->
93 <p class="corporate--v3--contact-form--v1--subtitle">
94 <@corporate.mlxlanguage key="mlx.contactv3.offices.subtitle" />
95 </p>
96 <#-- 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 -->
97 <li class="corporate--v3--contact-form--v1--info-list--item"><span class="corporate--v3--contact-form--v1--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_location.svg/4d23278d-3bf3-a723-0382-89edd823f884', true, 'alt="$titleLocation" class="corporate--v3--contact-form--v1--icon"')}</span>
98 <#-- #set($article = $mlxHelperLocalServiceUtil.getArticleByAssetUrl($assetUrl, $globalGroupId, "$locale")) -->
99 <ul class="corporate--v3--contact-form--v1--office-list">
100
101
102 <#assign language_id = themeDisplay.getLanguageId() />
103 <#assign offices = mlxSalesOfficeService.getOfficesMapByCategoryId(3705718, language_id, groupId) />
104
105 <#if offices?has_content>
106
107 <#list offices as key, value>
108
109 <#list value as keyChild, valueChild>
110
111 <#assign office = (mlxUrlUtilService.getJournalArticleByUrl(keyChild, locale, groupId, true))!"" />
112
113 <#if office?has_content>
114
115 <#assign officeValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) />
116
117 <#if key?index == 0>
118
119 <!--MAIN OFFICE-->
120 <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) />
121 <#assign contentFromGlobalClassPK = globalContent.classPK />
122 <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/>
123 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) />
124
125 <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]}${jaMapStrValues["postal_code"]?has_content?then(' - '+jaMapStrValues["postal_code"],"")}, ${jaMapStrValues["locality"]}</p></li>
126
127 <#else>
128
129 <#assign entry = mlxAssetHelperService.getAssetEntryByJournalArticle(office) />
130 <#assign ctgs = mlxAssetHelperService.getAssetCategoryListByJournalArticle(office) />
131
132 <#list ctgs as cat>
133
134 <!--OTHER OFFICES DESTACADAS DE LA HOME-->
135
136 <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) />
137 <#assign contentFromGlobalClassPK = globalContent.classPK />
138 <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/>
139 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) />
140
141
142 <#if cat.name == "Oficina Destacada Home">
143
144 <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} - ${jaMapStrValues["extended_street_address"]} ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>
145
146 </#if>
147
148 </#list>
149
150 </#if>
151
152 </#if>
153
154 </#list>
155
156 </#list>
157
158 <#else>
159
160 <!--INTERNATIONAL OFFICE SI NO LLEGA NINGUNA OFICINA DESTACADA-->
161
162 <#assign office = mlxAssetHelperService.fetchLatestApprovedArticle(globalGroupId, siteInternationalArticleId) />
163 <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) />
164
165 <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]} - ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>
166 </#if>
167
168 <!--VER MÁS OFICINAS-->
169 <#assign officeMasterId = 48003 />
170 <#assign siteId = themeDisplay.getLayout().getGroupId()>
171 <#assign officeLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(officeMasterId,scopeGroupId)!"") />
172
173 <#if officeLayout?has_content>
174 <#assign officePage = officeLayout.getFriendlyURL() />
175 <li class="corporate--v3--contact-form--v1--office-list--viewmore"><a href="${officePage}" class="corporate--v3--contact-form--v1--office-list--viewmore-link"><@corporate.mlxlanguage key="mlx.contactv3.offices.see-more" /></a>
176 </li>
177 </#if>
178
179 </ul>
180 </div>
181 <div class="corporate--v3--contact-form--v1--form-section">
182 <p class="corporate--v3--contact-form--v1--subtitle"><@corporate.mlxlanguage key="mlx.contactv3.form.subtitle" /></p>
183 <#--form:init-->
184 <form action="${mlxFormSaveActionURL}" method="POST" class="formlyWrapper-Base" id="${pn!''}_contact" data-js-form-submittype="${mlxSubmit!''}">
185 <input name="${pn!''}utmz" type="hidden"/>
186 <input type="hidden" id="${pn!''}g-recaptcha-response" name="${pn!''}g-recaptcha-response">
187 <input type="hidden" id="${pn!''}g-recaptcha-response-action" name="${pn!''}g-recaptcha-response-action" value="validate_captcha">
188 <div class="hide">
189 <label><@corporate.mlxlanguage key="mlx.contact.adt.common.honeypot" /></label>
190 <input type="text" maxlength="480" id="myusername" name="${pn!''}myusername">
191 </div>
192 <#--form:init-->
193 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
194 <label for="contact-name" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-name" /></label>
195 <input class="corporate--v3--contact-form--v1--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'])!''}">
196 </div>
197 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
198 <label for="contact-surname" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-surname" /></label>
199 <input class="corporate--v3--contact-form--v1--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'])!''}">
200 </div>
201 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
202 <label for="contact-company" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-company" /></label>
203 <input class="corporate--v3--contact-form--v1--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'])!''}">
204 </div>
205 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
206 <label for="contact-email" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-email" /></label>
207 <input class="corporate--v3--contact-form--v1--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="text" 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'])!''}">
208 </div>
209 <div class="corporate--v3--contact-form--v1--form--row">
210 <div class="corporate--v3--contact-form--v1--form--textbox-small" data-js="js__form-item">
211 <label for="contact-telephone" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" /></label>
212 <input class="corporate--v3--contact-form--v1--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'])!''}">
213 </div>
214 <div class="corporate--v3--contact-form--v1--form--textbox-small" data-js="js__form-item">
215 <label for="contact-postcode" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" /></label>
216 <input class="corporate--v3--contact-form--v1--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'])!''}" >
217 </div>
218 </div>
219 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
220 <label for="contact-countryHidden" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-country" /></label>
221 <#-- De momento el current countryCode lo pillo del campo personalizado de site contact-country-default, si hace falta cambiarlo es aqui -->
222 <#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" />
223 <#-- Geolocalizar el pais por IP -->
224 <#assign countryIp = (mlxGeoIpUtilService.getCountry(mlxServiceContext))!"" />
225 <#if !countryIp?has_content >
226 <#assign countryIp = countryCode /> <#-- si falla el pais por ip se pone el default -->
227 </#if>
228
229 <select class="corporate--v3--contact-form--v1--form--textbox--select" tabindex="7" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-country" />' id="contact-country" name="${pn!''}contact-country">
230 <#-- Obtener select de paises -->
231 <#assign articleCountry = mlxMastersHelperService.getJournalArticleByMasterAndGroup(countrySelectorMasterId?number, groupId) />
232 <#-- Se hace un replace para poner como seleccionado o el valor previo introducido o el codigo del pais actual -->
233 <#assign countryOptionsHtml = mlxJournalContentService.getContent(articleCountry, articleCountry.getDDMTemplateKey(),"${locale}",themeDisplay,'view')?replace('value="${(previousFormValues["contact-country"])!countryIp}"','value="${(previousFormValues["contact-country"])!countryIp}" selected') />
234 ${countryOptionsHtml}
235 </select>
236 </div>
237 <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item">
238 <label for="contact-message" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-message" /></label>
239 <#if ((countryCode == "US" || countryCode == "ES") && masterName?lower_case?contains("software"))>
240 <textarea class="corporate--v3--contact-form--v1--form--textbox--input corporate--v3--contact-form--v1--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>
241 <#else>
242 <textarea class="corporate--v3--contact-form--v1--form--textbox--input corporate--v3--contact-form--v1--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>
243 </#if>
244 </div>
245
246 <div class="corporate--v3--contact-form--v1--form--bottom">
247 <div class="corporate--v3--contact-form--v1--form--textbox corporate--v3--contact-form--v1--form--checkbox" data-js="js__form-item">
248 <input id="contact-agree" name="${pn!''}contact-agree" tabindex="9" type="checkbox" data-parsley-required="true" data-parsley-trigger="change focusout" required requinetworking="" >
249 <label for="contact-agree"></label>
250 <#assign customPrivacyLayout = mlxMastersHelperService.getLayoutByMasterAndGroup(privacyMasterId, groupId) />
251 <#assign customPrivacyUrl = customPrivacyLayout.getFriendlyURL(locale) />
252
253 <p class="corporate--v3--contact-form--v1--form--textbox-paragraph">
254 <#if validator.isNotNull(i18nLabels["privacity"]!)>
255 ${(i18nLabels["privacity"])}
256 <#else>
257 ${languageUtil.format(locale, "mlx.contact.adt.common.agree", customPrivacyUrl + "?l=true")}
258 </#if>
259 </p>
260 </div>
261 <#--
262 #set($mlxCacheUtilsService = $serviceLocator.findService("mecalux-portlet", "com.mecalux.service.MlxCacheUtilLocalService"))
263 #set($domainDataMap = $mlxCacheUtilsService.getDomainData($groupId))
264 #set($expandoAtributes = $domainDataMap.getExpandoAttributesMap())
265 #set($siteName = $expandoAtributes.get('Site-name'))
266
267 #set($newsAdvice = $languageUtil.get($locale, "mlx.contact.adt.common.lssi") + $languageUtil.get($locale, "mlx.contact.adt.common.optional"))
268
269 #if($siteName.toString().toLowerCase().contains(".com") && $newsAdvice.toString().toLowerCase().contains("interlake"))
270 #set($newsAdvice = $newsAdvice.replace("Interlake ", ""))
271 #end
272 -->
273 <#assign langCommonLssi><@corporate.mlxlanguage key='mlx.contact.adt.common.lssi' /></#assign>
274 <#assign langCommonOptional><@corporate.mlxlanguage key='mlx.contact.adt.common.optional' /></#assign>
275 <#if validator.isNotNull(i18nLabels["lssi"]!)>
276 <#assign newsAdvice = (i18nLabels["lssi"]) />
277 <#else>
278 <#assign newsAdvice = langCommonLssi + " " + langCommonOptional />
279 </#if>
280 <#assign siteName = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","site-name", scopeGroupId).getString())!"" />
281 <#if (siteName?lower_case?contains(".com") && newsAdvice?lower_case?contains("interlake")) >
282 <#assign newsAdvice = newsAdvice?replace("Interlake ", "") />
283 </#if>
284 <div class="corporate--v3--contact-form--v1--form--textbox corporate--v3--contact-form--v1--form--checkbox" data-js="js__form-item">
285 <input id="checkLssi" name="${pn!''}checkLssi" tabindex="10" type="checkbox">
286 <label for="checkLssi"></label>
287 <p class="corporate--v3--contact-form--v1--form--textbox-paragraph">${newsAdvice}</p>
288 </div>
289 </div>
290 <div class="corporate--v3--contact-form--v1--form--textbox">
291 <#if validator.isNotNull(i18nLabels["button"]!)>
292 <#assign buttonSumbitValue = i18nLabels["button"]>
293 <#else>
294 <#assign buttonSumbitValue><@corporate.mlxlanguage key='mlx.contact.adt.common.button.submit' /></#assign>
295 </#if>
296 <button id="submitButton" type="submit" class="corporate--v3--contact-form--v1--button" tabindex="11" data-js="js__form-submit">${buttonSumbitValue}</button>
297 </div>
298 <#-- </form> -->
299 <#-- Imagen de cargando -->
300 <#--<img alt="" class="sending hide" src="${cdn}/o/corporate-theme/images/common/loading2.gif">-->
301 ${corporate.img(cdn+"/o/corporate-theme/images/common/loading2.gif", false, 'alt=""', 'title=""', 'class="sending hide"')}
302 <#--form:end-->
303 <input type="hidden" title="track-consent" name="${pn}track-consent" id="track-consent" maxlength="10">
304 <input id="geotowns" type="hidden" value="" name="${pn!''}geotowns">
305 <input id="geotowns" type="hidden" value="" name="${pn!''}geotowns">
306 <input id="geostates" type="hidden" value="" name="${pn!''}geostates">
307 </form>
308 <#--form:end-->
309 </div>
310 </div>
311</div>
312
313<!-- DATOS ESTRUCTURADOS SEO JSON+LD -->
314
315<#assign domain = themeDisplay.getPortalDomain() />
316<#assign currentUrl = "https://"+ domain />
317
318<#-- logo -->
319<#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg" />
320<#if (domain?contains("es")) || (domain?contains("mecalux.es")) >
321 <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg" />
322</#if>
323<#if (domain?contains("us")) || (domain?contains("interlake")) >
324 <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg" />
325</#if>
326
327<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
328<#assign telDash = telValue?replace("+", "")?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
329<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/>
330<script type="application/ld+json">
331 {
332 "@context": "https://schema.org",
333 "@type": "Organization",
334 "url": "${currentUrl}",
335 "logo": "${currentUrl}${logo}",
336 "contactPoint": [{
337 "@type": "ContactPoint",
338 "telephone": "+${telDash}",
339 "contactType": "customer service",
340 "areaServed": "${countryCode}",
341 "availableLanguage": [
342 "${locale.getDisplayLanguage()}"
343 <#if siteName?lower_case?contains("belgique")>
344 ,"Dutch"
345 </#if>
346 <#if siteName?lower_case?contains("mecalux.be")>
347 ,"French"
348 </#if>
349 <#if locale.getDisplayLanguage() != "English">
350 ,"English"
351 </#if>
352 ]
353 },{
354 "@type": "ContactPoint",
355 "telephone": "+${telDash}",
356 "contactType": "sales",
357 "areaServed": "${countryCode}",
358 "availableLanguage": [
359 "${locale.getDisplayLanguage()}"
360 <#if siteName?lower_case?contains("belgique")>
361 ,"Dutch"
362 </#if>
363 <#if siteName?lower_case?contains("mecalux.be")>
364 ,"French"
365 </#if>
366 <#if locale.getDisplayLanguage() != "English">
367 ,"English"
368 </#if>
369 ]
370 }]
371 }
372</script>
373
374<script>
375 window.addEventListener('load', function() {
376 var heroContactLinks = document.querySelectorAll(".corporate--v3--hero-video--v1--contact");
377 var inContentCTALinks = document.querySelectorAll(".corporate--v3--highlighted--v1--third-column a");
378 var stickyCTALinks = document.querySelectorAll(".corporate--sticky-header--cta");
379
380 function setGTMEventAttributes(category, ctaOrigin) {
381 var contactForm = document.querySelector("#corporate--v3--contact-form--v1");
382 if (contactForm) {
383 contactForm.setAttribute("data-gtm-event-category", category);
384 contactForm.setAttribute("data-gtm-event-ctaorigin", ctaOrigin);
385 }
386 }
387
388 heroContactLinks.forEach(function(link) {
389 link.addEventListener("click", function(ev) {
390 setGTMEventAttributes("CTA_Hero", "CTA_Hero");
391 });
392 });
393
394 inContentCTALinks.forEach(function(link) {
395 link.addEventListener("click", function(ev) {
396 setGTMEventAttributes("CTA_InContent", "CTA_InContent");
397 });
398 });
399
400 stickyCTALinks.forEach(function(link) {
401 link.addEventListener("click", function(ev) {
402 setGTMEventAttributes("CTA_Sticky", "CTA_Sticky");
403 });
404 });
405 });
406</script>