Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Hero-v3-Content
Template Key:
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Highlighted-v3-Content
Template Key:
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Our-Products-v3-Content
Template Key:
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Gartner-magic-quadrant-banner
Template Key: GARTNER-BANNER-STR-DEFAULT-TEMPLATE

Case studies

Decathlon

Decathlon inaugura tre nuovi magazzini in Italia attrezzati da Mecalux

Decathlon ha costruito tre nuovi centri logistici nell’Italia settentrionale. Da lì si riforniscono i negozi del paese e i clienti che hanno acquistato online. Mecalux ha attrezzato questi progetti con soluzioni di stoccaggio che velocizzano la preparazione degli ordini. Continua a leggere

Decathlon

LAR

LAR: dinamismo e capacità con tre sistemi di stoccaggio

L'azienda di resine termoplastiche LAR ha rinnovato il suo impianto di produzione a Campogalliano (Italia) con tre sistemi di stoccaggio: scaffalature drive-in, a gravità e Movirack. La combinazione di queste soluzioni ha ottimizzato la superficie e ha ridotto il tempo richiesto per movimentare la merce. Continua a leggere

LAR

Paolo Astori

Paolo Astori ha installato un nuovo magazzino automatico miniload in Italia

Il produttore italiano di elementi di fissaggio per l'aereonautica Paolo Astori ha installato un magazzino automatico miniload con capacità per 5.400 contenitori. La soluzione di Mecalux permette alla compagnia di raddoppiare il numero di ordini che si preparano nel suo centro logistico in Italia. Continua a leggere

Paolo Astori

Havi Logistics

Raddoppiare la capacità di stoccaggio e ridurre i costi con scaffalature su basi mobili

Sin dalla sua creazione nel 1981 in Germania come piccola azienda familiare, Havi Logistics ha continuato ad ampliare il suo mercato fino a diventare uno dei fornitori leader nei servizi di logistica integrata, con 48 centri di distribuzione in Europa e oltre 5.000 dipendenti. I clienti di Havi Logistics vanno dalle catene di ristorazione come ... Continua a leggere

