Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#212453427" at line 1, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#212453427" at line 1, column 1]
----
1<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
2<#assign isPhone = zurichService.getPhone()>
3
4<#assign count = entries?size>
5
6<#assign firstPart = "">
7
8<#if entries?has_content>
9
10 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/>
11 <#assign content = ""/>
12 <#assign title_content = ""/>
13
14 <#list entries as curEntry>
15 <#assign renderer = curEntry.getAssetRenderer()>
16 <#assign className = renderer.getClassName()>
17 <#if className == "com.liferay.journal.model.JournalArticle">
18 <#assign journalArticle = renderer.getArticle() />
19 <#assign model = objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse) />
20 <#assign xml = journalArticle.getContentByLocale(locale.toString()) />
21 <#assign doc = saxReaderUtil.read(xml) />
22
23 <#assign backgroundColor = "white"/>
24 <#assign backgroundColor = doc.selectSingleNode('/root/dynamic-element[@name="background_color"]/dynamic-content').getText()/>
25
26 <!---------------->
27 <#-- Register content -->
28
29 <#assign journalArticleId = journalArticle.getArticleId()/>
30
31 <#if journalArticleLocalService.fetchArticle(groupId, journalArticleId) ??>
32 <#assign register = journalArticleLocalService.getArticle(groupId, journalArticleId)/>
33 <#if register?? && register != "">
34 <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(), model, themeDisplay) />
35 </#if>
36 </#if>
37 <#assign languageId = themeDisplay.getLanguageId() />
38 <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(), model, themeDisplay) />
39 <#assign content = content + '<div class="cell" >' + registerContent + '</div>' />
40 <#-- End register content -->
41
42 </#if>
43 </#list>
44 <div class="mod mod-Slick_slider real hero-banner hero-carousel" id="content-desktop-hero">
45 <div class="main-slider-wrapper skin-1">
46
47
48 <div class="main-slick-slider">
49 ${content}
50 </div>
51
52
53
54 </div>
55 </div>
56 <div id="content-mobile-hero">
57 <div class="slickHero">
58 ${content}
59 </div>
60
61 </div>
62
63</#if>
64
65<!-- PL-1009 HeroBanner controls -->
66<#if isPhone == "mobile">
67 <li class="play-hero-banner-li">
68 <div class="controls-hero-banner">
69 <div class="play-hero-banner">
70 <a class="icon-monospaced list-unstyled portlet-icon-back text-default">
71 <@liferay_ui["icon"]
72 icon="pause"
73 markupView="lexicon"
74 />
75 </a>
76 </div>
77 <div class="pause-hero-banner">
78 <a class="icon-monospaced list-unstyled portlet-icon-back text-default">
79 <@liferay_ui["icon"]
80 icon="play"
81 markupView="lexicon"
82 />
83 </a>
84 </div>
85 </div>
86 </li>
87</#if>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877428" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877428" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6
7<#assign fondo = "">
8<#if background.getData() == "mist">
9 <#assign fondo = "bruma">
10<#elseif background.getData() == "mist2">
11 <#assign fondo = "bruma2">
12<#elseif background.getData() == "lightblue">
13 <#assign fondo = "lightblue">
14<#elseif background.getData() == "midblue">
15 <#assign fondo = "midblue">
16<#elseif background.getData() == "darkblue">
17 <#assign fondo = "darkblue">
18<#elseif background.getData() == "sandstone">
19 <#assign fondo = "sandstone">
20<#elseif background.getData() == "lightblue40">
21 <#assign fondo = "light-blue-40">
22</#if>
23
24<#assign popupSF=false/>
25<#assign chatZai=false/>
26
27<#assign colortexto = "textBlue">
28<#if textcolor?has_content>
29 <#if textcolor.getData() == "white">
30 <#assign colortexto = "textWhite">
31 <#elseif textcolor.getData() == "blue">
32 <#assign colortexto = "textBlue">
33 </#if>
34</#if>
35<#if custom_top_margin?? && custom_top_margin.getData() != "">
36 <#assign custom_top_margin = custom_top_margin.getData() />
37 <#if !custom_top_margin?ends_with("px")>
38 <#assign custom_top_margin = custom_top_margin + "px" />
39 </#if>
40<#else>
41 <#assign custom_top_margin = "" />
42</#if>
43
44<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
45 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
46 <#if !custom_bottom_margin?ends_with("px")>
47 <#assign custom_bottom_margin = custom_bottom_margin + "px" />
48 </#if>
49<#else>
50 <#assign custom_bottom_margin = "" />
51</#if>
52
53<#if title_align?? && title_align.getData() != "">
54 <#assign titleAlign = title_align.getData() />
55 <#assign titleAlign = title_align.getData() />
56<#else>
57 <#assign titleAlign = "" />
58</#if>
59
60<#if subtitle_align?? && subtitle_align.getData() != "">
61 <#assign subtitleAlign = subtitle_align.getData() />
62<#else>
63 <#assign subtitleAlign = "" />
64</#if>
65
66<#if desc_align?? && desc_align.getData() != "">
67 <#assign descAlign = desc_align.getData() />
68<#else>
69 <#assign descAlign = "" />
70</#if>
71
72<#if is_text_aligned?? && is_text_aligned.getData() != "">
73 <#assign isTextAligned = getterUtil.getBoolean(is_text_aligned.getData()) />
74<#else>
75 <#assign isTextAligned = true />
76</#if>
77
78<#assign justifyContent = "center" />
79<#assign maxWidth = "" />
80<#assign flexBasis = "" />
81<#assign margin = ""/>
82<#if desc_align?? && desc_align.getData() != "" && subtitle_align?? && subtitle_align.getData() != "" && desc_align?? && desc_align.getData() != "">
83 <#if title_align.getData() == "left" || subtitle_align.getData() == "left" || desc_align.getData() == "left" >
84 <#assign justifyContent = "left" />
85 <#if isTextAligned>
86 <#assign margin = "unset"/>
87 <#assign maxWidth = "none" />
88 <#else>
89 <#assign maxWidth = "none" />
90 <#assign flexBasis = "auto" />
91 </#if>
92 </#if>
93</#if>
94
95<div id="${html_id.getData()}" class="mod mod-Services ${fondo}" style="padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
96 <div class="container">
97 <div class="row" style="justify-content: ${justifyContent};">
98 <div class="col-md-6 intCol" style="max-width: ${maxWidth}; flex-basis: ${flexBasis}; margin:${margin}">
99 <div class="product-title intTitle">
100 <#if title.getData()?? && title.getData() != "">
101 <#assign htmlTag = "h1"/>
102 <#if title.title_level?has_content && title.title_level.getData() != "">
103 <#assign htmlTag = title.title_level.getData()/>
104 </#if>
105 <div class="title" style="text-align: ${titleAlign};">
106 <${htmlTag} class="h1-copycat ${colortexto}">
107 ${htmlUtil.unescape(title.getData())}
108 </${htmlTag}>
109 </div>
110 </#if>
111 </div>
112 <div class="product-subtitle ${colortexto}" style="text-align: ${subtitleAlign};">
113 <#if subtitle.getData()?? && subtitle.getData() != "">
114 ${htmlUtil.unescape(subtitle.getData())}
115 </#if>
116 </div>
117 <div class="product-text ${colortexto}" style="text-align: ${descAlign};">
118 <#if description.getData()?? && description.getData() != "">
119 ${description.getData()}
120 </#if>
121 </div>
122 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
123 <div class="row cta">
124 <#if links_align.getData()?? && links_align.getData() != "">
125 <div class="align-${links_align.getData()}">
126 <#else>
127 <div class="align-middle">
128 </#if>
129 <#list link_text.getSiblings() as cur_link_text>
130 <#if cur_link_text.modalSF??>
131 <#assign popupSF=getterUtil.getBoolean(cur_link_text.modalSF.getData())/>
132 </#if>
133 <#if cur_link_text.zai??>
134 <#assign chatZai=getterUtil.getBoolean(cur_link_text.zai.getData())/>
135 </#if>
136 <#if cur_link_text.link_attr_key.getSiblings()?has_content>
137 <#list cur_link_text.link_attr_key.getSiblings() as cur_extra_attribute_key>
138 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
139 <#if cur_extra_attribute_key?is_first>
140 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
141 <#else>
142 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
143 </#if>
144 </#if>
145 </#list>
146 </#if>
147 <#assign linkClass="link- btn btn-lg ${aparienciaCTA(cur_link_text.link_skin.getData(),'btn-primary')} adjustment-size"/>
148 <#assign nofollow=cur_link_text.hasNofollow?? && getterUtil.getBoolean(cur_link_text.hasNofollow.getData())/>
149 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link_text.link_title.getData(), cur_link_text.link_page_link.getFriendlyUrl(),cur_link_text.link_file_link.getData(), cur_link_text.link_free_link.getData(),getterUtil.getBoolean(cur_link_text.link_new_tab.getData()), linkClass, cur_link_text.link_id_prefix.getData(), cur_link_text.link_id.getData(),extraAttr, nofollow)/>
150
151 <#if cur_link_text.modalRCP?? && cur_link_text.modalRCP.getData() != "">
152 <div class="button-link col-md-5 sfModalButton" onclick="openModalRCP${cur_link_text.modalRCP.getData()}()">
153 ${seoLink}
154 ${htmlUtil.unescape(cur_link_text.getData())}
155 </a>
156 </div>
157 <#elseif chatZai==true>
158 <div class="preventSPA" onclick="openZai()">
159 ${seoLink}
160 ${htmlUtil.unescape(cur_link_text.getData())}
161 </a>
162 </div>
163 <#elseif popupSF==true>
164 <#if cur_link_text.productSelectModal?? && cur_link_text.productSelectModal.getData() != "">
165 <#assign linkProduct="${cur_link_text.productSelectModal.getData()}"/>
166 <#else>
167 <#assign linkProduct="nada"/>
168 </#if>
169 <div class="button-link col-md-5 sfModalButton" onclick="openSfModal('${linkProduct}')">
170 ${seoLink}
171 ${htmlUtil.unescape(cur_link_text.getData())}
172 </a>
173 </div>
174 <#else>
175 <div class="button-link col-md-5">
176 ${seoLink}
177 ${htmlUtil.unescape(cur_link_text.getData())}
178 </a>
179 </div>
180 </#if>
181 </#list>
182 </div>
183 </#if>
184 <#if getterUtil.getBoolean(separator.getData())>
185 <div class="col-md-6 button-link middle line"></div>
186 </#if>
187 </div>
188 </div>
189 </div>
190 </div>
191
192 <script>
193 $(".sfModalButton a").on( "click", function(event) {
194 event.preventDefault();
195 } );
196 </script>
197
198<style>
199
200 @media(max-width: 767px) {
201
202 .mod.mod-Services{
203 padding-bottom:${custom_bottom_margin?has_content?then(custom_bottom_margin, "18px")}!important
204 padding-top:${custom_top_margin}!important;
205 }
206 }
207
208 .mod.mod-Services .product-text, .mod.mod-Services .product-text p{
209 margin-bottom:0px;
210 }
211
212 @media (min-width: 767px) {
213 .mod.mod-Services .intCol {
214 max-width: 780px;
215 }
216
217 .mod.mod-Services .intTitle {
218 width: 780px;
219 }
220 }
221
222</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#1098991" at line 1, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#1098991" at line 1, column 1]
----
1<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
2<#assign isPhone = zurichService.getPhone()>
3
4<#assign userAgent = request.getHeader("User-Agent")>
5<#if userAgent?contains("MSIE") || userAgent?contains("Trident")>
6 <#assign isExplorer = true/>
7<#else>
8 <#assign isExplorer = false/>
9</#if>
10<#if custom_top_margin?? && custom_top_margin.getData() != "">
11 <#assign custom_top_margin = custom_top_margin.getData() />
12<#else>
13 <#assign custom_top_margin = "" />
14</#if>
15
16<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
17 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
18<#else>
19 <#assign custom_bottom_margin = "" />
20</#if>
21<div id="${html_id.getData()}" class="row" style="padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
22 <#if getterUtil.getBoolean(line_top.getData())>
23 <div class="col-sm-9">
24 <div class="content-container">
25 <hr class="mod mod-Separator_line line-thin grey top">
26 </div>
27 </div>
28 </#if>
29 <div class="video-container col-sm-9">
30 <#if title.getData()?? && title.getData()?has_content>
31 <h2 class="text-center">
32 ${htmlUtil.unescape(title.getData())}
33 </h2>
34 </#if>
35 <div class="mod mod-Media_video link-bar-bottom-aligned">
36 <div class="media-container flexembed flexembed-16by9 videoSmall">
37 <#if isExplorer>
38 <#if brightcove_section.video_id.getData()?has_content>
39 <iframe src="//players.brightcove.net/4053905828001/H1QKJNybxl_default/index.html?videoId=${brightcove_section.video_id.getData()}" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
40 <#elseif youtube_section.y_video_id.getData()?has_content>
41 <iframe src="https://www.youtube.com/embed/${youtube_section.y_video_id.getData()}?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
42 </#if>
43 <#else>
44 <#if playfilm_section.playfilm_video_id.getData()?has_content>
45 <div id="playfilm_content_${playfilm_section.playfilm_video_id.getData()}" class="playfilm_content"></div>
46 <script async src="https://d1qr95rey7gro4.cloudfront.net/media/3/published/${playfilm_section.playfilm_video_id.getData()}/playfilm_embed.js?autoplay=false&embed_type=1" charset="utf-8"></script>
47 <#elseif brightcove_section.video_id.getData()?has_content>
48 <iframe src="//players.brightcove.net/4053905828001/H1QKJNybxl_default/index.html?videoId=${brightcove_section.video_id.getData()}" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
49 <#elseif youtube_section.y_video_id.getData()?has_content>
50 <iframe src="https://www.youtube.com/embed/${youtube_section.y_video_id.getData()}?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
51 </#if>
52 </#if>
53 </div>
54 </div>
55 <#if isPhone != "mobile" || description?? && description.getData() != "">
56 <div class="text-center">
57 <br />
58 ${description.getData()}
59 </div>
60 </#if>
61 </div>
62 <#if getterUtil.getBoolean(line_bottom.getData())>
63 <div class="col-sm-9">
64 <div class="content-container">
65 <hr class="mod mod-Separator_line line-thin grey">
66 </div>
67 </div>
68 </#if>
69</div>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877440" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877440" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6
7<#assign fondo = "">
8<#if background.getData() == "mist">
9 <#assign fondo = "bruma">
10<#elseif background.getData() == "mist2">
11 <#assign fondo = "bruma2">
12<#elseif background.getData() == "lightblue">
13 <#assign fondo = "lightblue">
14<#elseif background.getData() == "midblue">
15 <#assign fondo = "midblue">
16<#elseif background.getData() == "darkblue">
17 <#assign fondo = "darkblue">
18<#elseif background.getData() == "sandstone">
19 <#assign fondo = "sandstone">
20</#if>
21
22<#assign popupSF=false/>
23<#assign popupSF_new=false/>
24
25<#assign colortexto = "texBlue">
26<#if textcolor?has_content>
27 <#if textcolor.getData() == "white">
28 <#assign colortexto = "textWhite">
29 <#elseif textcolor.getData() == "blue">
30 <#assign colortexto = "textBlue">
31 </#if>
32</#if>
33<#if custom_top_margin?? && custom_top_margin.getData() != "">
34 <#assign custom_top_margin = custom_top_margin.getData() />
35<#else>
36 <#assign custom_top_margin = "" />
37</#if>
38
39<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
40 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
41<#else>
42 <#assign custom_bottom_margin = "" />
43</#if>
44
45<#if title_align?? && title_align.getData() != "">
46 <#assign titleAlign = title_align.getData() />
47<#else>
48 <#assign titleAlign = "" />
49</#if>
50
51<#if subtitle_align?? && subtitle_align.getData() != "">
52 <#assign subtitleAlign = subtitle_align.getData() />
53<#else>
54 <#assign subtitleAlign = "" />
55</#if>
56
57<div class="mod mod-Specifications ${fondo}" style="padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
58 <div class="container">
59 <div class="row">
60 <div class="col-md-12">
61 <#if title.getData()?? && title.getData() != "">
62 <#assign htmlTag = "h2"/>
63 <#if title.title_level?has_content>
64 <#assign htmlTag = title.title_level.getData()/>
65 </#if>
66 <div class="product-title" style="text-align: ${titleAlign};">
67 <${htmlTag} class="h1-copycat ${colortexto}">${htmlUtil.unescape(title.getData())}</${htmlTag}>
68 </div>
69 </#if>
70 <div class="product-subtitle ${colortexto}" style="text-align: ${subtitleAlign};">
71 <#if subtitle.getData()?? && subtitle.getData() != "">
72 ${htmlUtil.unescape(subtitle.getData())}
73 </#if>
74 </div>
75 <#assign specStyle = ""/>
76 <#if num_columns.getData() == "2">
77 <style>
78 @media (min-width: 668px){
79 .container.specifications{
80 max-width: 778px;
81 }
82 }
83 </style>
84 </#if>
85 <div class="container specifications" ${specStyle}>
86 <#if spec_title.getSiblings()?has_content>
87 <#assign numCols = 5 />
88 <#if num_columns.getData() != "">
89 <#assign numCols = num_columns.getData()/>
90 </#if>
91 <div class="slick-specifications row row-cols-${numCols}">
92
93 <#list spec_titleFieldSet.getSiblings() as cur_spec_title>
94
95 <!-- Variables Url icono -->
96 <#assign icon_seoLink = "<a style='cursor:default!important'>" />
97 <#assign icon_seoLink2 = "</a>" />
98 <#assign extraAttr= "" />
99 <!--ESTABLECER SI PAGE, FILE O FREELINK HAS CONTENT-->
100 <#assign specIconFieldSetFieldSet = cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_iconFieldSetFieldSet />
101
102 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link?has_content ||
103 specIconFieldSetFieldSet.icon_link_file_link?has_content ||
104 specIconFieldSetFieldSet.icon_link_free_link?has_content>
105 <#if (specIconFieldSetFieldSet.icon_link_free_link.getData()?? && specIconFieldSetFieldSet.icon_link_free_link.getData() != "") ||
106 (specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getData()?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getData() != "") ||
107 (specIconFieldSetFieldSet.icon_link_file_link.getData()?? && specIconFieldSetFieldSet.icon_link_file_link.getData() != "")>
108 <!--ASIGNAMOS EXTRA ATTR-->
109
110
111 <#list specIconFieldSetFieldSet.icon_link_attr_keyFieldSet.getSiblings() as cur_extra_attribute_key>
112
113 <#if cur_extra_attribute_key.icon_link_attr_key.getData()?? && cur_extra_attribute_key.icon_link_attr_key.getData()!="">
114 <#if cur_extra_attribute_key?is_first>
115 <#assign extraAttr="${cur_extra_attribute_key.icon_link_attr_key.getData()} / ${cur_extra_attribute_key.icon_link_attr_keyFieldSetFieldSet.icon_link_attr_valuegetData()}"/>
116 <#else>
117 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.icon_link_attr_key.getData()} / ${cur_extra_attribute_key.icon_link_attr_keyFieldSetFieldSet.icon_link_attr_value.getData()}"/>
118 </#if>
119 </#if>
120 </#list>
121 <!--FIN ASIGNAMOS EXTRA ATTR-->
122 <#assign linkClass= "" />
123 <#assign nofollow1=specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.hasNofollow1?? && getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.hasNofollow1.getData())/>
124
125
126
127 <#assign icon_seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data, specIconFieldSetFieldSet.spec_alt_icon.getData(), specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getFriendlyUrl(), specIconFieldSetFieldSet.icon_link_file_link.getData(), specIconFieldSetFieldSet.icon_link_free_link.getData(), getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.icon_link_new_tab.getData()), linkClass, specIconFieldSetFieldSet.icon_link_id_prefix.getData(), specIconFieldSetFieldSet.icon_link_id.getData(), extraAttr, nofollow1)/>
128 <#assign icon_seoLink2 = "</a>" />
129
130 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalSF??>
131 <#assign popupSF=getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalSF.getData())/>
132 </#if>
133 <#if popupSF==true>
134 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal.getData() != "">
135 <#assign linkProduct="${specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal.getData()}"/>
136 <#else>
137 <#assign linkProduct="nada"/>
138 </#if>
139 </#if>
140 </#if>
141 </#if>
142 <!--Fin Variables Url icono -->
143 <div class="slick-specifications-col col change-height">
144 <#assign line = "">
145 <#if getterUtil.getBoolean(separator.getData()) >
146 <#assign line = "line">
147 </#if>
148 <div class="product-description ${line}">
149 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP.getData() != "">
150 <div class="row sfModalButton" onclick="openModalRCP${specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP.getData()}()">
151 <#elseif popupSF==true >
152 <div class="row sfModalButton" onclick="openSfModal('${linkProduct}')">
153 <#else>
154 <div class="row">
155 </#if>
156 <#if specIconFieldSetFieldSet.spec_src_icon.getData()?? && specIconFieldSetFieldSet.spec_src_icon.getData() != "">
157 ${icon_seoLink}
158 <img width="54" height="55" role="presentation"
159 alt="${specIconFieldSetFieldSet.spec_alt_icon.getData()}"
160 src="${specIconFieldSetFieldSet.spec_src_icon.getData()}" loading="lazy"/>
161 ${icon_seoLink2}
162 <#elseif cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData() != "">
163 ${icon_seoLink}
164 <img width="80" height="80" role="presentation"
165 alt="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getAttribute('alt')}"
166 data-fileentryid="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getAttribute('fileEntryId')}"
167 src="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData()}" loading="lazy"/>
168 ${icon_seoLink2}
169 </#if>
170 </div>
171
172 <div class="product-title ${colortexto}">
173 <#if cur_spec_title.spec_title.getData()?? && cur_spec_title.spec_title.getData() != "" >
174 ${htmlUtil.unescape(cur_spec_title.spec_title.getData())}
175 </#if>
176 </div>
177 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData() != "">
178 <div class="product-text ${colortexto}">
179 ${cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()}
180 <style>
181 .slick-specifications-col.col.change-height {
182 height: auto!important;
183 }
184 </style>
185 <#else>
186 <style>
187 .slick-specifications-col.col.change-height {
188 height: auto!important;
189 }
190 </style>
191 </#if>
192 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData() != "">
193 </div>
194 </#if>
195
196 <#assign specLinkFieldSetFieldSet=cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_linkFieldSetFieldSet/>
197 <#assign extraAttr_link = ""/>
198 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData() != "">
199 <#if specLinkFieldSetFieldSet.spec_link_attr_keyFieldSet.getSiblings()?has_content>
200 <#list specLinkFieldSetFieldSet.spec_link_attr_keyFieldSet.getSiblings() as cur_extra_attribute_key>
201
202 <#if cur_extra_attribute_key.spec_link_attr_key.getData()?? && cur_extra_attribute_key.spec_link_attr_key.getData()!="">
203 <#if cur_extra_attribute_key?is_first>
204 <#assign extraAttr_link="${cur_extra_attribute_key.spec_link_attr_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_keyFieldSetFieldSet.link_attr_value.getData()}"/>
205 <#else>
206 <#assign extraAttr_link="${extraAttr} | ${cur_extra_attribute_key.spec_link_attr_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_keyFieldSetFieldSet.link_attr_value.getData()}"/>
207 </#if>
208 </#if>
209 </#list>
210 </#if>
211 <#assign linkClass="btn btn-lg ${aparienciaCTA(specLinkFieldSetFieldSet.spec_link_skin.getData(),'btn-primary')}" />
212
213 <#if specLinkFieldSetFieldSet.modalSF_new??>
214 <#assign popupSF_new=getterUtil.getBoolean(specLinkFieldSetFieldSet.modalSF_new.getData())/>
215 </#if>
216 <#if popupSF_new==true>
217 <#if specLinkFieldSetFieldSet.productSelectModal_new?? && specLinkFieldSetFieldSet.productSelectModal_new.getData() != "">
218 <#assign linkProduct_new="${specLinkFieldSetFieldSet.productSelectModal_new.getData()}"/>
219 <#else>
220 <#assign linkProduct_new="nada"/>
221 </#if>
222 </#if>
223
224
225
226 <#assign nofollow3=specLinkFieldSetFieldSet.hasNofollow3?? && getterUtil.getBoolean(specLinkFieldSetFieldSet.hasNofollow3.getData())/>
227
228 <#assign seoLink_link = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,specLinkFieldSetFieldSet.spec_link_title.getData(), specLinkFieldSetFieldSet.spec_link_page_link.getFriendlyUrl(),specLinkFieldSetFieldSet.spec_link_file_link.getData(), specLinkFieldSetFieldSet.spec_link_free_link.getData(),getterUtil.getBoolean(specLinkFieldSetFieldSet.spec_link_new_tab.getData()), linkClass, specLinkFieldSetFieldSet.spec_link_id_prefix.getData(), specLinkFieldSetFieldSet.spec_link_id.getData(),extraAttr_link, nofollow3)/>
229 <div class="row cta" style="margin-bottom:30px;">
230 <#if specLinkFieldSetFieldSet.spec_link_skin.getData() == "default" || specLinkFieldSetFieldSet.spec_link_skin.getData() == "download">
231 <div class="button-link">
232 <#else>
233 <div class="button-link col-md-12">
234 </#if>
235 <#if specLinkFieldSetFieldSet.modalRCP_new?? && specLinkFieldSetFieldSet.modalRCP_new.getData() != "">
236 <div class="sfModalButton" onclick="openModalRCP${specLinkFieldSetFieldSet.modalRCP_new.getData()}()">
237 <#elseif popupSF_new==true>
238 <div class="sfModalButton" onclick="openSfModal('${linkProduct_new}')">
239 <#else>
240 <div>
241 </#if>
242
243 ${seoLink_link}
244 ${htmlUtil.unescape(cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData())}
245 </a>
246 </div>
247 </div>
248 </div>
249 </#if>
250 </div>
251 </div>
252
253 </#list>
254 </div>
255 </#if>
256 </div>
257 </div>
258 </div>
259 </div>
260 </div>
261 <style>
262 .mod.mod-Specifications .specifications .product-description.line{
263 height:270px;
264 }
265 @media(max-width:768px){
266 .mod.mod-Specifications .specifications .product-description.line{
267 height:400px;
268 }
269 }
270 @media(min-width:768px){
271 .mod.mod-Specifications .specifications .product-description .ctaSpecifications a{
272 min-height:48px!important;
273 padding:0 12px!important;
274 margin-top:10px;
275 font-size:14px;
276 }
277 .mod.mod-Specifications .specifications .product-description .ctaSpecifications .button-link{
278 margin-top:-1px!important;
279 }
280 .mod.mod-Specifications .specifications .product-description .ctaSpecifications .button-link{
281 margin-top:-1px!important;
282 }
283 }
284 @media(min-width:768px){
285 .container.specifications .slick-specifications.row.row-cols-3{
286 margin-top:15px;
287 }
288 }
289
290 @media(min-width:769px){
291 .container.specifications .button-link.col-md-12{
292 margin-top:10px;
293 }
294 }
295
296
297 </style>
298 <script>
299 $(".sfModalButton a").on( "click", function(event) {
300 event.preventDefault();
301 } );
302 </script>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877440" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877440" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6
7<#assign fondo = "">
8<#if background.getData() == "mist">
9 <#assign fondo = "bruma">
10<#elseif background.getData() == "mist2">
11 <#assign fondo = "bruma2">
12<#elseif background.getData() == "lightblue">
13 <#assign fondo = "lightblue">
14<#elseif background.getData() == "midblue">
15 <#assign fondo = "midblue">
16<#elseif background.getData() == "darkblue">
17 <#assign fondo = "darkblue">
18<#elseif background.getData() == "sandstone">
19 <#assign fondo = "sandstone">
20</#if>
21
22<#assign popupSF=false/>
23<#assign popupSF_new=false/>
24
25<#assign colortexto = "texBlue">
26<#if textcolor?has_content>
27 <#if textcolor.getData() == "white">
28 <#assign colortexto = "textWhite">
29 <#elseif textcolor.getData() == "blue">
30 <#assign colortexto = "textBlue">
31 </#if>
32</#if>
33<#if custom_top_margin?? && custom_top_margin.getData() != "">
34 <#assign custom_top_margin = custom_top_margin.getData() />
35<#else>
36 <#assign custom_top_margin = "" />
37</#if>
38
39<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
40 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
41<#else>
42 <#assign custom_bottom_margin = "" />
43</#if>
44
45<#if title_align?? && title_align.getData() != "">
46 <#assign titleAlign = title_align.getData() />
47<#else>
48 <#assign titleAlign = "" />
49</#if>
50
51<#if subtitle_align?? && subtitle_align.getData() != "">
52 <#assign subtitleAlign = subtitle_align.getData() />
53<#else>
54 <#assign subtitleAlign = "" />
55</#if>
56
57<div class="mod mod-Specifications ${fondo}" style="padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
58 <div class="container">
59 <div class="row">
60 <div class="col-md-12">
61 <#if title.getData()?? && title.getData() != "">
62 <#assign htmlTag = "h2"/>
63 <#if title.title_level?has_content>
64 <#assign htmlTag = title.title_level.getData()/>
65 </#if>
66 <div class="product-title" style="text-align: ${titleAlign};">
67 <${htmlTag} class="h1-copycat ${colortexto}">${htmlUtil.unescape(title.getData())}</${htmlTag}>
68 </div>
69 </#if>
70 <div class="product-subtitle ${colortexto}" style="text-align: ${subtitleAlign};">
71 <#if subtitle.getData()?? && subtitle.getData() != "">
72 ${htmlUtil.unescape(subtitle.getData())}
73 </#if>
74 </div>
75 <#assign specStyle = ""/>
76 <#if num_columns.getData() == "2">
77 <style>
78 @media (min-width: 668px){
79 .container.specifications{
80 max-width: 778px;
81 }
82 }
83 </style>
84 </#if>
85 <div class="container specifications" ${specStyle}>
86 <#if spec_title.getSiblings()?has_content>
87 <#assign numCols = 5 />
88 <#if num_columns.getData() != "">
89 <#assign numCols = num_columns.getData()/>
90 </#if>
91 <div class="slick-specifications row row-cols-${numCols}">
92
93 <#list spec_titleFieldSet.getSiblings() as cur_spec_title>
94
95 <!-- Variables Url icono -->
96 <#assign icon_seoLink = "<a style='cursor:default!important'>" />
97 <#assign icon_seoLink2 = "</a>" />
98 <#assign extraAttr= "" />
99 <!--ESTABLECER SI PAGE, FILE O FREELINK HAS CONTENT-->
100 <#assign specIconFieldSetFieldSet = cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_iconFieldSetFieldSet />
101
102 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link?has_content ||
103 specIconFieldSetFieldSet.icon_link_file_link?has_content ||
104 specIconFieldSetFieldSet.icon_link_free_link?has_content>
105 <#if (specIconFieldSetFieldSet.icon_link_free_link.getData()?? && specIconFieldSetFieldSet.icon_link_free_link.getData() != "") ||
106 (specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getData()?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getData() != "") ||
107 (specIconFieldSetFieldSet.icon_link_file_link.getData()?? && specIconFieldSetFieldSet.icon_link_file_link.getData() != "")>
108 <!--ASIGNAMOS EXTRA ATTR-->
109
110
111 <#list specIconFieldSetFieldSet.icon_link_attr_keyFieldSet.getSiblings() as cur_extra_attribute_key>
112
113 <#if cur_extra_attribute_key.icon_link_attr_key.getData()?? && cur_extra_attribute_key.icon_link_attr_key.getData()!="">
114 <#if cur_extra_attribute_key?is_first>
115 <#assign extraAttr="${cur_extra_attribute_key.icon_link_attr_key.getData()} / ${cur_extra_attribute_key.icon_link_attr_keyFieldSetFieldSet.icon_link_attr_valuegetData()}"/>
116 <#else>
117 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.icon_link_attr_key.getData()} / ${cur_extra_attribute_key.icon_link_attr_keyFieldSetFieldSet.icon_link_attr_value.getData()}"/>
118 </#if>
119 </#if>
120 </#list>
121 <!--FIN ASIGNAMOS EXTRA ATTR-->
122 <#assign linkClass= "" />
123 <#assign nofollow1=specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.hasNofollow1?? && getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.hasNofollow1.getData())/>
124
125
126
127 <#assign icon_seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data, specIconFieldSetFieldSet.spec_alt_icon.getData(), specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_link.getFriendlyUrl(), specIconFieldSetFieldSet.icon_link_file_link.getData(), specIconFieldSetFieldSet.icon_link_free_link.getData(), getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.icon_link_new_tab.getData()), linkClass, specIconFieldSetFieldSet.icon_link_id_prefix.getData(), specIconFieldSetFieldSet.icon_link_id.getData(), extraAttr, nofollow1)/>
128 <#assign icon_seoLink2 = "</a>" />
129
130 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalSF??>
131 <#assign popupSF=getterUtil.getBoolean(specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalSF.getData())/>
132 </#if>
133 <#if popupSF==true>
134 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal.getData() != "">
135 <#assign linkProduct="${specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.productSelectModal.getData()}"/>
136 <#else>
137 <#assign linkProduct="nada"/>
138 </#if>
139 </#if>
140 </#if>
141 </#if>
142 <!--Fin Variables Url icono -->
143 <div class="slick-specifications-col col change-height">
144 <#assign line = "">
145 <#if getterUtil.getBoolean(separator.getData()) >
146 <#assign line = "line">
147 </#if>
148 <div class="product-description ${line}">
149 <#if specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP?? && specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP.getData() != "">
150 <div class="row sfModalButton" onclick="openModalRCP${specIconFieldSetFieldSet.icon_link_page_linkFieldSet.icon_link_page_linkFieldSetFieldSet.modalRCP.getData()}()">
151 <#elseif popupSF==true >
152 <div class="row sfModalButton" onclick="openSfModal('${linkProduct}')">
153 <#else>
154 <div class="row">
155 </#if>
156 <#if specIconFieldSetFieldSet.spec_src_icon.getData()?? && specIconFieldSetFieldSet.spec_src_icon.getData() != "">
157 ${icon_seoLink}
158 <img width="54" height="55" role="presentation"
159 alt="${specIconFieldSetFieldSet.spec_alt_icon.getData()}"
160 src="${specIconFieldSetFieldSet.spec_src_icon.getData()}" loading="lazy"/>
161 ${icon_seoLink2}
162 <#elseif cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData() != "">
163 ${icon_seoLink}
164 <img width="80" height="80" role="presentation"
165 alt="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getAttribute('alt')}"
166 data-fileentryid="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getAttribute('fileEntryId')}"
167 src="${cur_spec_title.spec_titleFieldSetFieldSet.spec_iconFieldSet.spec_icon.getData()}" loading="lazy"/>
168 ${icon_seoLink2}
169 </#if>
170 </div>
171
172 <div class="product-title ${colortexto}">
173 <#if cur_spec_title.spec_title.getData()?? && cur_spec_title.spec_title.getData() != "" >
174 ${htmlUtil.unescape(cur_spec_title.spec_title.getData())}
175 </#if>
176 </div>
177 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData() != "">
178 <div class="product-text ${colortexto}">
179 ${cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()}
180 <style>
181 .slick-specifications-col.col.change-height {
182 height: auto!important;
183 }
184 </style>
185 <#else>
186 <style>
187 .slick-specifications-col.col.change-height {
188 height: auto!important;
189 }
190 </style>
191 </#if>
192 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_description.getData() != "">
193 </div>
194 </#if>
195
196 <#assign specLinkFieldSetFieldSet=cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_linkFieldSetFieldSet/>
197 <#assign extraAttr_link = ""/>
198 <#if cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData()?? && cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData() != "">
199 <#if specLinkFieldSetFieldSet.spec_link_attr_keyFieldSet.getSiblings()?has_content>
200 <#list specLinkFieldSetFieldSet.spec_link_attr_keyFieldSet.getSiblings() as cur_extra_attribute_key>
201
202 <#if cur_extra_attribute_key.spec_link_attr_key.getData()?? && cur_extra_attribute_key.spec_link_attr_key.getData()!="">
203 <#if cur_extra_attribute_key?is_first>
204 <#assign extraAttr_link="${cur_extra_attribute_key.spec_link_attr_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_keyFieldSetFieldSet.link_attr_value.getData()}"/>
205 <#else>
206 <#assign extraAttr_link="${extraAttr} | ${cur_extra_attribute_key.spec_link_attr_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_keyFieldSetFieldSet.link_attr_value.getData()}"/>
207 </#if>
208 </#if>
209 </#list>
210 </#if>
211 <#assign linkClass="btn btn-lg ${aparienciaCTA(specLinkFieldSetFieldSet.spec_link_skin.getData(),'btn-primary')}" />
212
213 <#if specLinkFieldSetFieldSet.modalSF_new??>
214 <#assign popupSF_new=getterUtil.getBoolean(specLinkFieldSetFieldSet.modalSF_new.getData())/>
215 </#if>
216 <#if popupSF_new==true>
217 <#if specLinkFieldSetFieldSet.productSelectModal_new?? && specLinkFieldSetFieldSet.productSelectModal_new.getData() != "">
218 <#assign linkProduct_new="${specLinkFieldSetFieldSet.productSelectModal_new.getData()}"/>
219 <#else>
220 <#assign linkProduct_new="nada"/>
221 </#if>
222 </#if>
223
224
225
226 <#assign nofollow3=specLinkFieldSetFieldSet.hasNofollow3?? && getterUtil.getBoolean(specLinkFieldSetFieldSet.hasNofollow3.getData())/>
227
228 <#assign seoLink_link = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,specLinkFieldSetFieldSet.spec_link_title.getData(), specLinkFieldSetFieldSet.spec_link_page_link.getFriendlyUrl(),specLinkFieldSetFieldSet.spec_link_file_link.getData(), specLinkFieldSetFieldSet.spec_link_free_link.getData(),getterUtil.getBoolean(specLinkFieldSetFieldSet.spec_link_new_tab.getData()), linkClass, specLinkFieldSetFieldSet.spec_link_id_prefix.getData(), specLinkFieldSetFieldSet.spec_link_id.getData(),extraAttr_link, nofollow3)/>
229 <div class="row cta" style="margin-bottom:30px;">
230 <#if specLinkFieldSetFieldSet.spec_link_skin.getData() == "default" || specLinkFieldSetFieldSet.spec_link_skin.getData() == "download">
231 <div class="button-link">
232 <#else>
233 <div class="button-link col-md-12">
234 </#if>
235 <#if specLinkFieldSetFieldSet.modalRCP_new?? && specLinkFieldSetFieldSet.modalRCP_new.getData() != "">
236 <div class="sfModalButton" onclick="openModalRCP${specLinkFieldSetFieldSet.modalRCP_new.getData()}()">
237 <#elseif popupSF_new==true>
238 <div class="sfModalButton" onclick="openSfModal('${linkProduct_new}')">
239 <#else>
240 <div>
241 </#if>
242
243 ${seoLink_link}
244 ${htmlUtil.unescape(cur_spec_title.spec_titleFieldSetFieldSet.spec_linkFieldSet.spec_link.getData())}
245 </a>
246 </div>
247 </div>
248 </div>
249 </#if>
250 </div>
251 </div>
252
253 </#list>
254 </div>
255 </#if>
256 </div>
257 </div>
258 </div>
259 </div>
260 </div>
261 <style>
262 .mod.mod-Specifications .specifications .product-description.line{
263 height:270px;
264 }
265 @media(max-width:768px){
266 .mod.mod-Specifications .specifications .product-description.line{
267 height:400px;
268 }
269 }
270 @media(min-width:768px){
271 .mod.mod-Specifications .specifications .product-description .ctaSpecifications a{
272 min-height:48px!important;
273 padding:0 12px!important;
274 margin-top:10px;
275 font-size:14px;
276 }
277 .mod.mod-Specifications .specifications .product-description .ctaSpecifications .button-link{
278 margin-top:-1px!important;
279 }
280 .mod.mod-Specifications .specifications .product-description .ctaSpecifications .button-link{
281 margin-top:-1px!important;
282 }
283 }
284 @media(min-width:768px){
285 .container.specifications .slick-specifications.row.row-cols-3{
286 margin-top:15px;
287 }
288 }
289
290 @media(min-width:769px){
291 .container.specifications .button-link.col-md-12{
292 margin-top:10px;
293 }
294 }
295
296
297 </style>
298 <script>
299 $(".sfModalButton a").on( "click", function(event) {
300 event.preventDefault();
301 } );
302 </script>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#305921909" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#305921909" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6<#assign isPhone = zurichService.getPhone()>
7
8<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
9
10<#assign fondo = "#ffffff">
11<#if background?? && background.getData()!="">
12 <#assign fondo = background.getData()>
13</#if>
14
15<#assign popupSF=false/>
16
17<#assign textColor = "dark-blue">
18<#if text_color?? && text_color.getData()!="">
19 <#assign textColor = text_color.getData()>
20</#if>
21<#if custom_top_margin?? && custom_top_margin.getData() != "">
22 <#assign custom_top_margin = custom_top_margin.getData() />
23<#else>
24 <#assign custom_top_margin = "" />
25</#if>
26
27<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
28 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
29<#else>
30 <#assign custom_bottom_margin = "" />
31</#if>
32<div class="mod mod-Product highlight-figure" style="background-color:${fondo}; padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
33 <div class="container">
34 <#if image_float.getData()?? && image_float.getData()?has_content>
35 <#if image_float.getData() == "right">
36 <div class="row right">
37 <#else>
38 <div class="row">
39 </#if>
40 <#else>
41 <div class="row">
42 </#if>
43 <div class="elements-block">
44 <div class="element-block">
45 <div class="row">
46 <div class="col-md-4 image">
47 <#if image.getData()?? && image.getData() != "">
48 <div class="image-border">
49 <img role="presentation" alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
50 </div>
51 </#if>
52 </div>
53 <#-- PL-1023 hide text when is empty -->
54 <#assign isEmpty = "" />
55 <#assign textMargin = "" />
56 <#if isPhone == "mobile">
57 <#if title.getData() == "" && description.getData() == "" && link_text.getData() == "">
58 <#assign isEmpty = "hide" />
59 <#elseif title.getData() == "" || description.getData() == "">
60 <#assign textMargin = 'style="margin-bottom:0px;margin-top:0px"' />
61 </#if>
62 </#if>
63 <#-- -->
64 <div class="col-md-8 text text-color__${textColor} ${isEmpty}" ${textMargin}>
65 <div class="element-description">
66
67 <#if title.getData()?? && title.getData() != "">
68 <div class="title">
69 <${title.title_level.getData()} class="h1-copycat">${htmlUtil.unescape(title.getData())}</${title.title_level.getData()}>
70 </div>
71 </#if>
72 <div class="description">
73 <#if description.getData()?? && description.getData() != "">
74 ${description.getData()}
75 </#if>
76 </div>
77 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
78 <div class="row cta">
79 <#if links_align.getData()?? && links_align.getData()?has_content>
80 <div class="${links_align.getData()}">
81 <#else>
82 <div class="middle">
83 </#if>
84 <#list link_text.getSiblings() as cur_link>
85 <#if cur_link.modalSF??>
86 <#assign popupSF=getterUtil.getBoolean(cur_link.modalSF.getData())/>
87 </#if>
88 <#if cur_link.link_attr_key.getSiblings()?has_content>
89 <#list cur_link.link_attr_key.getSiblings() as cur_extra_attribute_key>
90 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
91 <#if cur_extra_attribute_key?is_first>
92 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_value.getData()}"/>
93 <#else>
94 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_key.getData()}"/>
95 </#if>
96 </#if>
97 </#list>
98 </#if>
99 <#assign linkClass="btn btn-lg ${aparienciaCTA(cur_link.link_skin.getData(),'btn-primary')}"/>
100
101
102 <#if cur_link.EnlaceModal??>
103 <#assign link_modalElementoRepetible = cur_link.EnlaceModal.getData() />
104 </#if>
105 <#assign modalElementoRepetible = "">
106 <#assign modalPanelElementoRepetible = "">
107 <#assign articleIdModalElementoRepetible = "">
108 <#if link_modalElementoRepetible?? && link_modalElementoRepetible!="" >
109 <#assign journalArticleModalElementoRepetible = link_modalElementoRepetible?eval/>
110 <#assign articleModalElementoRepetible = journalArticleLocalService.fetchLatestArticle(journalArticleModalElementoRepetible.classPK?number)/>
111 <#assign modalElementoRepetible = journalArticleLocalService.getArticleContent(articleModalElementoRepetible, articleModalElementoRepetible.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
112 <#assign articleIdModalElementoRepetible = articleModalElementoRepetible.getArticleId()>
113 <#assign modalPanelElementoRepetible = zurichService.getModal(modalElementoRepetible,.vars['reserved-article-id'].data, articleIdModalElementoRepetible)>
114 <#assign modalesRepetibles = modalesRepetibles + modalPanelElementoRepetible>
115 </#if>
116
117 <#assign nofollow=cur_link.hasNofollow?? && getterUtil.getBoolean(cur_link.hasNofollow.getData())/>
118 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link.link_title.getData(), cur_link.link_page_link.getFriendlyUrl(),cur_link.link_file_link.getData(), cur_link.link_free_link.getData(),getterUtil.getBoolean(cur_link.link_new_tab.getData()), linkClass, cur_link.link_id_prefix.getData(), cur_link.link_id.getData(),extraAttr, modalElementoRepetible, articleIdModalElementoRepetible, nofollow)/>
119
120
121 <#if cur_link.modalRCP?? && cur_link.modalRCP.getData() != "">
122 <div class="button-link sfModalButton" onclick="openModalRCP${cur_link.modalRCP.getData()}()">
123 ${seoLink}
124 ${htmlUtil.unescape(cur_link.getData())}
125 </a>
126 </div>
127 <#elseif popupSF==true>
128 <#if cur_link.productSelectModal?? && cur_link.productSelectModal.getData() != "">
129 <#assign linkProduct="${cur_link.productSelectModal.getData()}"/>
130 <#else>
131 <#assign linkProduct="nada"/>
132 </#if>
133 <div class="button-link sfModalButton" onclick="openSfModal('${linkProduct}')">
134 ${seoLink}
135 ${htmlUtil.unescape(cur_link.getData())}
136 </a>
137 </div>
138 <#else>
139 <div class="button-link">
140 ${seoLink}
141 ${htmlUtil.unescape(cur_link.getData())}
142 </a>
143 </div>
144 </#if>
145 </#list>
146 </div>
147 </div>
148 </#if>
149 </div>
150 </div>
151 </div>
152 </div>
153 </div>
154 </div>
155 </div>
156</div>
157
158<style>
159
160.text-color__dark-blue{
161 color: #23366F;
162}
163
164.text-color__white{
165 color: white;
166}
167
168a.link-white{
169 text-decoration: none;
170 color: #23366F;
171 border-color: #23366F;
172 min-width: 110px;
173 text-align: center;
174 border-radius:28px;
175 background-color:white;
176}
177
178.link-white{
179 height: inherit;
180 padding: 8px;
181 display: flex;
182 justify-content: center;
183 flex-direction: row;
184 border: 1px solid #000066;
185 color: #000066;
186}
187
188.button-link.small .link-white {
189 padding: 0 24px;
190 max-width: none;
191 min-height: 56px;
192 font-size: 18px;
193 align-items: center;
194 justify-content: center;
195 margin-top: -20px;
196 text-align: center;
197 border-radius: 28px;
198}
199a.link-white:hover {
200 text-decoration: none;
201 background-color: #edeef0;
202 color:#91bfe3;
203}
204</style>
205
206<script>
207$(".sfModalButton a").on( "click", function(event) {
208 event.preventDefault();
209} );
210</script>
211
212<style>
213@media(max-width:768px){
214 .mod.mod-Product.highlight-figure .elements-block .element-description .button-link:not(:last-of-type){
215 margin-right:0px;
216}
217.mod.mod-Product.highlight-figure .elements-block .element-block .text{
218 margin-top:15px!important;
219 padding-top:15px;
220}
221.mod.mod-Product.highlight-figure .elements-block .element-block .image{
222 margin-top:30px;
223}
224.mod.mod-Product.highlight-figure .elements-block .element-description .button-link{
225 margin-bottom:10px;
226}
227}
228.mod.mod-Product.highlight-figure .elements-block .element-description .description h2{
229 font-weight: 700;
230}
231
232</style>
233
234<style>
235@media (max-width: 767px) {
236 .mod.mod-Product .elements-block .element-block .row .button-link {
237 justify-content: center;
238 }
239}
240</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877400" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877400" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
7<#assign hasVideo = false>
8
9<#assign popupSF=false/>
10
11<#assign modalesRepetibles = "">
12<#assign isPhone = zurichService.getPhone()>
13<#assign fondo = "">
14<#if background.getData() == "mist">
15 <#assign fondo = "bruma">
16<#elseif background.getData() == "mist2">
17 <#assign fondo = "bruma2">
18<#elseif background.getData() == "lightblue">
19 <#assign fondo = "lightblue">
20<#elseif background.getData() == "sandstone">
21 <#assign fondo = "sandstone">
22</#if>
23<#assign fondoStyle = "">
24<#if fondohex?? && fondohex.getData() != "">
25 <#assign fondo = "">
26 <#assign fondoStyle = "background-color:${fondohex.getData()};">
27</#if>
28<#assign textStyleColor = "">
29<#if textColor?? && textColor.getData() != "">
30 <#if textColor.getData() == "blanco">
31 <#assign textStyleColor = "color:white;">
32 <#elseif textColor.getData() == "azul">
33 <#assign textStyleColor = "color:#23366f;">
34 </#if>
35</#if>
36<#assign fondoTexto = "">
37<#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
38 <#if text_background_color.getData() == "dove">
39 <#assign fondoTexto = "TextBruma">
40 <#elseif text_background_color.getData() == "white">
41 <#assign fondoTexto = "TextBlanco">
42 <#elseif text_background_color.getData() == "mist2">
43 <#assign fondoTexto = "Textbruma2">
44 <#elseif text_background_color.getData() == "lightblue">
45 <#assign fondoTexto = "Textlightblue">
46 <#elseif text_background_color.getData() == "sandstone">
47 <#assign fondoTexto = "Textsandstone">
48 </#if>
49</#if>
50<#if custom_top_margin?? && custom_top_margin.getData() != "">
51 <#assign custom_top_margin = custom_top_margin.getData() />
52<#else>
53 <#assign custom_top_margin = "15px" />
54</#if>
55<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
56 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
57<#else>
58 <#assign custom_bottom_margin = "15px" />
59</#if>
60<#if image_float.getData()?? && image_float.getData()?has_content>
61 <#if image_float.getData() == "right">
62 <#assign fondo = "">
63 <#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
64 <#if text_background_color.getData() == "dove">
65 <#assign fondo = "text1-background-dove">
66 <#elseif text_background_color.getData() == "mist2">
67 <#assign fondo = "text1-background-dove2">
68 <#elseif text_background_color.getData() == "white">
69 <#assign fondo = "text1-background-blanco">
70 <#elseif text_background_color.getData() == "sandstone">
71 <#assign fondo = "text1-background-sandstone">
72 <#elseif text_background_color.getData() == "lightblue">
73 <#assign fondo = "text1-background-lightblue">
74 </#if>
75 </#if>
76 <#assign fondoTexto = "">
77 <#if fondehex??>
78 <#if fondohex.getData()?? && fondohex.getData()?has_content>
79 <#if fondohex.getData() == "">
80 <#if background.getData() == "mist">
81 <#assign fondoTexto = "bruma">
82 <#elseif background.getData() == "mist2">
83 <#assign fondoTexto = "bruma2">
84 <#elseif background.getData() == "lightblue">
85 <#assign fondoTexto = "lightblue">
86 <#elseif background.getData() == "sandstone">
87 <#assign fondoTexto = "sandstone">
88 </#if>
89 </#if>
90 </#if>
91 <#else>
92
93 </#if>
94 </#if>
95<#else>
96</#if>
97<#assign noShadow=""/>
98<#if image_skin.getData()?? && image_skin.getData() !="">
99 <#if image_skin.getData() == "no-shadow">
100 <#assign noShadow="noShadow"/>
101 </#if>
102</#if>
103
104<#if isPhone=="tablet">
105<div class="mod mod-Product ${fondo} ${noShadow}" style="${fondoStyle} padding:0x;">
106<#else>
107<div class="mod mod-Product ${fondo} ${noShadow}" style="padding:0!important; ${fondoStyle}">
108</#if>
109 <div class="container" style="max-width: 100%;">
110 <#if image_float.getData()?? && image_float.getData()?has_content>
111 <#if image_float.getData() == "right">
112 <div class="row right">
113 <#else>
114 <div class="row left-image">
115 </#if>
116 <#else>
117 <div class="row left-image">
118 </#if>
119 <div class="elements-block">
120 <div class="element-block">
121 <#if image.VideoImagen??>
122 <#if image.VideoImagen.getData()?? && image.VideoImagen.getData()!="" >
123 <#assign modal = "">
124 <#assign modalPanel = "">
125 <#assign articleIdModal = "">
126 <#assign portletRequestModel = objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse) />
127 <#assign journalArticleModal = image.VideoImagen.getData()?eval/>
128 <#assign articleModal = journalArticleLocalService.fetchLatestArticle(journalArticleModal.classPK?number)/>
129 <#if articleModal?? && articleModal !="" && articleModal?has_content>
130 <#assign modal = journalArticleLocalService.getArticleContent(articleModal, articleModal.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), portletRequestModel, themeDisplay)>
131 <#assign articleIdModal = articleModal.getArticleId()>
132 <#assign modalPanelImage = zurichService.getModalImage(.vars['reserved-article-id'].data, articleIdModal)>
133 <#assign modalPanel = zurichService.getModal(modal,.vars['reserved-article-id'].data, articleIdModal)>
134 ${modalPanel}
135 <#assign hasVideo = true>
136 </#if>
137 </#if>
138 </#if>
139 <div class="row">
140 <div class="col-md-6 image">
141 <#if image_skin.getData()?? && image_skin.getData() != "">
142 <div style="width: 100%;">
143 </#if>
144 <#if image.src_image.getData()?? && image.src_image.getData() != "">
145 <#if isPhone=="tablet">
146 <img alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" style="padding-top:90px" width="100%" height="100%" loading="lazy"/>
147 <#else>
148 <img alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
149 </#if>
150 <#elseif image.getData()?? && image.getData() != "">
151 <#if isPhone=="tablet">
152 <img alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" style="padding-top=90px" width="100%" height="100%" loading="lazy"/>
153 <#else>
154 <img alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
155 </#if>
156 </#if>
157 <#if hasVideo >
158 <div class="modalVideo">
159 ${modalPanelImage}
160 </div>
161 </#if>
162 </div>
163 </div>
164 <div class="col-md-6 text ${fondoTexto}">
165 <div class="element-description ${(image_float.getData() == "right")?then('', 'offset-md-1 col-md-10')}">
166 <#if topic_link_text.getData()?? && topic_link_text.getData() != "">
167 <#if topic_link_text.topic_link_attr_key.getSiblings()?has_content>
168 <#list topic_link_text.topic_link_attr_key.getSiblings() as cur_extra_attribute_key>
169 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
170 <#if cur_extra_attribute_key?is_first>
171 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
172 <#else>
173 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
174 </#if>
175 </#if>
176 </#list>
177 </#if>
178 <#assign linkClass=""/>
179 <#if topic_link_text.EnlaceModalTopic??>
180 <#assign link_modalIndiceSuperior = topic_link_text.EnlaceModalTopic.getData() />
181 </#if>
182 <#assign modalIndiceSuperior = "">
183 <#assign modalPanelIndiceSuperior = "">
184 <#assign articleIdModalIndiceSuperior = "">
185 <#if link_modalIndiceSuperior?? && link_modalIndiceSuperior!="" >
186 <#assign journalArticleModalIndiceSuperior = link_modalIndiceSuperior?eval/>
187 <#assign articleModalIndiceSuperior = journalArticleLocalService.fetchLatestArticle(journalArticleModalIndiceSuperior.classPK?number)/>
188 <#assign modalIndiceSuperior = journalArticleLocalService.getArticleContent(articleModalIndiceSuperior, articleModalIndiceSuperior.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
189 <#assign articleIdModalIndiceSuperior = articleModalIndiceSuperior.getArticleId()>
190 <#assign modalPanelIndiceSuperior = zurichService.getModal(modalIndiceSuperior,.vars['reserved-article-id'].data, articleIdModalIndiceSuperior)>
191 </#if>
192 <#assign nofollow=topic_link_text.hasNofollow?? && getterUtil.getBoolean(topic_link_text.hasNofollow.getData())/>
193 <#assign seoLink_topic = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,topic_link_text.topic_link_title.getData(), topic_link_text.topic_link_page_link.getFriendlyUrl(),topic_link_text.topic_link_file_link.getData(), topic_link_text.topic_link_free_link.getData(),getterUtil.getBoolean(topic_link_text.topic_link_new_tab.getData()), linkClass, topic_link_text.topic_link_id_prefix.getData(), topic_link_text.topic_link_id.getData() , extraAttr, modalIndiceSuperior, articleIdModalIndiceSuperior, nofollow)/>
194 <div class="element-hashtag">
195 <#if seoLink_topic?? >
196 ${seoLink_topic}
197 ${topic_link_text.getData()}
198 </a>
199 </#if>
200 </div>
201 </#if>
202 <#if title.getData()?? && title.getData() != "">
203 <#assign title_level = "h2"/>
204 <#if title.title_level??>
205 <#if title.title_level.getData()?? && title.title_level.getData() != "">
206 <#assign title_level = title.title_level.getData()/>
207 </#if>
208 <#else>
209
210 </#if>
211 <div class="title">
212 <${title_level} class="h1-copycat" style="${textStyleColor}">${htmlUtil.unescape(title.getData())}</${title_level}>
213 </div>
214 </#if>
215 <#if subtitle.getData()?? && subtitle.getData() != "">
216 <div class="subtitle" style="${textStyleColor}">
217 ${htmlUtil.unescape(subtitle.getData())}
218 </div>
219 </#if>
220 <div class="description" style="${textStyleColor}">
221 <#if description.getData()?? && description.getData() != "">
222 ${description.getData()}
223 </#if>
224 </div>
225 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
226 <div class="row cta">
227 <#if links_align.getData()?? && links_align.getData()?has_content>
228 <div class="${links_align.getData()}">
229 <#else>
230 <div class="middle">
231 </#if>
232 <#list link_text.getSiblings() as cur_link>
233 <#if cur_link.modalSF??>
234 <#assign popupSF=getterUtil.getBoolean(cur_link.modalSF.getData ())/>
235 </#if>
236 <#if cur_link.link_attr_key.getSiblings()?has_content>
237 <#list cur_link.link_attr_key.getSiblings() as cur_extra_attribute_key>
238 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
239 <#if cur_extra_attribute_key?is_first>
240 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_value.getData()}"/>
241 <#else>
242 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_key.getData()}"/>
243 </#if>
244 </#if>
245 </#list>
246 </#if>
247 <#assign linkClass="btn btn-lg ${aparienciaCTA(cur_link.link_skin.getData(),'btn-secondary')}"/>
248
249 <#if cur_link.EnlaceModal??>
250 <#assign link_modalElementoRepetible = cur_link.EnlaceModal.getData() />
251 </#if>
252 <#assign modalElementoRepetible = "">
253 <#assign modalPanelElementoRepetible = "">
254 <#assign articleIdModalElementoRepetible = "">
255 <#if link_modalElementoRepetible?? && link_modalElementoRepetible!="" >
256 <#assign journalArticleModalElementoRepetible = link_modalElementoRepetible?eval/>
257 <#assign articleModalElementoRepetible = journalArticleLocalService.fetchLatestArticle(journalArticleModalElementoRepetible.classPK?number)/>
258 <#assign modalElementoRepetible = journalArticleLocalService.getArticleContent(articleModalElementoRepetible, articleModalElementoRepetible.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
259 <#assign articleIdModalElementoRepetible = articleModalElementoRepetible.getArticleId()>
260 <#assign modalPanelElementoRepetible = zurichService.getModal(modalElementoRepetible,.vars['reserved-article-id'].data, articleIdModalElementoRepetible)>
261 <#assign modalesRepetibles = modalesRepetibles + modalPanelElementoRepetible>
262 </#if>
263 <#assign nofollow2=cur_link.hasNofollow2?? && getterUtil.getBoolean(cur_link.hasNofollow2.getData())/>
264 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link.link_title.getData(), cur_link.link_page_link.getFriendlyUrl(),cur_link.link_file_link.getData(), cur_link.link_free_link.getData(),getterUtil.getBoolean(cur_link.link_new_tab.getData()), linkClass, cur_link.link_id_prefix.getData(), cur_link.link_id.getData(),extraAttr, modalElementoRepetible, articleIdModalElementoRepetible, nofollow2)/>
265 <#if cur_link.modalRCP_2?? && cur_link.modalRCP_2.getData() != "">
266 <div class="button-link col-6 sfModalButton" onclick="openModalRCP${cur_link.modalRCP_2.getData()}()">
267 ${seoLink}
268 ${htmlUtil.unescape(cur_link.getData())}
269 </a>
270 </div>
271 <#elseif popupSF==true>
272 <#if cur_link.productSelectModal?? && cur_link.productSelectModal.getData() != "">
273 <#assign linkProduct="${cur_link.productSelectModal.getData()}"/>
274 <#else>
275 <#assign linkProduct="nada"/>
276 </#if>
277 <div class="button-link col-6 sfModalButton" onclick="openSfModal('${linkProduct}')">
278 ${seoLink}
279 ${htmlUtil.unescape(cur_link.getData())}
280 </a>
281 </div>
282 <#else>
283 <div class="button-link col-6">
284 ${seoLink}
285 ${htmlUtil.unescape(cur_link.getData())}
286 </a>
287 </div>
288 </#if>
289 </#list>
290 </div>
291 </div>
292 </#if>
293 </div>
294 </div>
295 </div>
296 </div>
297 </div>
298 </div>
299 </div>
300 <#assign urlLogo = portalUtil.getPortalURL(request) + '/o/zurich-global-theme/images/logo-header.svg' >
301 <#assign urlImage = "" >
302 <#if image.src_image.getData()?? && image.src_image.getData() != "">
303 <#assign urlImage = image.src_image.getData()>
304 <#elseif image.getData()?? && image.getData() != "">
305 <#assign urlImage = portalUtil.getPortalURL(request) + image.getData()>
306 </#if>
307 <#assign nameSEO = htmlUtil.unescape(title.getData())>
308 <#assign descriptionSEO = description.getData()?keep_after("<p>")>
309 <#if (descriptionSEO?length > 139) >
310 <#assign descriptionSEO = descriptionSEO?substring(0,139) >
311 </#if>
312 <#assign descriptionSEO = zurichService.getParsedString(descriptionSEO)>
313
314 </div>
315 <#if modalPanelIndiceSuperior??>${modalPanelIndiceSuperior}</#if>
316 ${modalesRepetibles}
317
318<script>
319$(".sfModalButton a").on( "click", function(event) {
320 event.preventDefault();
321} );
322</script>
323<style>
324.noShadow img{
325 box-shadow:none!important;
326}
327
328@media (max-width: 767px) {
329 .mod.mod-Product .elements-block .element-description .row .button-link a {
330 width: 100%!important;
331 }
332}
333</style>
334<script>
335(function () {
336 let lastActivator = null; // Para devolver el foco al activador
337 let activeModal = null;
338
339 function ensureAccessibleAnchors() {
340 document.querySelectorAll('a[data-target^="#modal-"]').forEach(function (el) {
341 if (el.hasAttribute('href')) {
342 el.setAttribute('role', el.getAttribute('role') || 'button');
343 el.setAttribute('tabindex', el.getAttribute('tabindex') || '0');
344 const target = el.getAttribute('data-target');
345 if (target && document.querySelector(target)) {
346 el.setAttribute('aria-controls', target.slice(1));
347 }
348 }
349 });
350 }
351
352 function trapFocus(modalEl) {
353 const focusableSelectors = [
354 'a[href]', 'button:not([disabled])', 'textarea', 'input[type="text"]',
355 'input[type="radio"]', 'input[type="checkbox"]', 'select', '[tabindex]:not([tabindex="-1"])'
356 ];
357 const focusableEls = modalEl.querySelectorAll(focusableSelectors.join(','));
358 const firstEl = focusableEls[0];
359 const lastEl = focusableEls[focusableEls.length - 1];
360
361 modalEl.addEventListener('keydown', function (e) {
362 if (e.key === 'Tab') {
363 if (e.shiftKey) {
364 if (document.activeElement === firstEl) {
365 e.preventDefault();
366 lastEl.focus();
367 }
368 } else {
369 if (document.activeElement === lastEl) {
370 e.preventDefault();
371 firstEl.focus();
372 }
373 }
374 }
375 });
376 }
377
378 function showModal(selector) {
379 const modalEl = document.querySelector(selector);
380 if (!modalEl) return;
381
382 lastActivator = document.activeElement;
383 activeModal = modalEl;
384
385 // Fallback accesible
386 modalEl.style.display = 'block';
387 modalEl.removeAttribute('hidden');
388 modalEl.setAttribute('aria-hidden', 'false');
389 modalEl.setAttribute('aria-modal', 'true');
390 document.body.classList.add('modal-open');
391
392 trapFocus(modalEl);
393
394 const focusable = modalEl.querySelector('[autofocus]') || modalEl.querySelector('button, [tabindex]:not([tabindex="-1"])');
395 if (focusable) focusable.focus();
396
397 modalEl.addEventListener('click', function (e) {
398 if (e.target === modalEl) closeModal();
399 });
400
401 // Cierre con Esc
402 document.addEventListener('keydown', escHandler);
403 }
404
405 function escHandler(e) {
406 var isActivationKey = (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape');
407 if (isActivationKey && activeModal) {
408 e.preventDefault();
409 closeModal();
410 }
411 }
412
413 function closeModal() {
414 if (!activeModal) return;
415
416 activeModal.style.display = 'none';
417 activeModal.setAttribute('aria-hidden', 'true');
418 document.body.classList.remove('modal-open');
419
420 // Devuelve el foco al activador
421 if (lastActivator) lastActivator.focus();
422
423 activeModal = null;
424 document.removeEventListener('keydown', escHandler);
425 }
426
427 // Delegación click
428 document.addEventListener('click', function (event) {
429 const anchor = event.target.closest('a[data-target^="#modal-"]');
430 if (!anchor) return;
431 event.preventDefault();
432 const targetSelector = anchor.getAttribute('data-target');
433 if (!targetSelector) return;
434 showModal(targetSelector);
435 }, { passive: false });
436
437 // Delegación teclado
438 document.addEventListener('keydown', function (event) {
439 if (event.key !== 'Enter' && event.key !== ' ') return;
440 const anchor = event.target.closest('a[data-target^="#modal-"]');
441 if (!anchor) return;
442 event.preventDefault();
443 const targetSelector = anchor.getAttribute('data-target');
444 if (!targetSelector) return;
445 showModal(targetSelector);
446 }, { passive: false });
447
448 // ===== CIERRE por botón (fallback): data atributos comunes =====
449 document.addEventListener('click', function (event) {
450 const closeBtn = event.target.closest('[data-close-modal], [data-bs-dismiss="modal"], [data-dismiss="modal"]');
451 if (!closeBtn) return;
452
453 // Si estamos en fallback, cerramos y restauramos scroll nosotros.
454 if (activeModal) {
455 event.preventDefault();
456 closeModal();
457 }
458 // Si es Bootstrap, su propio handler cerrará el modal; nosotros restauramos en 'hidden.bs.modal'.
459 }, { passive: false });
460
461 if (document.readyState === 'loading') {
462 document.addEventListener('DOMContentLoaded', ensureAccessibleAnchors);
463 } else {
464 ensureAccessibleAnchors();
465 }
466})();
467</script>
468<style>
469@media (max-width: 767px) {
470 .mod.mod-Product .elements-block .element-block .row .button-link {
471 justify-content: center;
472 }
473}
474</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877400" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877400" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
7<#assign hasVideo = false>
8
9<#assign popupSF=false/>
10
11<#assign modalesRepetibles = "">
12<#assign isPhone = zurichService.getPhone()>
13<#assign fondo = "">
14<#if background.getData() == "mist">
15 <#assign fondo = "bruma">
16<#elseif background.getData() == "mist2">
17 <#assign fondo = "bruma2">
18<#elseif background.getData() == "lightblue">
19 <#assign fondo = "lightblue">
20<#elseif background.getData() == "sandstone">
21 <#assign fondo = "sandstone">
22</#if>
23<#assign fondoStyle = "">
24<#if fondohex?? && fondohex.getData() != "">
25 <#assign fondo = "">
26 <#assign fondoStyle = "background-color:${fondohex.getData()};">
27</#if>
28<#assign textStyleColor = "">
29<#if textColor?? && textColor.getData() != "">
30 <#if textColor.getData() == "blanco">
31 <#assign textStyleColor = "color:white;">
32 <#elseif textColor.getData() == "azul">
33 <#assign textStyleColor = "color:#23366f;">
34 </#if>
35</#if>
36<#assign fondoTexto = "">
37<#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
38 <#if text_background_color.getData() == "dove">
39 <#assign fondoTexto = "TextBruma">
40 <#elseif text_background_color.getData() == "white">
41 <#assign fondoTexto = "TextBlanco">
42 <#elseif text_background_color.getData() == "mist2">
43 <#assign fondoTexto = "Textbruma2">
44 <#elseif text_background_color.getData() == "lightblue">
45 <#assign fondoTexto = "Textlightblue">
46 <#elseif text_background_color.getData() == "sandstone">
47 <#assign fondoTexto = "Textsandstone">
48 </#if>
49</#if>
50<#if custom_top_margin?? && custom_top_margin.getData() != "">
51 <#assign custom_top_margin = custom_top_margin.getData() />
52<#else>
53 <#assign custom_top_margin = "15px" />
54</#if>
55<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
56 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
57<#else>
58 <#assign custom_bottom_margin = "15px" />
59</#if>
60<#if image_float.getData()?? && image_float.getData()?has_content>
61 <#if image_float.getData() == "right">
62 <#assign fondo = "">
63 <#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
64 <#if text_background_color.getData() == "dove">
65 <#assign fondo = "text1-background-dove">
66 <#elseif text_background_color.getData() == "mist2">
67 <#assign fondo = "text1-background-dove2">
68 <#elseif text_background_color.getData() == "white">
69 <#assign fondo = "text1-background-blanco">
70 <#elseif text_background_color.getData() == "sandstone">
71 <#assign fondo = "text1-background-sandstone">
72 <#elseif text_background_color.getData() == "lightblue">
73 <#assign fondo = "text1-background-lightblue">
74 </#if>
75 </#if>
76 <#assign fondoTexto = "">
77 <#if fondehex??>
78 <#if fondohex.getData()?? && fondohex.getData()?has_content>
79 <#if fondohex.getData() == "">
80 <#if background.getData() == "mist">
81 <#assign fondoTexto = "bruma">
82 <#elseif background.getData() == "mist2">
83 <#assign fondoTexto = "bruma2">
84 <#elseif background.getData() == "lightblue">
85 <#assign fondoTexto = "lightblue">
86 <#elseif background.getData() == "sandstone">
87 <#assign fondoTexto = "sandstone">
88 </#if>
89 </#if>
90 </#if>
91 <#else>
92
93 </#if>
94 </#if>
95<#else>
96</#if>
97<#assign noShadow=""/>
98<#if image_skin.getData()?? && image_skin.getData() !="">
99 <#if image_skin.getData() == "no-shadow">
100 <#assign noShadow="noShadow"/>
101 </#if>
102</#if>
103
104<#if isPhone=="tablet">
105<div class="mod mod-Product ${fondo} ${noShadow}" style="${fondoStyle} padding:0x;">
106<#else>
107<div class="mod mod-Product ${fondo} ${noShadow}" style="padding:0!important; ${fondoStyle}">
108</#if>
109 <div class="container" style="max-width: 100%;">
110 <#if image_float.getData()?? && image_float.getData()?has_content>
111 <#if image_float.getData() == "right">
112 <div class="row right">
113 <#else>
114 <div class="row left-image">
115 </#if>
116 <#else>
117 <div class="row left-image">
118 </#if>
119 <div class="elements-block">
120 <div class="element-block">
121 <#if image.VideoImagen??>
122 <#if image.VideoImagen.getData()?? && image.VideoImagen.getData()!="" >
123 <#assign modal = "">
124 <#assign modalPanel = "">
125 <#assign articleIdModal = "">
126 <#assign portletRequestModel = objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse) />
127 <#assign journalArticleModal = image.VideoImagen.getData()?eval/>
128 <#assign articleModal = journalArticleLocalService.fetchLatestArticle(journalArticleModal.classPK?number)/>
129 <#if articleModal?? && articleModal !="" && articleModal?has_content>
130 <#assign modal = journalArticleLocalService.getArticleContent(articleModal, articleModal.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), portletRequestModel, themeDisplay)>
131 <#assign articleIdModal = articleModal.getArticleId()>
132 <#assign modalPanelImage = zurichService.getModalImage(.vars['reserved-article-id'].data, articleIdModal)>
133 <#assign modalPanel = zurichService.getModal(modal,.vars['reserved-article-id'].data, articleIdModal)>
134 ${modalPanel}
135 <#assign hasVideo = true>
136 </#if>
137 </#if>
138 </#if>
139 <div class="row">
140 <div class="col-md-6 image">
141 <#if image_skin.getData()?? && image_skin.getData() != "">
142 <div style="width: 100%;">
143 </#if>
144 <#if image.src_image.getData()?? && image.src_image.getData() != "">
145 <#if isPhone=="tablet">
146 <img alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" style="padding-top:90px" width="100%" height="100%" loading="lazy"/>
147 <#else>
148 <img alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
149 </#if>
150 <#elseif image.getData()?? && image.getData() != "">
151 <#if isPhone=="tablet">
152 <img alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" style="padding-top=90px" width="100%" height="100%" loading="lazy"/>
153 <#else>
154 <img alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
155 </#if>
156 </#if>
157 <#if hasVideo >
158 <div class="modalVideo">
159 ${modalPanelImage}
160 </div>
161 </#if>
162 </div>
163 </div>
164 <div class="col-md-6 text ${fondoTexto}">
165 <div class="element-description ${(image_float.getData() == "right")?then('', 'offset-md-1 col-md-10')}">
166 <#if topic_link_text.getData()?? && topic_link_text.getData() != "">
167 <#if topic_link_text.topic_link_attr_key.getSiblings()?has_content>
168 <#list topic_link_text.topic_link_attr_key.getSiblings() as cur_extra_attribute_key>
169 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
170 <#if cur_extra_attribute_key?is_first>
171 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
172 <#else>
173 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
174 </#if>
175 </#if>
176 </#list>
177 </#if>
178 <#assign linkClass=""/>
179 <#if topic_link_text.EnlaceModalTopic??>
180 <#assign link_modalIndiceSuperior = topic_link_text.EnlaceModalTopic.getData() />
181 </#if>
182 <#assign modalIndiceSuperior = "">
183 <#assign modalPanelIndiceSuperior = "">
184 <#assign articleIdModalIndiceSuperior = "">
185 <#if link_modalIndiceSuperior?? && link_modalIndiceSuperior!="" >
186 <#assign journalArticleModalIndiceSuperior = link_modalIndiceSuperior?eval/>
187 <#assign articleModalIndiceSuperior = journalArticleLocalService.fetchLatestArticle(journalArticleModalIndiceSuperior.classPK?number)/>
188 <#assign modalIndiceSuperior = journalArticleLocalService.getArticleContent(articleModalIndiceSuperior, articleModalIndiceSuperior.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
189 <#assign articleIdModalIndiceSuperior = articleModalIndiceSuperior.getArticleId()>
190 <#assign modalPanelIndiceSuperior = zurichService.getModal(modalIndiceSuperior,.vars['reserved-article-id'].data, articleIdModalIndiceSuperior)>
191 </#if>
192 <#assign nofollow=topic_link_text.hasNofollow?? && getterUtil.getBoolean(topic_link_text.hasNofollow.getData())/>
193 <#assign seoLink_topic = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,topic_link_text.topic_link_title.getData(), topic_link_text.topic_link_page_link.getFriendlyUrl(),topic_link_text.topic_link_file_link.getData(), topic_link_text.topic_link_free_link.getData(),getterUtil.getBoolean(topic_link_text.topic_link_new_tab.getData()), linkClass, topic_link_text.topic_link_id_prefix.getData(), topic_link_text.topic_link_id.getData() , extraAttr, modalIndiceSuperior, articleIdModalIndiceSuperior, nofollow)/>
194 <div class="element-hashtag">
195 <#if seoLink_topic?? >
196 ${seoLink_topic}
197 ${topic_link_text.getData()}
198 </a>
199 </#if>
200 </div>
201 </#if>
202 <#if title.getData()?? && title.getData() != "">
203 <#assign title_level = "h2"/>
204 <#if title.title_level??>
205 <#if title.title_level.getData()?? && title.title_level.getData() != "">
206 <#assign title_level = title.title_level.getData()/>
207 </#if>
208 <#else>
209
210 </#if>
211 <div class="title">
212 <${title_level} class="h1-copycat" style="${textStyleColor}">${htmlUtil.unescape(title.getData())}</${title_level}>
213 </div>
214 </#if>
215 <#if subtitle.getData()?? && subtitle.getData() != "">
216 <div class="subtitle" style="${textStyleColor}">
217 ${htmlUtil.unescape(subtitle.getData())}
218 </div>
219 </#if>
220 <div class="description" style="${textStyleColor}">
221 <#if description.getData()?? && description.getData() != "">
222 ${description.getData()}
223 </#if>
224 </div>
225 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
226 <div class="row cta">
227 <#if links_align.getData()?? && links_align.getData()?has_content>
228 <div class="${links_align.getData()}">
229 <#else>
230 <div class="middle">
231 </#if>
232 <#list link_text.getSiblings() as cur_link>
233 <#if cur_link.modalSF??>
234 <#assign popupSF=getterUtil.getBoolean(cur_link.modalSF.getData ())/>
235 </#if>
236 <#if cur_link.link_attr_key.getSiblings()?has_content>
237 <#list cur_link.link_attr_key.getSiblings() as cur_extra_attribute_key>
238 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
239 <#if cur_extra_attribute_key?is_first>
240 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_value.getData()}"/>
241 <#else>
242 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_key.getData()}"/>
243 </#if>
244 </#if>
245 </#list>
246 </#if>
247 <#assign linkClass="btn btn-lg ${aparienciaCTA(cur_link.link_skin.getData(),'btn-secondary')}"/>
248
249 <#if cur_link.EnlaceModal??>
250 <#assign link_modalElementoRepetible = cur_link.EnlaceModal.getData() />
251 </#if>
252 <#assign modalElementoRepetible = "">
253 <#assign modalPanelElementoRepetible = "">
254 <#assign articleIdModalElementoRepetible = "">
255 <#if link_modalElementoRepetible?? && link_modalElementoRepetible!="" >
256 <#assign journalArticleModalElementoRepetible = link_modalElementoRepetible?eval/>
257 <#assign articleModalElementoRepetible = journalArticleLocalService.fetchLatestArticle(journalArticleModalElementoRepetible.classPK?number)/>
258 <#assign modalElementoRepetible = journalArticleLocalService.getArticleContent(articleModalElementoRepetible, articleModalElementoRepetible.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
259 <#assign articleIdModalElementoRepetible = articleModalElementoRepetible.getArticleId()>
260 <#assign modalPanelElementoRepetible = zurichService.getModal(modalElementoRepetible,.vars['reserved-article-id'].data, articleIdModalElementoRepetible)>
261 <#assign modalesRepetibles = modalesRepetibles + modalPanelElementoRepetible>
262 </#if>
263 <#assign nofollow2=cur_link.hasNofollow2?? && getterUtil.getBoolean(cur_link.hasNofollow2.getData())/>
264 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link.link_title.getData(), cur_link.link_page_link.getFriendlyUrl(),cur_link.link_file_link.getData(), cur_link.link_free_link.getData(),getterUtil.getBoolean(cur_link.link_new_tab.getData()), linkClass, cur_link.link_id_prefix.getData(), cur_link.link_id.getData(),extraAttr, modalElementoRepetible, articleIdModalElementoRepetible, nofollow2)/>
265 <#if cur_link.modalRCP_2?? && cur_link.modalRCP_2.getData() != "">
266 <div class="button-link col-6 sfModalButton" onclick="openModalRCP${cur_link.modalRCP_2.getData()}()">
267 ${seoLink}
268 ${htmlUtil.unescape(cur_link.getData())}
269 </a>
270 </div>
271 <#elseif popupSF==true>
272 <#if cur_link.productSelectModal?? && cur_link.productSelectModal.getData() != "">
273 <#assign linkProduct="${cur_link.productSelectModal.getData()}"/>
274 <#else>
275 <#assign linkProduct="nada"/>
276 </#if>
277 <div class="button-link col-6 sfModalButton" onclick="openSfModal('${linkProduct}')">
278 ${seoLink}
279 ${htmlUtil.unescape(cur_link.getData())}
280 </a>
281 </div>
282 <#else>
283 <div class="button-link col-6">
284 ${seoLink}
285 ${htmlUtil.unescape(cur_link.getData())}
286 </a>
287 </div>
288 </#if>
289 </#list>
290 </div>
291 </div>
292 </#if>
293 </div>
294 </div>
295 </div>
296 </div>
297 </div>
298 </div>
299 </div>
300 <#assign urlLogo = portalUtil.getPortalURL(request) + '/o/zurich-global-theme/images/logo-header.svg' >
301 <#assign urlImage = "" >
302 <#if image.src_image.getData()?? && image.src_image.getData() != "">
303 <#assign urlImage = image.src_image.getData()>
304 <#elseif image.getData()?? && image.getData() != "">
305 <#assign urlImage = portalUtil.getPortalURL(request) + image.getData()>
306 </#if>
307 <#assign nameSEO = htmlUtil.unescape(title.getData())>
308 <#assign descriptionSEO = description.getData()?keep_after("<p>")>
309 <#if (descriptionSEO?length > 139) >
310 <#assign descriptionSEO = descriptionSEO?substring(0,139) >
311 </#if>
312 <#assign descriptionSEO = zurichService.getParsedString(descriptionSEO)>
313
314 </div>
315 <#if modalPanelIndiceSuperior??>${modalPanelIndiceSuperior}</#if>
316 ${modalesRepetibles}
317
318<script>
319$(".sfModalButton a").on( "click", function(event) {
320 event.preventDefault();
321} );
322</script>
323<style>
324.noShadow img{
325 box-shadow:none!important;
326}
327
328@media (max-width: 767px) {
329 .mod.mod-Product .elements-block .element-description .row .button-link a {
330 width: 100%!important;
331 }
332}
333</style>
334<script>
335(function () {
336 let lastActivator = null; // Para devolver el foco al activador
337 let activeModal = null;
338
339 function ensureAccessibleAnchors() {
340 document.querySelectorAll('a[data-target^="#modal-"]').forEach(function (el) {
341 if (el.hasAttribute('href')) {
342 el.setAttribute('role', el.getAttribute('role') || 'button');
343 el.setAttribute('tabindex', el.getAttribute('tabindex') || '0');
344 const target = el.getAttribute('data-target');
345 if (target && document.querySelector(target)) {
346 el.setAttribute('aria-controls', target.slice(1));
347 }
348 }
349 });
350 }
351
352 function trapFocus(modalEl) {
353 const focusableSelectors = [
354 'a[href]', 'button:not([disabled])', 'textarea', 'input[type="text"]',
355 'input[type="radio"]', 'input[type="checkbox"]', 'select', '[tabindex]:not([tabindex="-1"])'
356 ];
357 const focusableEls = modalEl.querySelectorAll(focusableSelectors.join(','));
358 const firstEl = focusableEls[0];
359 const lastEl = focusableEls[focusableEls.length - 1];
360
361 modalEl.addEventListener('keydown', function (e) {
362 if (e.key === 'Tab') {
363 if (e.shiftKey) {
364 if (document.activeElement === firstEl) {
365 e.preventDefault();
366 lastEl.focus();
367 }
368 } else {
369 if (document.activeElement === lastEl) {
370 e.preventDefault();
371 firstEl.focus();
372 }
373 }
374 }
375 });
376 }
377
378 function showModal(selector) {
379 const modalEl = document.querySelector(selector);
380 if (!modalEl) return;
381
382 lastActivator = document.activeElement;
383 activeModal = modalEl;
384
385 // Fallback accesible
386 modalEl.style.display = 'block';
387 modalEl.removeAttribute('hidden');
388 modalEl.setAttribute('aria-hidden', 'false');
389 modalEl.setAttribute('aria-modal', 'true');
390 document.body.classList.add('modal-open');
391
392 trapFocus(modalEl);
393
394 const focusable = modalEl.querySelector('[autofocus]') || modalEl.querySelector('button, [tabindex]:not([tabindex="-1"])');
395 if (focusable) focusable.focus();
396
397 modalEl.addEventListener('click', function (e) {
398 if (e.target === modalEl) closeModal();
399 });
400
401 // Cierre con Esc
402 document.addEventListener('keydown', escHandler);
403 }
404
405 function escHandler(e) {
406 var isActivationKey = (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape');
407 if (isActivationKey && activeModal) {
408 e.preventDefault();
409 closeModal();
410 }
411 }
412
413 function closeModal() {
414 if (!activeModal) return;
415
416 activeModal.style.display = 'none';
417 activeModal.setAttribute('aria-hidden', 'true');
418 document.body.classList.remove('modal-open');
419
420 // Devuelve el foco al activador
421 if (lastActivator) lastActivator.focus();
422
423 activeModal = null;
424 document.removeEventListener('keydown', escHandler);
425 }
426
427 // Delegación click
428 document.addEventListener('click', function (event) {
429 const anchor = event.target.closest('a[data-target^="#modal-"]');
430 if (!anchor) return;
431 event.preventDefault();
432 const targetSelector = anchor.getAttribute('data-target');
433 if (!targetSelector) return;
434 showModal(targetSelector);
435 }, { passive: false });
436
437 // Delegación teclado
438 document.addEventListener('keydown', function (event) {
439 if (event.key !== 'Enter' && event.key !== ' ') return;
440 const anchor = event.target.closest('a[data-target^="#modal-"]');
441 if (!anchor) return;
442 event.preventDefault();
443 const targetSelector = anchor.getAttribute('data-target');
444 if (!targetSelector) return;
445 showModal(targetSelector);
446 }, { passive: false });
447
448 // ===== CIERRE por botón (fallback): data atributos comunes =====
449 document.addEventListener('click', function (event) {
450 const closeBtn = event.target.closest('[data-close-modal], [data-bs-dismiss="modal"], [data-dismiss="modal"]');
451 if (!closeBtn) return;
452
453 // Si estamos en fallback, cerramos y restauramos scroll nosotros.
454 if (activeModal) {
455 event.preventDefault();
456 closeModal();
457 }
458 // Si es Bootstrap, su propio handler cerrará el modal; nosotros restauramos en 'hidden.bs.modal'.
459 }, { passive: false });
460
461 if (document.readyState === 'loading') {
462 document.addEventListener('DOMContentLoaded', ensureAccessibleAnchors);
463 } else {
464 ensureAccessibleAnchors();
465 }
466})();
467</script>
468<style>
469@media (max-width: 767px) {
470 .mod.mod-Product .elements-block .element-block .row .button-link {
471 justify-content: center;
472 }
473}
474</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#877396" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#877396" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6
7<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
8<#assign hasVideo = false>
9<#assign modalesRepetibles = "">
10<#assign isPhone = zurichService.getPhone()>
11<#assign idAnchor = "">
12<#if html_id?has_content>
13 <#assign idAnchor = html_id.getData()>
14</#if>
15<#assign fondo = "">
16
17<#assign popupSF=false/>
18
19<#if background.getData() == "mist">
20 <#assign fondo = "bruma">
21<#elseif background.getData() == "mist2">
22 <#assign fondo = "bruma2">
23<#elseif background.getData() == "lightblue">
24 <#assign fondo = "lightblue">
25<#elseif background.getData() == "sandstone">
26 <#assign fondo = "sandstone">
27</#if>
28
29<#assign fondoStyle = "">
30<#if fondohex?? && fondohex.getData() != "">
31 <#assign fondo = "">
32 <#assign fondoStyle = "background-color:${fondohex.getData()};">
33</#if>
34
35<#assign textStyleColor = "">
36<#if textColor?? && textColor.getData() != "">
37 <#if textColor.getData() == "blanco">
38 <#assign textStyleColor = "color:white;">
39 <#elseif textColor.getData() == "azul">
40 <#assign textStyleColor = "color:#23366f;">
41 </#if>
42</#if>
43
44<#assign fondoTexto = "">
45<#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
46 <#if text_background_color.getData() == "dove">
47 <#assign fondoTexto = "TextBruma">
48 <#elseif text_background_color.getData() == "white">
49 <#assign fondoTexto = "TextBlanco">
50 <#elseif text_background_color.getData() == "mist2">
51 <#assign fondoTexto = "Textbruma2">
52 <#elseif text_background_color.getData() == "lightblue">
53 <#assign fondoTexto = "Textlightblue">
54 <#elseif text_background_color.getData() == "sandstone">
55 <#assign fondoTexto = "Textsandstone">
56 </#if>
57</#if>
58
59<#if custom_top_margin?? && custom_top_margin.getData() != "">
60 <#assign custom_top_margin = custom_top_margin.getData() />
61<#else>
62 <#assign custom_top_margin = "15px" />
63</#if>
64<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
65 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
66<#else>
67 <#assign custom_bottom_margin = "15px" />
68</#if>
69<#if image_float.getData()?? && image_float.getData()?has_content>
70 <#if image_float.getData() == "right">
71 <#assign fondo = "">
72 <#if text_background_color?? && text_background_color.getData() != "" && fondohex.getData() == "">
73 <#if text_background_color.getData() == "dove">
74 <#assign fondo = "text1-background-dove">
75 <#elseif text_background_color.getData() == "mist2">
76 <#assign fondo = "text1-background-dove2">
77 <#elseif text_background_color.getData() == "white">
78 <#assign fondo = "text1-background-blanco">
79 <#elseif text_background_color.getData() == "sandstone">
80 <#assign fondo = "text1-background-sandstone">
81 <#elseif text_background_color.getData() == "lightblue">
82 <#assign fondo = "text1-background-lightblue">
83 </#if>
84 </#if>
85 <#assign fondoTexto = "">
86 <#if fondohex.getData() == "">
87 <#if background.getData() == "mist">
88 <#assign fondoTexto = "bruma">
89 <#elseif background.getData() == "mist2">
90 <#assign fondoTexto = "bruma2">
91 <#elseif background.getData() == "lightblue">
92 <#assign fondoTexto = "lightblue">
93 <#elseif background.getData() == "sandstone">
94 <#assign fondoTexto = "sandstone">
95 </#if>
96 </#if>
97 </#if>
98<#else>
99</#if>
100<#assign noShadow=""/>
101<#if image_skin.getData()?? && image_skin.getData() !="">
102 <#if image_skin.getData() == "no-shadow">
103 <#assign noShadow="noShadow"/>
104 </#if>
105</#if>
106
107<#if isPhone=="tablet">
108<div id ="${idAnchor}" class="mod mod-Product ${fondo} Highlight_1 ${noShadow}" style="${fondoStyle} padding-bottom:130px; padding-top:130px;">
109<#else>
110<div id="${idAnchor}" class="mod mod-Product ${fondo} Highlight_1 ${noShadow}" style="padding:0px!important; ${fondoStyle}">
111</#if>
112
113 <div class="container" style="max-width: 100%;">
114 <#if image_float.getData()?? && image_float.getData()?has_content>
115 <#if image_float.getData() == "right">
116 <div class="row right">
117 <#else>
118 <div class="row left-image">
119 </#if>
120 <#else>
121 <div class="row left-image">
122 </#if>
123 <div class="elements-block">
124 <div class="element-block">
125
126 <#if image.VideoImagen??>
127 <#if image.VideoImagen.getData()?? && image.VideoImagen.getData()!="" >
128 <#assign modal = "">
129 <#assign modalPanel = "">
130 <#assign articleIdModal = "">
131 <#assign portletRequestModel = objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse) />
132 <#assign journalArticleModal = image.VideoImagen.getData()?eval/>
133 <#assign articleModal = journalArticleLocalService.fetchLatestArticle(journalArticleModal.classPK?number)/>
134 <#if articleModal?? && articleModal !="" && articleModal?has_content>
135 <#assign modal = journalArticleLocalService.getArticleContent(articleModal, articleModal.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), portletRequestModel, themeDisplay)>
136 <#assign articleIdModal = articleModal.getArticleId()>
137 <#assign modalPanelImage = zurichService.getModalImage(.vars['reserved-article-id'].data, articleIdModal)>
138 <#assign modalPanel = zurichService.getModal(modal,.vars['reserved-article-id'].data, articleIdModal)>
139 ${modalPanel}
140 <#assign hasVideo = true>
141 </#if>
142 </#if>
143 </#if>
144
145 <div class="row">
146 <div class="col-md-6 image">
147 <#if image_skin.getData()?? && image_skin.getData() != "">
148 <div style="width: 100%;height: 100%;">
149 </#if>
150 <#if image.src_image.getData()?? && image.src_image.getData() != "">
151 <#if isPhone=="tablet">
152 <img style="height: 100%;" alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" style="padding-top:90px"/>
153 <#else>
154 <img style="height: 100%;" alt="${image.alt_image.getData()}" src="${image.src_image.getData()}" class="img-responsive" />
155 </#if>
156
157 <#elseif image.getData()?? && image.getData() != "">
158 <#if isPhone=="tablet">
159 <img style="height: 100%;" alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" style="padding-top=90px"/>
160 <#else>
161 <img style="height: 100%;" alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" />
162 </#if>
163
164 </#if>
165 <#if hasVideo >
166 <div class="modalVideo">
167 ${modalPanelImage}
168 </div>
169 </#if>
170 </div>
171 </div>
172 <div class="col-md-6 text ${fondoTexto}">
173 <div class="element-description ${(image_float.getData() == "right")?then('', 'offset-md-1 col-md-10')}">
174 <#if topic_link_text.getData()?? && topic_link_text.getData() != "">
175 <#if topic_link_text.topic_link_attr_key.getSiblings()?has_content>
176 <#list topic_link_text.topic_link_attr_key.getSiblings() as cur_extra_attribute_key>
177 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
178 <#if cur_extra_attribute_key?is_first>
179 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
180 <#else>
181 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_value.getData()}"/>
182 </#if>
183 </#if>
184 </#list>
185 </#if>
186 <#assign linkClass=""/>
187
188 <#if topic_link_text.EnlaceModalTopic??>
189 <#assign link_modalIndiceSuperior = topic_link_text.EnlaceModalTopic.getData() />
190 </#if>
191 <#assign modalIndiceSuperior = "">
192 <#assign modalPanelIndiceSuperior = "">
193 <#assign articleIdModalIndiceSuperior = "">
194 <#if link_modalIndiceSuperior?? && link_modalIndiceSuperior!="" >
195 <#assign journalArticleModalIndiceSuperior = link_modalIndiceSuperior?eval/>
196 <#assign articleModalIndiceSuperior = journalArticleLocalService.fetchLatestArticle(journalArticleModalIndiceSuperior.classPK?number)/>
197 <#assign modalIndiceSuperior = journalArticleLocalService.getArticleContent(articleModalIndiceSuperior, articleModalIndiceSuperior.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
198 <#assign articleIdModalIndiceSuperior = articleModalIndiceSuperior.getArticleId()>
199 <#assign modalPanelIndiceSuperior = zurichService.getModal(modalIndiceSuperior,.vars['reserved-article-id'].data, articleIdModalIndiceSuperior)>
200 </#if>
201
202 <#assign nofollow=topic_link_text.hasNofollow?? && getterUtil.getBoolean(topic_link_text.hasNofollow.getData())/>
203 <#assign seoLink_topic = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,topic_link_text.topic_link_title.getData(), topic_link_text.topic_link_page_link.getFriendlyUrl(),topic_link_text.topic_link_file_link.getData(), topic_link_text.topic_link_free_link.getData(),getterUtil.getBoolean(topic_link_text.topic_link_new_tab.getData()), linkClass, topic_link_text.topic_link_id_prefix.getData(), topic_link_text.topic_link_id.getData() , extraAttr, modalIndiceSuperior, articleIdModalIndiceSuperior, nofollow)/>
204
205 <div class="element-hashtag">
206 <#if seoLink_topic?? >
207 ${seoLink_topic}
208 ${htmlUtil.unescape(topic_link_text.getData())}
209 </a>
210 </#if>
211 </div>
212
213 </#if>
214 <#if title.getData()?? && title.getData() != "">
215 <#assign title_level = "h2"/>
216 <#if title.title_level.getData()?? && title.title_level.getData() != "">
217 <#assign title_level = title.title_level.getData()/>
218 </#if>
219 <div class="title">
220 <${title_level} class="h1-copycat" style="${textStyleColor}">${htmlUtil.unescape(title.getData())}</${title_level}>
221 </div>
222 </#if>
223 <#if subtitle.getData()?? && subtitle.getData() != "">
224 <div class="subtitle" style="${textStyleColor}">
225 ${htmlUtil.unescape(subtitle.getData())}
226 </div>
227 </#if>
228 <div class="description" style="${textStyleColor}">
229 <#if description.getData()?? && description.getData() != "">
230 ${description.getData()}
231 </#if>
232 </div>
233 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
234 <div class="row cta">
235 <#if links_align.getData()?? && links_align.getData()?has_content>
236 <div class="${links_align.getData()}">
237 <#else>
238 <div class="middle">
239 </#if>
240 <#list link_text.getSiblings() as cur_link>
241
242 <#if cur_link.modalSF??>
243 <#assign popupSF=getterUtil.getBoolean(cur_link.modalSF.getData())/>
244 </#if>
245
246 <#if cur_link.link_attr_key.getSiblings()?has_content>
247 <#list cur_link.link_attr_key.getSiblings() as cur_extra_attribute_key>
248 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
249 <#if cur_extra_attribute_key?is_first>
250 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_value.getData()}"/>
251 <#else>
252 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_key.getData()}"/>
253 </#if>
254 </#if>
255 </#list>
256 </#if>
257 <#assign linkClass="btn btn-lg ${aparienciaCTA(cur_link.link_skin.getData(),'btn-secondary')} arbol"/>
258
259
260 <#if cur_link.EnlaceModal??>
261 <#assign link_modalElementoRepetible = cur_link.EnlaceModal.getData() />
262 </#if>
263 <#assign modalElementoRepetible = "">
264 <#assign modalPanelElementoRepetible = "">
265 <#assign articleIdModalElementoRepetible = "">
266 <#if link_modalElementoRepetible?? && link_modalElementoRepetible!="" >
267 <#assign journalArticleModalElementoRepetible = link_modalElementoRepetible?eval/>
268 <#assign articleModalElementoRepetible = journalArticleLocalService.fetchLatestArticle(journalArticleModalElementoRepetible.classPK?number)/>
269 <#assign modalElementoRepetible = journalArticleLocalService.getArticleContent(articleModalElementoRepetible, articleModalElementoRepetible.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
270 <#assign articleIdModalElementoRepetible = articleModalElementoRepetible.getArticleId()>
271 <#assign modalPanelElementoRepetible = zurichService.getModal(modalElementoRepetible,.vars['reserved-article-id'].data, articleIdModalElementoRepetible)>
272 <#assign modalesRepetibles = modalesRepetibles + modalPanelElementoRepetible>
273 </#if>
274
275 <#assign nofollow2=cur_link.hasNofollow2?? && getterUtil.getBoolean(cur_link.hasNofollow2.getData())/>
276 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link.link_title.getData(), cur_link.link_page_link.getFriendlyUrl(),cur_link.link_file_link.getData(), cur_link.link_free_link.getData(),getterUtil.getBoolean(cur_link.link_new_tab.getData()), linkClass, cur_link.link_id_prefix.getData(), cur_link.link_id.getData(),extraAttr, modalElementoRepetible, articleIdModalElementoRepetible, nofollow2)/>
277
278 <#if cur_link.modalRCP_2?? && cur_link.modalRCP_2.getData() != "">
279 <div class="button-link col-6 sfModalButton" onclick="openModalRCP${cur_link.modalRCP.getData()}()">
280 ${seoLink}
281 ${htmlUtil.unescape(cur_link.getData())}
282 </a>
283 </div>
284 <#elseif popupSF==true>
285 <#if cur_link.productSelectModal?? && cur_link.productSelectModal.getData() != "">
286 <#assign linkProduct="${cur_link.productSelectModal.getData()}"/>
287 <#else>
288 <#assign linkProduct="nada"/>
289 </#if>
290 <div class="button-link col-6 sfModalButton" onclick="openSfModal('${linkProduct}')">
291 ${seoLink}
292 ${htmlUtil.unescape(cur_link.getData())}
293 </a>
294 </div>
295 <#else>
296 <div class="button-link col-6">
297 ${seoLink}
298 ${htmlUtil.unescape(cur_link.getData())}
299 </a>
300 </div>
301 </#if>
302 </#list>
303 </div>
304 </div>
305 </#if>
306 </div>
307 </div>
308 </div>
309 </div>
310 </div>
311 </div>
312 </div>
313 <#assign urlLogo = portalUtil.getPortalURL(request) + '/o/zurich-global-theme/images/logo-header.svg' >
314
315 <#assign urlImage = "" >
316 <#if image.src_image.getData()?? && image.src_image.getData() != "">
317 <#assign urlImage = image.src_image.getData()>
318 <#elseif image.getData()?? && image.getData() != "">
319 <#assign urlImage = portalUtil.getPortalURL(request) + image.getData()>
320 </#if>
321 <#assign nameSEO = htmlUtil.unescape(title.getData())>
322 <#assign descriptionSEO = description.getData()?keep_after("<p>")>
323 <#if (descriptionSEO?length > 139) >
324 <#assign descriptionSEO = descriptionSEO?substring(0,139) >
325 </#if>
326
327 <#assign descriptionSEO = zurichService.getParsedString(descriptionSEO)>
328
329
330 </div>
331
332 <#if modalPanelIndiceSuperior??>${modalPanelIndiceSuperior}</#if>
333 ${modalesRepetibles}
334
335 <script>
336 if(window.location.href === "https://corporativo.uat-zurich.es/" || window.location.href === "https://www.zurich.es/"){
337 $(".arbol").click(function(e) {
338 e.preventDefault();
339 window.location.href=$(this).attr('href');
340 });
341 }
342 </script>
343
344 <style>
345 @media(min-width:769px){
346 .row.left-image{
347 padding-left:12px;
348 }
349 .row.left-image .col-md-6.image{
350 padding-right:6px;
351 }
352 }
353
354</style>
355<script>
356$(".sfModalButton a").on( "click", function(event) {
357 event.preventDefault();
358} );
359</script>
360
361<style>
362.noShadow img{
363 box-shadow:none!important;
364}
365
366@media (max-width: 767px) {
367 .mod.mod-Product .elements-block .element-description .row .button-link a {
368 width: 100%!important;
369 }
370}
371</style>
372<script>
373(function () {
374 let lastActivator = null; // Para devolver el foco al activador
375 let activeModal = null;
376
377 function ensureAccessibleAnchors() {
378 document.querySelectorAll('a[data-target^="#modal-"]').forEach(function (el) {
379 if (el.hasAttribute('href')) {
380 el.setAttribute('role', el.getAttribute('role') || 'button');
381 el.setAttribute('tabindex', el.getAttribute('tabindex') || '0');
382 const target = el.getAttribute('data-target');
383 if (target && document.querySelector(target)) {
384 el.setAttribute('aria-controls', target.slice(1));
385 }
386 }
387 });
388 }
389
390 function trapFocus(modalEl) {
391 const focusableSelectors = [
392 'a[href]', 'button:not([disabled])', 'textarea', 'input[type="text"]',
393 'input[type="radio"]', 'input[type="checkbox"]', 'select', '[tabindex]:not([tabindex="-1"])'
394 ];
395 const focusableEls = modalEl.querySelectorAll(focusableSelectors.join(','));
396 const firstEl = focusableEls[0];
397 const lastEl = focusableEls[focusableEls.length - 1];
398
399 modalEl.addEventListener('keydown', function (e) {
400 if (e.key === 'Tab') {
401 if (e.shiftKey) {
402 if (document.activeElement === firstEl) {
403 e.preventDefault();
404 lastEl.focus();
405 }
406 } else {
407 if (document.activeElement === lastEl) {
408 e.preventDefault();
409 firstEl.focus();
410 }
411 }
412 }
413 });
414 }
415
416 function showModal(selector) {
417 const modalEl = document.querySelector(selector);
418 if (!modalEl) return;
419
420 lastActivator = document.activeElement;
421 activeModal = modalEl;
422
423 // Fallback accesible
424 modalEl.style.display = 'block';
425 modalEl.removeAttribute('hidden');
426 modalEl.setAttribute('aria-hidden', 'false');
427 modalEl.setAttribute('aria-modal', 'true');
428 document.body.classList.add('modal-open');
429
430 trapFocus(modalEl);
431
432 const focusable = modalEl.querySelector('[autofocus]') || modalEl.querySelector('button, [tabindex]:not([tabindex="-1"])');
433 if (focusable) focusable.focus();
434
435 modalEl.addEventListener('click', function (e) {
436 if (e.target === modalEl) closeModal();
437 });
438
439 // Cierre con Esc
440 document.addEventListener('keydown', escHandler);
441 }
442
443 function escHandler(e) {
444 var isActivationKey = (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape');
445 if (isActivationKey && activeModal) {
446 e.preventDefault();
447 closeModal();
448 }
449 }
450
451 function closeModal() {
452 if (!activeModal) return;
453
454 activeModal.style.display = 'none';
455 activeModal.setAttribute('aria-hidden', 'true');
456 document.body.classList.remove('modal-open');
457
458 // Devuelve el foco al activador
459 if (lastActivator) lastActivator.focus();
460
461 activeModal = null;
462 document.removeEventListener('keydown', escHandler);
463 }
464
465 // Delegación click
466 document.addEventListener('click', function (event) {
467 const anchor = event.target.closest('a[data-target^="#modal-"]');
468 if (!anchor) return;
469 event.preventDefault();
470 const targetSelector = anchor.getAttribute('data-target');
471 if (!targetSelector) return;
472 showModal(targetSelector);
473 }, { passive: false });
474
475 // Delegación teclado
476 document.addEventListener('keydown', function (event) {
477 if (event.key !== 'Enter' && event.key !== ' ') return;
478 const anchor = event.target.closest('a[data-target^="#modal-"]');
479 if (!anchor) return;
480 event.preventDefault();
481 const targetSelector = anchor.getAttribute('data-target');
482 if (!targetSelector) return;
483 showModal(targetSelector);
484 }, { passive: false });
485
486 // ===== CIERRE por botón (fallback): data atributos comunes =====
487 document.addEventListener('click', function (event) {
488 const closeBtn = event.target.closest('[data-close-modal], [data-bs-dismiss="modal"], [data-dismiss="modal"]');
489 if (!closeBtn) return;
490
491 // Si estamos en fallback, cerramos y restauramos scroll nosotros.
492 if (activeModal) {
493 event.preventDefault();
494 closeModal();
495 }
496 // Si es Bootstrap, su propio handler cerrará el modal; nosotros restauramos en 'hidden.bs.modal'.
497 }, { passive: false });
498
499 if (document.readyState === 'loading') {
500 document.addEventListener('DOMContentLoaded', ensureAccessibleAnchors);
501 } else {
502 ensureAccessibleAnchors();
503 }
504})();
505</script>
506
507<style>
508@media (max-width: 767px) {
509 .mod.mod-Product .elements-block .element-block .row .button-link {
510 justify-content: center;
511 }
512}
513</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.zurich.tools.util.ZurichToolsService") [in template "20115#20151#328918638" at line 5, column 26]
----
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 zurichService = serviceLocato... [in template "20115#20151#328918638" at line 5, column 1]
----
1<#-- Importar la plantilla con las MACROS comunes para utilizar -->
2<#-- Se debe modificar por SITE y por Entorno (Local, PRE y PROD) -->
3<#include "${templatesPath}/337115551" />
4
5<#assign zurichService = serviceLocator.findService("com.zurich.tools.util.ZurichToolsService")/>
6<#assign isPhone = zurichService.getPhone()>
7
8<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
9
10<#assign fondo = "#ffffff">
11<#if background?? && background.getData()!="">
12 <#assign fondo = background.getData()>
13</#if>
14
15<#assign popupSF=false/>
16
17<#assign textColor = "dark-blue">
18<#if text_color?? && text_color.getData()!="">
19 <#assign textColor = text_color.getData()>
20</#if>
21<#if custom_top_margin?? && custom_top_margin.getData() != "">
22 <#assign custom_top_margin = custom_top_margin.getData() />
23<#else>
24 <#assign custom_top_margin = "" />
25</#if>
26
27<#if custom_bottom_margin?? && custom_bottom_margin.getData() != "">
28 <#assign custom_bottom_margin = custom_bottom_margin.getData() />
29<#else>
30 <#assign custom_bottom_margin = "" />
31</#if>
32<div class="mod mod-Product highlight-figure" style="background-color:${fondo}; padding-bottom:${custom_bottom_margin}; padding-top:${custom_top_margin};">
33 <div class="container">
34 <#if image_float.getData()?? && image_float.getData()?has_content>
35 <#if image_float.getData() == "right">
36 <div class="row right">
37 <#else>
38 <div class="row">
39 </#if>
40 <#else>
41 <div class="row">
42 </#if>
43 <div class="elements-block">
44 <div class="element-block">
45 <div class="row">
46 <div class="col-md-4 image">
47 <#if image.getData()?? && image.getData() != "">
48 <div class="image-border">
49 <img alt="${image.getAttribute("alt")}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" class="img-responsive" width="100%" height="100%" loading="lazy"/>
50 </div>
51 </#if>
52 </div>
53 <#-- PL-1023 hide text when is empty -->
54 <#assign isEmpty = "" />
55 <#assign textMargin = "" />
56 <#if isPhone == "mobile">
57 <#if title.getData() == "" && description.getData() == "" && link_text.getData() == "">
58 <#assign isEmpty = "hide" />
59 <#elseif title.getData() == "" || description.getData() == "">
60 <#assign textMargin = 'style="margin-bottom:0px;margin-top:0px"' />
61 </#if>
62 </#if>
63 <#-- -->
64 <div class="col-md-8 text text-color__${textColor} ${isEmpty}" ${textMargin}>
65 <div class="element-description">
66
67 <#if title.getData()?? && title.getData() != "">
68 <div class="title">
69 <${title.title_level.getData()} class="h1-copycat">${htmlUtil.unescape(title.getData())}</${title.title_level.getData()}>
70 </div>
71 </#if>
72 <div class="description">
73 <#if description.getData()?? && description.getData() != "">
74 ${description.getData()}
75 </#if>
76 </div>
77 <div class="row cta">
78 <#if links_align.getData()?? && links_align.getData()?has_content>
79 <div class="${links_align.getData()}">
80 <#else>
81 <div class="middle">
82 </#if>
83 <div class="button-link">
84 <a class="btn btn-lg btn-secondary-alternate" id="mdFormButton" onclick="KAMPYLE_ONSITE_SDK.showForm(28924);">Opina aquí</a>
85 </div>
86 <#if link_text.getSiblings()?has_content && (link_text.getData()?? && link_text.getData() != "")>
87
88
89
90 <#list link_text.getSiblings() as cur_link>
91 <#if cur_link.modalSF??>
92 <#assign popupSF=getterUtil.getBoolean(cur_link.modalSF.getData())/>
93 </#if>
94 <#if cur_link.link_attr_key.getSiblings()?has_content>
95 <#list cur_link.link_attr_key.getSiblings() as cur_extra_attribute_key>
96 <#if cur_extra_attribute_key.getData()?? && cur_extra_attribute_key.getData()!="">
97 <#if cur_extra_attribute_key?is_first>
98 <#assign extraAttr="${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.spec_link_attr_value.getData()}"/>
99 <#else>
100 <#assign extraAttr="${extraAttr} | ${cur_extra_attribute_key.getData()} / ${cur_extra_attribute_key.link_attr_key.getData()}"/>
101 </#if>
102 </#if>
103 </#list>
104 </#if>
105 <#assign linkClass="btn btn-lg ${aparienciaCTA(cur_link.link_skin.getData(),'btn-primary')}"/>
106
107
108 <#if cur_link.EnlaceModal??>
109 <#assign link_modalElementoRepetible = cur_link.EnlaceModal.getData() />
110 </#if>
111 <#assign modalElementoRepetible = "">
112 <#assign modalPanelElementoRepetible = "">
113 <#assign articleIdModalElementoRepetible = "">
114 <#if link_modalElementoRepetible?? && link_modalElementoRepetible!="" >
115 <#assign journalArticleModalElementoRepetible = link_modalElementoRepetible?eval/>
116 <#assign articleModalElementoRepetible = journalArticleLocalService.fetchLatestArticle(journalArticleModalElementoRepetible.classPK?number)/>
117 <#assign modalElementoRepetible = journalArticleLocalService.getArticleContent(articleModalElementoRepetible, articleModalElementoRepetible.getDDMTemplateKey(), "VIEW", themeDisplay.getLocale(), themeDisplay)>
118 <#assign articleIdModalElementoRepetible = articleModalElementoRepetible.getArticleId()>
119 <#assign modalPanelElementoRepetible = zurichService.getModal(modalElementoRepetible,.vars['reserved-article-id'].data, articleIdModalElementoRepetible)>
120 <#assign modalesRepetibles = modalesRepetibles + modalPanelElementoRepetible>
121 </#if>
122
123 <#assign nofollow=cur_link.hasNofollow?? && getterUtil.getBoolean(cur_link.hasNofollow.getData())/>
124 <#assign seoLink = zurichService.getSeoLink(groupId, .vars['reserved-article-id'].data,cur_link.link_title.getData(), cur_link.link_page_link.getFriendlyUrl(),cur_link.link_file_link.getData(), cur_link.link_free_link.getData(),getterUtil.getBoolean(cur_link.link_new_tab.getData()), linkClass, cur_link.link_id_prefix.getData(), cur_link.link_id.getData(),extraAttr, modalElementoRepetible, articleIdModalElementoRepetible, nofollow)/>
125
126
127 <#if cur_link.modalRCP?? && cur_link.modalRCP.getData() != "">
128 <div class="button-link sfModalButton" onclick="openModalRCP${cur_link.modalRCP.getData()}()">
129 ${seoLink}
130 ${htmlUtil.unescape(cur_link.getData())}
131 </a>
132 </div>
133 <#elseif popupSF==true>
134 <#if cur_link.productSelectModal?? && cur_link.productSelectModal.getData() != "">
135 <#assign linkProduct="${cur_link.productSelectModal.getData()}"/>
136 <#else>
137 <#assign linkProduct="nada"/>
138 </#if>
139 <div class="button-link sfModalButton" onclick="openSfModal('${linkProduct}')">
140 ${seoLink}
141 ${htmlUtil.unescape(cur_link.getData())}
142 </a>
143 </div>
144 <#else>
145 <div class="button-link">
146 ${seoLink}
147 ${htmlUtil.unescape(cur_link.getData())}
148 </a>
149 </div>
150 </#if>
151 </#list>
152 </div>
153 </div>
154 </#if>
155 </div>
156 </div>
157 </div>
158 </div>
159 </div>
160 </div>
161 </div>
162</div>
163
164<style>
165a.link-white{
166 text-decoration: none;
167 color: #23366F;
168 border-color: #23366F;
169 min-width: 110px;
170 text-align: center;
171 border-radius:28px;
172 background-color:white;
173}
174
175.link-white{
176 height: inherit;
177 padding: 8px;
178 display: flex;
179 justify-content: center;
180 flex-direction: row;
181 border: 1px solid #000066;
182 color: #000066;
183}
184
185.button-link.small .link-white {
186 padding: 0 24px;
187 max-width: none;
188 min-height: 56px;
189 font-size: 18px;
190 align-items: center;
191 justify-content: center;
192 margin-top: -20px;
193 text-align: center;
194 border-radius: 28px;
195}
196a.link-white:hover {
197 text-decoration: none;
198 background-color: #edeef0;
199 color:#91bfe3;
200}
201</style>
202
203<script>
204$(".sfModalButton a").on( "click", function(event) {
205 event.preventDefault();
206} );
207</script>
208
209<style>
210@media(max-width:768px){
211 .mod.mod-Product.highlight-figure .elements-block .element-description .button-link:not(:last-of-type){
212 margin-right:0px;
213}
214.mod.mod-Product.highlight-figure .elements-block .element-block .text{
215 margin-top:15px!important;
216 padding-top:15px;
217}
218.mod.mod-Product.highlight-figure .elements-block .element-block .image{
219 margin-top:30px;
220}
221.mod.mod-Product.highlight-figure .elements-block .element-description .button-link{
222 margin-bottom:10px;
223}
224}
225
226
227</style>
228<script>
229
230
231//Encuesta
232if (window.KAMPYLE_ONSITE_SDK) {
233//If Digital code has been loaded
234//onsiteLoaded();
235} else {
236// On the neb_OnsiteLoaded event, call onsiteLoaded function
237window.addEventListener('neb_OnsiteLoaded', onsiteLoaded);
238}
239function onsiteLoaded(){
240// load the form and store status (true/false) in neb_status
241var neb_status = KAMPYLE_ONSITE_SDK.loadForm(29431);
242// If form is loaded
243if (neb_status === true){
244// set CSS attribute display to inherit so button can be seen
245//document.getElementById("mdFormButton").style.display = "inherit"
246}
247}
248
249</script>
Aplicaciones no está disponible temporalmente.