The following has evaluated to null or missing:
==> mlxPhoneUtilService [in template "20101#20128#SEARCH-BAR-V3-STR-DEFAULT-TEMPLATE" at line 4, column 21]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign telValue = mlxPhoneUtilServic... [in template "20101#20128#SEARCH-BAR-V3-STR-DEFAULT-TEMPLATE" at line 4, column 1]
----
1<#assign cdn = (mlxUrlUtilService.getCdn(scopeGroupId))!"" />
2<#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" />
3
4<#assign telValue = mlxPhoneUtilService.getTelephone(mlxServiceContext)!"" />
5<#assign telDash = telValue?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
6<#assign telAlt = languageUtil.get(locale, "mlx.theme.menu.telephone") />
7<#assign openingHours = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","opening-hours", scopeGroupId).getString())!"" />
8
9
10<#assign styleCss = "opacity: 0; pointer-events: none;" />
11
12
13<div class="corporate--header-contact">
14 <a href="tel:${telDash}" rel="nofollow" class="corporate--header-contact--button phone" id="working-time-phone" style="${styleCss}">
15 ${corporate.img(cdn + '/o/corporate-theme/theme-images/00_menu_ico_phone_orange.svg', false, 'class="corporate--header-contact--button-image"')}
16 <span>${telValue}</span>
17 </a>
18
19 <#assign contactMasterId=46017 />
20 <#assign contactLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(contactMasterId,scopeGroupId)!"") />
21 <#assign contactLabel = languageUtil.get(locale, "mlx.theme.menu.contact") />
22 <#assign contactLogo = themeDisplay.getPathThemeImages() + "/icons/00_menu_ico_mail_white.svg" />
23 <#if contactLayout?has_content>
24 <#assign contactUrl = contactLayout.getFriendlyURL() />
25 <a href="${contactUrl}?cta_origin=CTA_header" class="corporate--header-contact--button mail" title="${contactLabel}" data-gtm-event="click" data-gtm-event-label="/Contact" data-gtm-event-click-category="[currentPage]_Header_Contact">
26 ${corporate.img(cdn + '/o/corporate-theme/theme-images/00_menu_ico_mail_white.svg', false, 'alt="${contactLabel}"', 'title="${contactLabel}"', 'class="corporate--header-contact--button-image"')}
27 <span>${contactLabel}</span>
28 </a>
29 </#if>
30</div>
31
32<script>
33document.addEventListener("DOMContentLoaded", async () => {
34 try {
35 const workingTimeElement = document.getElementById('working-time-phone');
36 if (!workingTimeElement) return;
37
38 // 🔹 Llamada segura a una API interna autenticada
39 const response = await fetch(
40 '/o/corporate-rest-publics-services/v1.0/telephone',
41 {
42 method: 'GET',
43 headers: {
44 'Accept': 'application/json',
45 'x-csrf-token': Liferay.authToken // 👈 Token necesario para evitar 403 Forbidden
46 },
47 credentials: 'include' // 👈 Envia las cookies de sesión del usuario
48 }
49 );
50
51 if (!response.ok) {
52 console.error('Error al llamar a la API:', response.status, response.statusText);
53 return;
54 }
55
56 const obj = await response.json();
57
58 if (obj && obj.telephone) {
59 const tel = obj.telephone;
60 workingTimeElement.setAttribute('href', 'tel:' + tel.replace(/[^\d+]+/g, ''));
61 workingTimeElement.querySelector('span').textContent = tel;
62 }
63
64 // Fade-in effect
65 workingTimeElement.style.transition = 'all 0.4s ease-out';
66 workingTimeElement.style.opacity = '1';
67 workingTimeElement.style.pointerEvents = 'auto';
68 } catch (error) {
69 console.error('Error al obtener el teléfono:', error);
70 }
71});
72</script>
Presentación
Mecalux es una de las compañías punteras en el mercado de sistemas de almacenamiento. Su actividad consiste en el diseño, fabricación, comercialización y prestación de servicios relacionados con las estanterías metálicas, almacenes automatizados y otras soluciones de almacenamiento. Compañía líder en España, se sitúa en el tercer puesto mundial en el ranking de su sector, con ventas en más de 70 países.
La destacada posición de la empresa se basa en el uso de las tecnologías más avanzadas de la industria y en una extensa red de distribución implantada en Alemania, Bélgica, Eslovaquia, España, Francia, Holanda, Italia, Reino Unido, República Checa, Polonia, Portugal, Argentina, Uruguay, Perú, Chile, Panamá, Brasil, México, Canadá, Turquía y Estados Unidos.
El Grupo dispone de doce centros productivos: en España (Barcelona, Gijón y Palencia), Polonia (Gliwice), Estados Unidos (Chicago, Sumter y Pontiac), México (Tijuana y Matamoros), Brasil (São Paulo) y Argentina (Buenos Aires), que se encuentran ubicados estratégicamente para ofrecer un servicio rápido y ágil a sus mercados actuales y potenciales.
La apertura de nuevas delegaciones, la ampliación de las redes comerciales y de distribución, la dedicación de recursos a I+D+i, la división de almacenaje automatizado y el portal de logística Logismarket son las fuentes de crecimiento y desarrollo del Grupo Mecalux. Todo ello revierte, como siempre y desde hace más de 55 años, en un producto de calidad y en un servicio esmerado para sus clientes.