Soluciones inteligentes de almacenaje
Aporte eficiencia a su almacén con una gestión inteligente del espacio
Mecalux: experiencia e innovación para su almacén
Mecalux es una de las compañías líderes en tecnología intralogística a nivel mundial. Es puntera en automatización de almacenes y desarrollo de software. Sus estanterías metálicas son además sinónimo de calidad en la industria.
Nos avalan 55 años de experiencia, una decidida apuesta por la innovación y —lo más importante— la satisfacción de nuestros clientes. Sean cuales sean las características de su negocio, tenemos una solución de almacenaje para usted.
Se ha producido un error al procesar la plantilla.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign articleUrl = mlxUrlUtilServic... [in template "20101#20128#3282409" at line 16, column 25] ----
1<#if mlxUrlUtilService?has_content>
2 <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" />
3<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/>
4
5 <#if entries?has_content>
6 <div class="corporate--v3--slider--v1">
7 <div class="corporate--v3--slider--v1--container" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v1--slider", "navPosition": "bottom", "mouseDrag": true,"loop":false, "controls": false}' data-gtm-block-name="Case_Study">
8 <h2 class="corporate--v3--slider--v1--title"><@corporate.mlxlanguage key="mlx.breadcrumb.practical-cases" /></h2>
9 <div class="corporate--v3--slider--v1--slider" data-gtm-block-name="Case_Study">
10
11 <#assign itemIndex = 0 />
12 <#list entries as curEntry>
13
14 <#assign article = mlxAssetHelperService.getJournalArticleByEntry(curEntry) />
15 <#assign articleValues = mlxJournalHelperService.getStructureFieldValues(article, "${locale}") />
16 <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string />
17 <#assign articleName = (articleValues["name"]?string)!"" />
18 <#assign articleDescription = (articleValues["html_description"]?string)!"" />
19
20 <#assign clientStrKey = "CLIENT-STR" />
21 <#assign articleClient = (mlxAssetHelperService.getFirstRelatedArticle(groupId, article.articleId, clientStrKey))!"" />
22
23 <#assign itemIndex = itemIndex + 1 />
24 <#assign itemMasterName = article["title"]!"" />
25
26 <div class="corporate--v3--slider--v1--item">
27 <div class="corporate--v3--slider--v1--info">
28 <#if articleClient != "">
29 <#assign clientName = mlxJournalHelperService.getStructureFieldValue(articleClient, "name", "${locale}")?string />
30 <h3 class="corporate--v3--slider--v1--item-title">${clientName}</h3>
31 <#else>
32 <#assign clientName = articleName>
33 </#if>
34 <#if articleName?has_content>
35 <p class="corporate--v3--slider--v1--item-subtitle">${articleName}</p>
36 </#if>
37 <#if articleDescription?has_content>
38 <p class="corporate--v3--slider--v1--item-description">${articleDescription?truncate(350, '...')}
39 <a href="${articleUrl}" title="${clientName}" class="corporate--v3--slider--v1--item-link" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="${itemIndex}_/Case-study/Detail/${clientName}/${itemMasterName}"><@corporate.mlxlanguage key="mlx.search.article.readmore" /></a>
40 </p>
41 </#if>
42 </div>
43
44 <#assign articleImageContent = articleValues["list_imageFieldSet"]!"{}" />
45 <#assign articleImageContent = articleImageContent.list_image!"" />
46 <#assign imgWidth = '640'>
47 <#if articleImageContent?has_content>
48 <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) />
49 <#if articleImage?has_content>
50
51 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) />
52 <#assign articleImageUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/>
53 <#assign articleImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) />
54 <#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")>
55
56 <div class="corporate--v3--slider--v1--thumbnail">
57
58 <#assign articleVideoContent = (mlxJournalHelperService.getStructureFieldValue(article, "video_gallery_fileFieldSet", "${locale}"))![] />
59
60 <#if articleVideoContent?first.video_gallery_file?has_content>
61 <#assign articleVideoJSON = jsonFactoryUtil.createJSONObject(articleVideoContent?first.video_gallery_file) />
62 <#assign articleVideoUUID = articleVideoJSON.getString("uuid")!"" />
63 <#if articleVideoUUID != "">
64 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleVideoUUID, globalGroupId) />
65 <#assign articleVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) />
66 <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/>
67
68 <#if youtubeEmbeddedCode?has_content>
69 <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${articleName}"' />
70 <#else>
71 <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="html5video" data-src="${articleVideoUrl}" data-thumb="${articleImageUrl}" data-caption="${articleName}"' />
72 </#if>
73
74 <a href="#" class="corporate--v3--slider--v1--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="${articleImageUrl}">
75 <figure class="corporate--v3--slider--v1--figure">
76 <div class="corporate--v3--slider--v1--container-icon">
77 <#assign images_folder = cdn + "/o/corporate-theme/images" />
78 ${corporate.img(images_folder + '/common/th-play2.png', false,'data-role="play-btn" class="corporate--v3--slider--v1--video-icon" alt="play"')}
79 </div>
80 ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,
81 'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +
82 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image corporate--v3--slider--v1--item-image-youtube"')} </figure>
83 </a>
84 <#else>
85 <figure class="corporate--v3--slider--v1--figure">
86 ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,
87 'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +
88 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')} </figure>
89 </#if>
90 <#else>
91
92 <figure class="corporate--v3--slider--v1--figure">
93 ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,
94 'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +
95 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')} </figure>
96
97 </#if>
98
99 </div>
100
101 </#if>
102 </#if>
103
104 </div>
105
106 </#list>
107 </div>
108 <#assign pcasesMasterId=56006 /> <#-- referencias-->
109 <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") />
110 <#if pcasesLayout == "" >
111 <#assign pcasesMasterId=64015 /> <#-- clientes-->
112 <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") />
113 </#if>
114 <#assign pcasesUrl = pcasesLayout.getFriendlyURL() />
115 <a href="${pcasesUrl}" title='<@corporate.mlxlanguage key="mlx.practical-case.show-more" />' class="corporate--v3--slider--v1--viewmore" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="/Case-study"><@corporate.mlxlanguage key="mlx.practical-case.show-more" /></a>
116
117 </div>
118 </div>
119 </#if>
120</#if>
121<style> /*Fix Pagination*/
122 .lfr-pagination{
123 display: flex;
124 justify-content: space-between;
125 align-items: center;
126 }
127
128 .lfr-pagination .lfr-pagination-buttons {
129 margin-top:0!important;
130 padding: 0;
131 }
132 @media (max-width: 960px){
133 .lfr-pagination{
134 flex-direction: column-reverse;
135 }
136 }
137</style>
PRODUCTO DESTACADO
ROBOTS MÓVILES AUTÓNOMOS (AMR)
La solución robótica que flexibiliza el transporte interno de mercancías
Automatice el flujo interno de cargas con la innovadora gama de AMR de Mecalux. Dinamice múltiples operaciones de intralogística y potencie la productividad del almacén con vehículos inteligentes diseñados para trabajar con absoluta autonomía.
MECALUX EN CIFRAS
-
55 años
de experiencia
-
+70 países
con red comercial
-
11 centros
productivos
-
7 centros I+D
de desarrollo tecnológico
Se ha producido un error al procesar la plantilla.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign articleUrl = mlxUrlUtilServic... [in template "20101#20128#3282448" at line 66, column 21] ----
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>
Se ha producido un error al procesar la plantilla.
Java method "com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl.getOfficesMapByCategoryId(long, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl object "com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl@3cd04e26"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign offices = mlxSalesOfficeServi... [in template "20101#20128#3282514" at line 103, column 21] ----
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>