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 url = new URL(window.location.origin + '/o/corporate-publics-rest-services/v1.0/telephone');
40 const response = await fetch(
41 url,
42 {
43 method: 'GET',
44 headers: {
45 'Accept': 'application/json',
46 'x-csrf-token': Liferay.authToken // 👈 Token necesario para evitar 403 Forbidden
47 },
48 credentials: 'include' // 👈 Envia las cookies de sesión del usuario
49 }
50 );
51
52 if (!response.ok) {
53 console.error('Error al llamar a la API:', response.status, response.statusText);
54 return;
55 }
56
57 const obj = await response.json();
58
59 if (obj && obj.telephone) {
60 const tel = obj.telephone;
61 workingTimeElement.setAttribute('href', 'tel:' + tel.replace(/[^\d+]+/g, ''));
62 workingTimeElement.querySelector('span').textContent = tel;
63 }
64
65 // Fade-in effect
66 workingTimeElement.style.transition = 'all 0.4s ease-out';
67 workingTimeElement.style.opacity = '1';
68 workingTimeElement.style.pointerEvents = 'auto';
69 } catch (error) {
70 console.error('Error al obtener el teléfono:', error);
71 }
72});
73</script>
隐私权政策
自然人的个人资料
保护您的个人资料是 MECALUX 集团所关注的议题之一(以下简称 MECALUX),旨在随时维护和保障您的个人隐私,并严格遵守15/1999年12月13日颁布的《个人资料保护法》及其他一致性的法律。因此,MECALUX 通知您,通过网站所接收的所有个人资料,以及通过电子邮件、信件、传真、电话或其他方式提供所接收的所有个人资料,将按照公司的安全性和隐私政策规范进行严格保密,同样根据《个人资料保护法》,将纳入公司负责的文件中。该资料收集的目的是为了管理您与 MECALUX 之间的关系,如通知您关于优惠、促销、公司销售的产品和服务、调查、统计、市场趋势分析及记录您使用网站的个人偏好,旨在客制化和提升我们的服务。
如在您接受本隐私权政策一个月后,我们没有受到来自您的否定答复,我们将视为您已同意进行您的个人资料的处理。另外,对于上述《个人资料保护法》第 11 条的规定,并基于 MECALUX 所销售的产品和服务性质,您明确授权本公司将您的个人资料与所有 企业集团相通,目的在于执行 MECALUX 公司的产品和服务之间的信息和业务及财务管理。
MECALUX 通知您,根据《个人资料保护法》规定,您可随时行使访问、修改、取消和个人资料的反对和撤回之权利,同样具有将您的个人资料与所有企业集团通信的撤销、无追溯效力、赋予同意权利,如欲行使这些权利,请邮寄至 MECALUX, S.A., calle Silici 1, 08940 Cornellà - Barcelona – España 或为了您的方便,可发送电子邮件至 dirección data.protection@mecalux.com,并请注明“资料保护”。
此外,本公司理解您所提供给予 MECALUX 的所有个人资料,均属真实性、完整性和准确性,因此,如果有任何修改,请与公司联系。
MECALUX 不使用 cookies 作为获取有关网站用户的信息。然而,保留使用 cookies 的政策修改权利。