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