Vedi altri case studies
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Highlighted-Product-v3-Content
Template Key:
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Figures-v3-Content
Template Key:
Si è verificato un errore nell'elaborarazione del modello.
Java method "com.mecalux.util.service.impl.MlxDLFileEntryHelperServiceImpl.getDLFileEntryMlxFieldValuePersisted(String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxDLFileEntryHelperServiceImpl object "com.mecalux.util.service.impl.MlxDLFileEntryHelperServiceImpl@518607a9"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleImageContent = (mlxDLF...  [in template "20101#20128#3282448" at line 54, column 29]
----
1<#--MKTG-1196: US Date format --> 
2<#if mlxConstants?has_content> 
3    <#assign domain = themeDisplay.getPortalDomain() /> 
4    <#assign dateFormat = "dd MMM yyyy"/> 
5    <#if (domain?contains("us")) || (domain?contains("interlake")) > 
6        <#assign dateFormat = "MMMMMMMMM d, yyyy" /> 
7    </#if> 
8    <#if entries?has_content> 
9        <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
10        <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
11     
12        <div class="corporate--v3--slider--v2" data-gtm-block-name="News"> 
13            <div class="corporate--v3--slider--v2--container"> 
14                <#assign insightsMasterId = 58007 /> 
15                <#assign insights = (mlxMastersHelperService.getLayoutByMasterAndGroup(insightsMasterId, groupId))!{} /> 
16                <#assign insightsName = (insights.getName())!"" /> 
17                <#assign insightsUrl = (insights.getFriendlyURL())!"" /> 
18                <h2 class="corporate--v3--slider--v2--title">${insightsName}</h2> 
19                <a href="${insightsUrl}" title='<@corporate.mlxlanguage key="mlx.newsv3.go-to-news" />' class="corporate--v3--slider--v2--viewmore"><@corporate.mlxlanguage key="mlx.newsv3.go-to-news" /></a> 
20            </div> 
21            <div class="corporate--v3--slider--v2--slider" data-gtm-block-name="News" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v2--slider", "navPosition": "bottom", "mouseDrag": true, "loop": false, "gutter": 10, "edgePadding": 40, "controls": false, "fixedWidth": 250}'> 
22                <#list entries as entry> 	 
23                     
24                    <#--StrKeys--> 
25                    <#assign practicalCaseStrKey = "PRACTICAL-CASE-STR" /> 
26                    <#assign articleStrKey = "ARTICLE-STR" /> 
27                    <#assign manualStrKey = "MANUAL-DE-ALMACENAJE-STR" /> 
28                    <#assign videoStrKey = "VIDEO-STR" /> 
29                    <#assign blogStrKey = "BLOG-POST-STR" /> 
30                    <#assign interviewStrKey = "INTERVIEW-STR" /> 
31 
32                     
33                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
34                    <#assign articleValues = mlxJournalHelperService.getStructureFieldValues(article, "${locale}")  /> 
35                    <#assign articleName = (articleValues["name"]?string)!"" /> 
36                    <#assign articleImageContent = (articleValues["image_list"])!{}  /> 
37     
38                    <#assign currStr = article.getDDMStructure().getStructureKey() /> 
39                    <#if currStr == practicalCaseStrKey> 
40                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.pcases' /></#assign> 
41                        <#assign articleImageContent = (articleValues.list_imageFieldSet["list_image"])!{}  /> 
42                    <#elseif currStr == articleStrKey> 
43                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
44                    <#assign articleName = (articleValues["article_name"]?string)!"" /> 
45                    <#elseif currStr == manualStrKey> 
46                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> 
47                    <#elseif currStr == videoStrKey> 
48                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
49                        <#assign videoFieldContent = (articleValues["video"])!{}  /> 
50 
51                        <#if videoFieldContent?has_content> 
52													  <#assign videoFieldUuid = jsonFactoryUtil.createJSONObject(videoFieldContent).getString("uuid") /> 
53                            <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoFieldUuid, globalGroupId) /> 
54                            <#assign articleImageContent = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
55                        </#if> 
56 
57                    <#elseif currStr == blogStrKey> 
58                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
59                        <#assign articleImageContent = (articleValues["list_image"])!{}  /> 
60                    <#elseif currStr == interviewStrKey> 
61                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.interviews.title' /></#assign> 
62                        <#assign articleImageContent = (articleValues.hero["hero_image"]?eval)!{} /> 
63                        <#assign articleName = (articleValues.hero["hero_title"]?string)!"" /> 
64                    </#if> 
65                     
66                    <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
67                     
68                    <#if articleImageContent?has_content> 
69                        <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) /> 
70                    </#if> 
71     
72                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
73     
74                    <#assign articleDate = dateUtil.getDate(article.getDisplayDate(), dateFormat, locale)  /> 
75 
76                    <#if articleImage?has_content> 
77                        <div class="corporate--v3--slider--v2--item"> 
78                            <a href="${articleUrl}" title="${articleName}" class="corporate--v3--slider--v2--item-link-box"> 
79                                <#assign articleImageUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImage.uuid, locale)!"" /> 
80                                                             
81                                <#if articleImage.uuid?has_content > 
82                                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
83                                    <#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
84                                    <#if docUrl == ''> 
85                                        <#assign imgUrl = cdn + articleImageUrl /> 
86                                    <#else> 
87                                        <#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
88                                    </#if> 
89 
90                                    <#assign imgWidth = '320'> 
91                                    <#assign imgTitle = articleName> 
92                                    <#assign imgAlt = articleName> 
93                                    <#assign imgClass = 'corporate--v3--slider--v2--item-image'> 
94                                    <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
95                                    ${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
96                                                                    'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"')} 
97                                    <span class="corporate--v3--slider--v2--item-upper-heading">${ribbonText}</span> 
98                                    <span class="corporate--v3--slider--v2--item-date">${articleDate}</span> 
99                                    <p class="corporate--v3--slider--v2--item-description">${articleName}</p> 
100                                    <span class="corporate--v3--slider--v2--item-link"><@corporate.mlxlanguage key="mlx.newsv3.read" /></span> 
101                                </#if> 
102                            </a> 
103                        </div>  
104                    </#if> 
105     
106                </#list> 
107            </div> 
108        </div> 
109     
110    </#if> 
111</#if> 
Missconfigured or missplaced portlet, no content found
Dynamic Content: false
Master Name: Highlighted-Map-V3-content
Template Key:

Alcuni dei nostri clienti

Brivio & Viganò logo
Ferrero
Bticino
La Moderna Cartotecnica
Kuehne Nagel
Logo Cromology Italia
Burro De Paoli
Comag logo
Si è verificato un errore nell'elaborarazione del modello.
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>