Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> dvmSkuBanner [in template "13373225#13373264#13390274" at line 4, column 18] ---- 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 skuId = dvmSkuBanner [in template "13373225#13373264#13390274" at line 4, column 1] ----
1<#assign contadorSKU = 0>
2<#assign contadorBannerSKU = 0>
3<#assign contadorBannerSKUImg = 0>
4<#assign skuId = dvmSkuBanner>
5<#assign contadorBannerGenerico = 0>
6<#assign contadorBannerGenericoImg = 0>
7<#assign contadorBannerGenericoDiv = 0>
8
9<#if entries?has_content>
10 <#list entries as curEntry>
11 <#if curEntry?? && curEntry.getAssetRenderer()??>
12 <#assign renderer = curEntry.getAssetRenderer()>
13 <#assign docXml = saxReaderUtil.read(renderer.getArticle().getContent()) />
14 <#assign sku = docXml.valueOf("//dynamic-element[@name='SKU']/dynamic-content/text()") />
15 <#assign esGenerico = docXml.valueOf("//dynamic-element[@name='Generico']/dynamic-content/text()") />
16 <#assign utilizaGenerico = docXml.valueOf("//dynamic-element[@name='UtilizaGenerico']/dynamic-content/text()") />
17 <#if skuId == sku && esGenerico != 'true' && utilizaGenerico != 'true'>
18 <#assign contadorSKU++>
19 </#if>
20 <#if esGenerico == 'true'>
21 <#assign contadorBannerGenericoDiv++>
22 </#if>
23 </#if>
24 </#list>
25</#if>
26
27<#if (contadorSKU > 0) >
28 <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
29 <#if (contadorSKU > 1)>
30 <ol class="carousel-indicators">
31 <#list entries as entryBannerSKU>
32 <#if entryBannerSKU?? && entryBannerSKU.getAssetRenderer()??>
33 <#assign renderer = entryBannerSKU.getAssetRenderer()>
34 <#assign docXml = saxReaderUtil.read(renderer.getArticle().getContent()) />
35 <#assign sku = docXml.valueOf("//dynamic-element[@name='SKU']/dynamic-content/text()") />
36 <#assign esGenerico = docXml.valueOf("//dynamic-element[@name='Generico']/dynamic-content/text()") />
37 <#assign utilizaGenerico = docXml.valueOf("//dynamic-element[@name='UtilizaGenerico']/dynamic-content/text()") />
38 <#if skuId == sku>
39 <#assign contadorBannerSKU++>
40 <li data-target="#carouselExampleIndicators" data-slide-to="${contadorBannerSKU-1}" class="<#if contadorBannerSKU - 1 == 0>active</#if>"></li>
41 </#if>
42 </#if>
43 </#list>
44 </ol>
45 </#if>
46 <div class="carousel-inner">
47 <#list entries as entryBannerSKUBody>
48 <#if entryBannerSKUBody?? && entryBannerSKUBody.getAssetRenderer()??>
49 <#assign renderer = entryBannerSKUBody.getAssetRenderer()>
50 <#assign docXml = saxReaderUtil.read(renderer.getArticle().getContent()) />
51 <#assign sku = docXml.valueOf("//dynamic-element[@name='SKU']/dynamic-content/text()") />
52 <#if skuId == sku>
53 <#assign contadorBannerSKUImg++>
54
55 <#assign titulo = docXml.valueOf("//dynamic-element[@name='Titulo']/dynamic-content/text()") />
56 <#assign texto = docXml.valueOf("//dynamic-element[@name='Texto']/dynamic-content/text()") />
57 <#assign externo = docXml.valueOf("//dynamic-element[@name='Externo']/dynamic-content/text()") />
58 <#assign enlace = docXml.valueOf("//dynamic-element[@name='Enlace']/dynamic-content/text()") />
59
60 <#assign journalArticle = renderer.getArticle()>
61 <#assign document = saxReaderUtil.read(journalArticle.getContent()) >
62 <#assign rootElement = document.getRootElement()>
63 <#assign xPathSelector1 = saxReaderUtil.createXPath("dynamic-element[@name='HOME01']")>
64 <#assign imgNews1 = xPathSelector1.selectSingleNode(rootElement).getStringValue()>
65 <#assign imgJson1 = jsonFactoryUtil.createJSONObject(imgNews1)>
66 <#assign imagen1 = "/documents/"+ imgJson1.groupId +"/" +imgJson1.fileEntryId +"/"+ imgJson1.name +"/"+imgJson1.uuid >
67
68 <#assign xPathSelector2 = saxReaderUtil.createXPath("dynamic-element[@name='HOME02']")>
69 <#assign imgNews2 = xPathSelector2.selectSingleNode(rootElement).getStringValue()>
70 <#assign imgJson2 = jsonFactoryUtil.createJSONObject(imgNews2)>
71 <#assign imagen2 = "/documents/"+ imgJson2.groupId +"/" +imgJson2.fileEntryId +"/"+ imgJson2.name +"/"+imgJson2.uuid >
72
73 <#assign xPathSelector3 = saxReaderUtil.createXPath("dynamic-element[@name='HOME03']")>
74 <#assign imgNews3 = xPathSelector3.selectSingleNode(rootElement).getStringValue()>
75 <#assign imgJson3 = jsonFactoryUtil.createJSONObject(imgNews3)>
76 <#assign imagen3 = "/documents/"+ imgJson3.groupId +"/" +imgJson3.fileEntryId +"/"+ imgJson3.name +"/"+imgJson3.uuid >
77
78 <#assign xPathSelector4 = saxReaderUtil.createXPath("dynamic-element[@name='HOME04']")>
79 <#assign imgNews4 = xPathSelector4.selectSingleNode(rootElement).getStringValue()>
80 <#assign imgJson4 = jsonFactoryUtil.createJSONObject(imgNews4)>
81 <#assign imagen4 = "/documents/"+ imgJson4.groupId +"/" +imgJson4.fileEntryId +"/"+ imgJson4.name +"/"+imgJson4.uuid >
82
83 <style>
84 .d-block.w-100.img-lg_${entryBannerSKUBody?counter}{
85 min-height: 530px;
86 }
87 .d-block.w-100.img-md_${entryBannerSKUBody?counter}{
88 min-height: 320px;
89 }
90 .d-block.w-100.img-sm_${entryBannerSKUBody?counter}{
91 min-height: 375px;
92 }
93 .d-block.w-100.img-xs_${entryBannerSKUBody?counter}{
94 min-height: 375px;
95 }
96 .img-lg_${entryBannerSKUBody?counter} {
97 display: flex !important;
98 width: 100%;
99 height: auto;
100 background-image: url("${imagen1}");
101 background-repeat: no-repeat;
102 background-size: cover;
103 background-position: center;
104 }
105
106 .img-md_${entryBannerSKUBody?counter} {
107 display: none !important;
108 }
109 .img-sm_${entryBannerSKUBody?counter} {
110 display: none !important;
111 }
112
113 .img-xs_${entryBannerSKUBody?counter} {
114 display: none !important;
115 }
116
117 @media only screen and (max-width: 1024px) {
118 .d-block.w-100.img-lg_${entryBannerSKUBody?counter}{
119 min-height: 450px;
120 }
121 }
122
123 @media only screen and (max-width: 795px) {
124 .img-lg_${entryBannerSKUBody?counter} {
125 display: none !important;
126 }
127 .img-md_${entryBannerSKUBody?counter} {
128 display: flex !important;
129 width: 100%;
130 height: auto;
131 background-image: url("${imagen1}");
132 background-repeat: no-repeat;
133 background-size: cover;
134 background-position: center;
135 }
136 .carousel {
137 min-height: 320px;
138 }
139 }
140
141 @media only screen and (max-width: 650px) {
142 .img-md_${entryBannerSKUBody?counter} {
143 display: none !important;
144 }
145 .img-sm_${entryBannerSKUBody?counter} {
146 display: flex !important;
147 width: 100%;
148 height: auto;
149 background-image: url("${imagen3}");
150 background-repeat: no-repeat;
151 background-size: cover;
152 background-position: center;
153 }
154 }
155
156 @media only screen and (max-width: 375px) {
157 .img-sm_${entryBannerSKUBody?counter} {
158 display: none !important;
159 }
160 .img-xs_${entryBannerSKUBody?counter} {
161 display: flex !important;
162 width: 100%;
163 height: auto;
164 background-image: url("${imagen4}");
165 background-repeat: no-repeat;
166 background-size: cover;
167 background-position: center;
168 }
169 }
170 </style>
171
172 <div class="carousel-item <#if contadorBannerSKUImg - 1 == 0>active</#if>">
173
174 <#if enlace?has_content>
175 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
176 <div class="d-block w-100 img-lg_${entryBannerSKUBody?counter}" ></div>
177 </a>
178 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
179 <div class="d-block w-100 img-md_${entryBannerSKUBody?counter}"></div>
180 </a>
181 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
182 <div class="d-block w-100 img-sm_${entryBannerSKUBody?counter}"></div>
183 </a>
184 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
185 <div class="d-block w-100 img-xs_${entryBannerSKUBody?counter}"></div>
186 </a>
187 <#else>
188 <div class="d-block w-100 img-lg_${entryBannerSKUBody?counter}"></div>
189 <div class="d-block w-100 img-md_${entryBannerSKUBody?counter}"></div>
190 <div class="d-block w-100 img-sm_${entryBannerSKUBody?counter}"></div>
191 <div class="d-block w-100 img-xs_${entryBannerSKUBody?counter}"></div>
192 </#if>
193
194
195 <#if titulo?has_content>
196 <div class="col-sm-12 col-sm-6 col-md-5 col-lg-4 banner-text">
197 <h3 class="h3-mb">${titulo}</h3>
198 <#if texto?has_content><p>${texto}</p></#if>
199 <#if enlace?has_content>
200 <div class="banner-btn">
201 <a href="${enlace}" class="btn btn-main" target="<#if externo == 'true'>_blank<#else>_self</#if>">Ver más</a>
202 </div>
203 </#if>
204 </div>
205 </#if>
206 </div>
207 </#if>
208 </#if>
209 </#list>
210 </div>
211 <#if (contadorSKU > 1)>
212 <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
213 <i class="fas fa-angle-left"></i>
214 <span class="sr-only">Previous</span>
215 </a>
216 <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
217 <i class="fas fa-angle-right"></i>
218 <span class="sr-only">Next</span>
219 </a>
220 </#if>
221 </div>
222<#else>
223 <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
224 <#if (contadorBannerGenericoDiv > 1)>
225 <ol class="carousel-indicators">
226 <#list entries as entryBannerSKU>
227 <#if entryBannerSKU?? && entryBannerSKU.getAssetRenderer()??>
228 <#assign renderer = entryBannerSKU.getAssetRenderer()>
229 <#assign docXml = saxReaderUtil.read(renderer.getArticle().getContent()) />
230 <#assign sku = docXml.valueOf("//dynamic-element[@name='SKU']/dynamic-content/text()") />
231 <#assign esGenerico = docXml.valueOf("//dynamic-element[@name='Generico']/dynamic-content/text()") />
232 <#assign utilizaGenerico = docXml.valueOf("//dynamic-element[@name='UtilizaGenerico']/dynamic-content/text()") />
233 <#if esGenerico == 'true'>
234 <#assign contadorBannerGenerico++>
235 <li data-target="#carouselExampleIndicators" data-slide-to="${contadorBannerGenerico-1}" class="<#if contadorBannerGenerico - 1 == 0>active</#if>"></li>
236 </#if>
237 </#if>
238 </#list>
239 </ol>
240 </#if>
241 <div class="carousel-inner">
242 <#list entries as entryBannerSKUBody>
243 <#if entryBannerSKUBody?? && entryBannerSKUBody.getAssetRenderer()??>
244 <#assign renderer = entryBannerSKUBody.getAssetRenderer()>
245 <#assign docXml = saxReaderUtil.read(renderer.getArticle().getContent()) />
246 <#assign sku = docXml.valueOf("//dynamic-element[@name='SKU']/dynamic-content/text()") />
247 <#assign esGenerico = docXml.valueOf("//dynamic-element[@name='Generico']/dynamic-content/text()") />
248 <#if esGenerico == 'true'>
249 <#assign contadorBannerGenericoImg++>
250
251 <#assign titulo = docXml.valueOf("//dynamic-element[@name='Titulo']/dynamic-content/text()") />
252 <#assign texto = docXml.valueOf("//dynamic-element[@name='Texto']/dynamic-content/text()") />
253 <#assign externo = docXml.valueOf("//dynamic-element[@name='Externo']/dynamic-content/text()") />
254 <#assign enlace = docXml.valueOf("//dynamic-element[@name='Enlace']/dynamic-content/text()") />
255
256 <#assign journalArticle = renderer.getArticle()>
257 <#assign document = saxReaderUtil.read(journalArticle.getContent()) >
258 <#assign rootElement = document.getRootElement()>
259 <#assign xPathSelector1 = saxReaderUtil.createXPath("dynamic-element[@name='HOME01']")>
260 <#assign imgNews1 = xPathSelector1.selectSingleNode(rootElement).getStringValue()>
261 <#assign imgJson1 = jsonFactoryUtil.createJSONObject(imgNews1)>
262 <#assign imagen1 = "/documents/"+ imgJson1.groupId +"/" +imgJson1.fileEntryId +"/"+ imgJson1.name +"/"+imgJson1.uuid >
263
264 <#assign xPathSelector2 = saxReaderUtil.createXPath("dynamic-element[@name='HOME02']")>
265 <#assign imgNews2 = xPathSelector2.selectSingleNode(rootElement).getStringValue()>
266 <#assign imgJson2 = jsonFactoryUtil.createJSONObject(imgNews2)>
267 <#assign imagen2 = "/documents/"+ imgJson2.groupId +"/" +imgJson2.fileEntryId +"/"+ imgJson2.name +"/"+imgJson2.uuid >
268
269 <#assign xPathSelector3 = saxReaderUtil.createXPath("dynamic-element[@name='HOME03']")>
270 <#assign imgNews3 = xPathSelector3.selectSingleNode(rootElement).getStringValue()>
271 <#assign imgJson3 = jsonFactoryUtil.createJSONObject(imgNews3)>
272 <#assign imagen3 = "/documents/"+ imgJson3.groupId +"/" +imgJson3.fileEntryId +"/"+ imgJson3.name +"/"+imgJson3.uuid >
273
274 <#assign xPathSelector4 = saxReaderUtil.createXPath("dynamic-element[@name='HOME04']")>
275 <#assign imgNews4 = xPathSelector4.selectSingleNode(rootElement).getStringValue()>
276 <#assign imgJson4 = jsonFactoryUtil.createJSONObject(imgNews4)>
277 <#assign imagen4 = "/documents/"+ imgJson4.groupId +"/" +imgJson4.fileEntryId +"/"+ imgJson4.name +"/"+imgJson4.uuid >
278
279 <style>
280 .d-block.w-100.img-lg_${entryBannerSKUBody?counter}{
281 min-height: 530px;
282 }
283 .d-block.w-100.img-md_${entryBannerSKUBody?counter}{
284 min-height: 320px;
285 }
286 .d-block.w-100.img-sm_${entryBannerSKUBody?counter}{
287 min-height: 375px;
288 }
289 .d-block.w-100.img-xs_${entryBannerSKUBody?counter}{
290 min-height: 375px;
291 }
292 .img-lg_${entryBannerSKUBody?counter} {
293 display: flex !important;
294 width: 100%;
295 height: auto;
296 background-image: url("${imagen1}");
297 background-repeat: no-repeat;
298 background-size: cover;
299 background-position: center;
300 }
301
302 .img-md_${entryBannerSKUBody?counter} {
303 display: none !important;
304 }
305 .img-sm_${entryBannerSKUBody?counter} {
306 display: none !important;
307 }
308
309 .img-xs_${entryBannerSKUBody?counter} {
310 display: none !important;
311 }
312
313 @media only screen and (max-width: 1024px) {
314 .d-block.w-100.img-lg_${entryBannerSKUBody?counter}{
315 min-height: 450px;
316 }
317 }
318
319 @media only screen and (max-width: 795px) {
320 .img-lg_${entryBannerSKUBody?counter} {
321 display: none !important;
322 }
323 .img-md_${entryBannerSKUBody?counter} {
324 display: flex !important;
325 width: 100%;
326 height: auto;
327 background-image: url("${imagen1}");
328 background-repeat: no-repeat;
329 background-size: cover;
330 background-position: center;
331 }
332 .carousel {
333 min-height: 320px;
334 }
335 }
336
337 @media only screen and (max-width: 650px) {
338 .img-md_${entryBannerSKUBody?counter} {
339 display: none !important;
340 }
341 .img-sm_${entryBannerSKUBody?counter} {
342 display: flex !important;
343 width: 100%;
344 height: auto;
345 background-image: url("${imagen3}");
346 background-repeat: no-repeat;
347 background-size: cover;
348 background-position: center;
349 }
350 }
351
352 @media only screen and (max-width: 375px) {
353 .img-sm_${entryBannerSKUBody?counter} {
354 display: none !important;
355 }
356 .img-xs_${entryBannerSKUBody?counter} {
357 display: flex !important;
358 width: 100%;
359 height: auto;
360 background-image: url("${imagen4}");
361 background-repeat: no-repeat;
362 background-size: cover;
363 background-position: center;
364 }
365 }
366 </style>
367
368 <div class="carousel-item <#if contadorBannerGenericoImg - 1 == 0>active</#if>">
369
370 <#if enlace?has_content>
371 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
372 <div class="d-block w-100 img-lg_${entryBannerSKUBody?counter}" ></div>
373 </a>
374 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
375 <div class="d-block w-100 img-md_${entryBannerSKUBody?counter}"></div>
376 </a>
377 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
378 <div class="d-block w-100 img-sm_${entryBannerSKUBody?counter}"></div>
379 </a>
380 <a href="${enlace}" target="<#if externo == 'true'>_blank<#else>_self</#if>">
381 <div class="d-block w-100 img-xs_${entryBannerSKUBody?counter}"></div>
382 </a>
383 <#else>
384 <div class="d-block w-100 img-lg_${entryBannerSKUBody?counter}"></div>
385 <div class="d-block w-100 img-md_${entryBannerSKUBody?counter}"></div>
386 <div class="d-block w-100 img-sm_${entryBannerSKUBody?counter}"></div>
387 <div class="d-block w-100 img-xs_${entryBannerSKUBody?counter}"></div>
388 </#if>
389
390
391 <#if titulo?has_content>
392 <div class="col-sm-12 col-sm-6 col-md-5 col-lg-4 banner-text">
393 <h3 class="h3-mb">${titulo}</h3>
394 <#if texto?has_content><p>${texto}</p></#if>
395 <#if enlace?has_content>
396 <div class="banner-btn">
397 <a href="${enlace}" class="btn btn-main" target="<#if externo == 'true'>_blank<#else>_self</#if>">Ver más</a>
398 </div>
399 </#if>
400 </div>
401 </#if>
402 </div>
403 </#if>
404 </#if>
405 </#list>
406 </div>
407 <#if (contadorBannerGenericoDiv > 1)>
408 <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
409 <i class="fas fa-angle-left"></i>
410 <span class="sr-only">Previous</span>
411 </a>
412 <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
413 <i class="fas fa-angle-right"></i>
414 <span class="sr-only">Next</span>
415 </a>
416 </#if>
417 </div>
418</#if>