productos
テンプレート処理中にエラーが発生しました。
The following has evaluated to null or missing: ==> request.getParameter('idProducto') [in template "20097#20123#49505" at line 4, column 30] ---- 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 auxIdProducto = request.getPa... [in template "20097#20123#49505" at line 4, column 5] ----
1<#assign assetLinkService = staticUtil["com.liferay.asset.kernel.service.AssetLinkLocalServiceUtil"] />
2
3<#if entries?has_content>
4 <#assign auxIdProducto = request.getParameter('idProducto')/>
5 <#attempt>
6 <#assign banderaEntry = 0 />
7 <#if auxIdProducto?has_content >
8
9 <#assign idEntryUnico = 0 />
10 <#attempt>
11 <#assign idEntryUnico = request.getParameter('idProducto')?number />
12 <#recover>
13 <#assign idEntryUnico = 0 />
14 </#attempt>
15
16 <#assign banderaEntry = 1 />
17
18 <#assign entryUnicoAux = staticUtil["com.liferay.asset.kernel.service.AssetEntryServiceUtil"] />
19 <#assign entryUnico = entryUnicoAux.getEntry(idEntryUnico?number) />
20 <#assign relatedAssetList = assetLinkService.getDirectLinks(idEntryUnico?number)/>
21 <input type="hidden" id="request" value="${request.getParameter('idProducto')}">
22 <input type="hidden" id="entryIdHidden" value="${entryUnico.getEntryId()}">
23
24 </#if>
25
26
27 <section class="site-wrapper">
28 <header></header>
29
30 <#list entries as curEntry>
31 <#if banderaEntry == 1 >
32 <#assign assetRenderer = entryUnico.getAssetRenderer() />
33 <#else>
34 <#assign assetRenderer = curEntry.getAssetRenderer() />
35 </#if>
36 <#assign journalArticle = assetRenderer.getArticle() />
37 <#assign document = saxReaderUtil.read(journalArticle.getContent()) />
38 <#assign rootElement = document.getRootElement() />
39 <#assign ImagenDeProducto = rootElement.selectSingleNode("dynamic-element[@name='imagenContenido']") />
40 <#assign img = ImagenDeProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
41 <#assign tituloProducto = ImagenDeProducto.selectSingleNode("dynamic-element[@name='titulo']") />
42 <#assign titulo = tituloProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
43 <#assign descripcionProducto = ImagenDeProducto.selectSingleNode("dynamic-element[@name='descripcion']") />
44 <#assign descripcion = descripcionProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
45 <#assign queEsProducto = ImagenDeProducto.selectSingleNode("dynamic-element[@name='queEs']") />
46 <#assign queEs = queEsProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
47 <#assign porqueList = queEsProducto.selectNodes("dynamic-element[@name='porque']") />
48 <#--<#assign porque = porqueProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />-->
49 <#-- <#assign porqueList = porqueProducto.selectNodes("dynamic-content[@language-id='${locale}']") /> -->
50
51 <#--<#assign coberturasProducto = queEsProducto.selectSingleNode("dynamic-element[@name='coberturas']") />-->
52 <#assign coberturasProducto = queEsProducto.selectNodes("dynamic-element[@name='coberturas']") />
53 <#--<#assign coberturas = coberturasProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />-->
54 <#assign comoContratarProducto = queEsProducto.selectSingleNode("dynamic-element[@name='comoContratar']") />
55 <#assign comoContratar = comoContratarProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
56
57 <#assign fileEntry = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
58
59 <input type="hidden" id="banderaEntry" value="${banderaEntry}">
60
61 <#assign ciudadProducto = queEsProducto.selectNodes("dynamic-element[@name='ciudad']") />
62 <#list ciudadProducto as ciudadActual>
63 <#assign ciudad = ciudadActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
64 <input type="hidden" id="ciudad" value="${ciudad}">
65 <#assign telefono = ciudadActual.selectSingleNode("dynamic-element[@name='telefono']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
66 <input type="hidden" id="telefono" value="${telefono}">
67 <#assign email = ciudadActual.selectSingleNode("dynamic-element[@name='email']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
68 <input type="hidden" id="email" value="${email}">
69 </#list>
70
71 <#assign faqsProducto = queEsProducto.selectNodes("dynamic-element[@name='faqs']") />
72 <#list faqsProducto as faqActual>
73 <#assign faq = faqActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
74 <input type="hidden" id="faq" value="${faq}">
75 <#assign pregunta = faqActual.selectSingleNode("dynamic-element[@name='pregunta']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
76 <input type="hidden" id="pregunta" value="${pregunta}">
77 </#list>
78
79 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
80
81 <#assign recomendadoProducto = queEsProducto.selectNodes("dynamic-element[@name='accesoRecomendado']") />
82
83 <div class="container">
84
85 <div class="row justify-content-md-center mt-5">
86 <div class="col-12" style="padding-right: 0px;">
87 <div class="view overlay">
88 <img class="card-img-top" src="${fLinkImg(img)}" alt="Sample image">
89 <div class="gradiente_negro"></div>
90 </div>
91 <div class="carousel-caption">
92 <h3 class="h3-responsive titulo text-left">${titulo}</h3>
93 </div>
94 </div>
95
96 </div>
97
98 <div class="col-12 mt-5 masonry-item wow fadeInUp animation-delay-2">
99 <div class="mr-auto">
100
101 </div>
102 </div>
103
104
105 <div class="row masonry-container">
106
107 <div class="col-12 col-sm-6 col-md-9">
108 <div class="card mb-4 borde-izquierdo wow fadeInUp animation-delay-2">
109 <div class="card-body text-justify">
110 <h3 class="footer-title">¿Qué es?</h3>
111 ${queEs}
112 </div>
113 </div>
114
115
116 <#if porqueList[0].selectSingleNode("dynamic-content[@language-id='${locale}']").getData()?has_content>
117 <#--<#if porqueList?size == 1>-->
118 <div class="card mb-4 borde-izquierdo wow fadeInUp animation-delay-2">
119 <div class="card-body text-justify">
120 <h3 class="footer-title">¿Por qué contratar con TMX?</h3>
121 <ol>
122 <#list porqueList as cur_porque>
123 <#assign porque = cur_porque.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
124 <li value="${cur_porque?index+1}">${porque}</li>
125 </#list>
126 </ol>
127 </div>
128 </div>
129 </#if>
130
131 <div class="card mb-4 borde-izquierdo wow fadeInUp animation-delay-2">
132 <div class="card-body text-justify">
133 <h3 class="footer-title">Coberturas</h3>
134 <ul>
135 <#list coberturasProducto as cur_coberturas>
136 <#assign coberturas = cur_coberturas.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
137 <li type="disc">${coberturas}</li>
138 <#assign sub1List = cur_coberturas.selectNodes("dynamic-element[@name='sub1']") />
139 <#if sub1List[0].selectSingleNode("dynamic-content[@language-id='${locale}']").getData()?has_content>
140 <ul>
141
142 <#list sub1List as cur_sub1List>
143 <#assign sub1Txt = cur_sub1List.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
144 <li type="circle">${sub1Txt}</li>
145 <#assign sub2List = cur_sub1List.selectNodes("dynamic-element[@name='sub2']") />
146 <#if sub2List[0].selectSingleNode("dynamic-content[@language-id='${locale}']").getData()?has_content>
147 <ul>
148 <#list sub2List as cur_sub2List>
149 <#assign sub2Txt = cur_sub2List.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
150 <li type="square">${sub2Txt}</li>
151 </#list>
152 </ul>
153 </#if>
154 </#list>
155 </ul>
156 </#if>
157 </#list>
158 </ul>
159 </div>
160 </div>
161
162 <div class="card mb-4 borde-izquierdo wow fadeInUp animation-delay-2">
163 <div class="card-body text-justify">
164 <h3 class="footer-title">¿Cómo contratar?</h3>
165 ${comoContratar}
166 </div>
167 </div>
168 </div>
169
170
171 <div class="col-12 col-sm-6 col-md-3">
172
173
174 <div class="row card borde-izquierdo wow fadeInUp animation-delay-2">
175 <div class="col-12 mb-4 mt-4 datoCotiza">
176 <h3 class="h3-responsive ml-3">Obtener una<br>Cotización<br>55 5278 2100</h3>
177 <div class="col-12 mt-2">
178
179 <#list ciudadProducto as ciudadActual>
180 <#assign ciudad = ciudadActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
181 <#assign telefono = ciudadActual.selectSingleNode("dynamic-element[@name='telefono']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
182 <#if ciudadActual.selectSingleNode("dynamic-element[@name='email']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData()?has_content >
183 <#assign email = ciudadActual.selectSingleNode("dynamic-element[@name='email']").selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
184 <p><small style="font-weight: 600;">${ciudad}</small><br><small>${telefono}<br><br><a href="mailto:${email}">${email}</a></small></p>
185 <#else>
186 <p><small style="font-weight: 600;">${ciudad}</small><br><small>${telefono}</small></p>
187 </#if>
188 </#list>
189 </div>
190 </div>
191 </div>
192
193
194 <#assign documentoProducto = queEsProducto.selectNodes("dynamic-element[@name='documento']") />
195 <#if documentoProducto[0].selectSingleNode("dynamic-content[@language-id='${locale}']").getData()?has_content>
196
197 <#list documentoProducto as docActual>
198 <#assign doc = docActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
199 <#list doc?split("/") as docList>
200 <input type="hidden" id="docList" value="${docList}">
201 </#list>
202 <input type="hidden" id="doc" value="${doc}">
203 </#list>
204
205 <div class="row mt-3 card borde-izquierdo">
206 <div class="col-12 mb-4 mt-4">
207 <h3 class="h3-responsive ml-3">Formatos:</h3>
208 <#list documentoProducto as docActual>
209 <#assign doc = docActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
210 <#--<#list documentoProducto as docActual>-->
211 <#assign doc = docActual.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
212 <#assign docJson = jsonFactoryUtil.createJSONObject(doc) />
213 <#--
214 <#list doc?split("/") as docList>
215 <#if docList?index == 2>
216 <#assign groupDocId = docList />
217 </#if>
218 </#list>
219
220 <#assign uuIdAux = doc?keep_after_last("/") />
221 -->
222 <#assign uuId = docJson.uuid />
223 <#assign groupDocId = docJson.groupId />
224
225 <input type="hidden" id="uuId" value="${uuId}">
226 <input type="hidden" id="groupDocId" value="${groupDocId}" >
227 <#assign file2 = fileEntry.getFileEntryByUuidAndGroupId(uuId ,groupDocId?number)>
228 <div class="row">
229 <div class="col-2 mt-2">
230 <a class="aColor" onclick="abreArchivo('${groupDocId}','${uuId}')"><i class="sidebar-icon far fa-file-pdf" aria-hidden="true"></i></a>
231 </div>
232 <div class="col-10"><a class="aColor" onclick="abreArchivo('${groupDocId}','${uuId}')">${file2.fileName} <br>(${file2.extension} - ${(file2.size)} Bytes)</a></div>
233 </div>
234 <#--</#list>-->
235 </#list>
236
237 </div>
238 </div>
239
240 </#if>
241
242
243
244
245 </div>
246 </div>
247 </div>
248
249 <#if banderaEntry == 1 >
250 <#break>
251 </#if>
252
253 </#list>
254
255 </section>
256
257
258
259 <!-- productos relacionados ========================================================== -->
260 <div class="container">
261
262 <div class="row justify-content-md-center wow fadeIn" data-wow-delay="0.3s">
263
264 <div class="container text-center mb-6">
265 <h1 class="font-weight-bold center-block mt-4 mb-4 animated zoomInDown animation-delay-5 footer-title">Productos Relacionados</h1>
266 </div>
267 </div>
268
269 <div class="row masonry-container">
270 <div class="owl-carousel owl-theme wow fadeInUp animation-delay-2">
271
272 <#if relatedAssetList?has_content>
273 <#list relatedAssetList as relatedAsset>
274 <#--
275 <#if relatedAsset?index == 3>
276 <#break>
277 </#if>
278 -->
279
280 <#assign currentEntry = entryUnicoAux.getEntry(relatedAsset.getEntryId2()) />
281 <#assign assetRenderer = currentEntry.getAssetRenderer() />
282 <#assign journalArticle = assetRenderer.getArticle() />
283 <#assign document = saxReaderUtil.read(journalArticle.getContent()) />
284 <#assign rootElement = document.getRootElement() />
285 <#assign ImagenDeProducto = rootElement.selectSingleNode("dynamic-element[@name='imagenContenido']") />
286 <#assign img = ImagenDeProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
287 <#assign tituloProducto = ImagenDeProducto.selectSingleNode("dynamic-element[@name='titulo']") />
288 <#assign titulo = tituloProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
289 <#assign descripcionProducto = ImagenDeProducto.selectSingleNode("dynamic-element[@name='descripcion']") />
290 <#assign descripcion = descripcionProducto.selectSingleNode("dynamic-content[@language-id='${locale}']").getData() />
291 <#assign link = themeDisplay.getPortalURL() + "/web/portal-agentes/productos1" >
292
293 <div class="item tarjetas tarjeta" >
294
295 <#assign linkE = link +"?idProducto=" + relatedAsset.getEntryId2()>
296
297 <article class="mb-4 wow materialUp animation-delay-5">
298 <div class="card card-cascade narrower">
299 <div class="view overlay">
300 <img class="card-img-top" src="${fLinkImg(img)}" alt="Card image cap">
301 </div>
302 <div class="card-body">
303 <h4 class="card-title alturaTit">${titulo} </h4>
304 <br/>
305 <p class="card-text contenedores text-justify mayorAltura"> ${descripcion} </p>
306 <div class="row vermas">
307 <div class="col-md-12 mb-1"><a href="${linkE}" class="btn bt_azul btn-sm btn-block animate-icon">Ver más</a></div>
308 </div>
309 </div>
310 </div>
311 </article>
312
313 </div>
314
315 </#list>
316 </#if>
317 </div>
318 </div>
319
320 </div>
321 <!-- productos relacionados ========================================================== -->
322
323 <#recover>
324
325 <!--
326 <div class="container-fluid">
327 <div class="col-12 mt-4">
328 <p class="font-weight-bold h2-responsive">ENLACE NO ENCONTRADO</p>
329 </div>
330 </div>
331 -->
332 <#assign idEntryUnico = 0 />
333 <#attempt>
334 <#assign idEntryUnico = request.getParameter('idProducto')?number />
335 <#recover>
336 <#assign idEntryUnico = 0 />
337 </#attempt>
338
339
340
341 <div class="container">
342 <div class="row">
343 <div class="col-md-12">
344 <div class="error-template">
345 <h1>Oops!</h1>
346 <img src="http://172.25.10.42:8080/documents/32547/35477/Tmx404.png/88cb4804-6b2d-e477-b1e8-9a395ca30524?t=1597688962458" class="rounded mx-auto d-block">
347 <h2>Not Found</h2>
348 <input type="hidden" id="request" value="${idEntryUnico}">
349 <div class="error-details">
350 Lo sentimos, se ha producido un error, no se ha encontrado la página solicitada.
351 </div>
352 <div class="error-actions">
353 <a onclick="goToHome();" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-home"></span>
354 Ir a Inicio
355 </a>
356 <a href="mailto:atencion_tokiomarine@tokiomarine.com.mx" target="_blank" class="btn btn-default btn-lg"><span class="glyphicon glyphicon-envelope"></span> Contactar a Soporte </a>
357 </div>
358 </div>
359 </div>
360 </div>
361 </div>
362
363 </#attempt>
364
365
366
367</#if>
368
369<#function fLinkImg imgInfo >
370 <#assign imgJson = jsonFactoryUtil.createJSONObject(imgInfo) />
371
372 <#return themeDisplay.getPortalURL()+'/documents/'+imgJson.groupId+'/'+imgJson.classPK+'/'+imgJson.title+'/'+imgJson.uuid >
373</#function>
374
375<style type="text/css">
376 .col-12 .borde-izquierdo .col-12.mb-4.mt-4{
377 flex: none;
378 }
379 .container h3.footer-title{
380 color: #01579b;
381 }
382 .container h1.footer-title{
383 color: #01579b;
384 }
385 .site-wrapper .borde-izquierdo a {
386 color: #0275d8;
387 }
388 .titulo {
389 color: #FFFFFF;
390 }
391
392 .site-wrapper .related .card {
393 height: 100%;
394 display: flex;
395 }
396
397 .site-wrapper .related .card-block {
398 display: flex;
399 justify-content: space-between;
400 flex-direction: column;
401 }
402
403 .site-wrapper .related .card.card-footer {
404 align-self: flex-end;
405 flex: 1 1 auto;
406 }
407 .site-wrapper .related .card .vermas {
408 position: absolute;
409 width: 97%;
410 bottom: 20px;
411 }
412
413 .site-wrapper .card .datoCotiza{
414 padding-left: 5px;
415 padding-right: 5px;
416 }
417
418 .error-template{
419 padding: 40px 15px;text-align: center;
420 }
421 .error-actions {
422 margin-top:15px;
423 margin-bottom:15px;
424 }
425 .error-actions .btn {
426 margin-right:10px;
427 }
428
429 .site-wrapper a:not([href]):not([tabindex]) {
430 cursor: pointer;
431 text-decoration: none;
432 color: #0275d8;
433 transition: all 0.2s ease-in-out;
434 transition-property: all;
435 transition-duration: 0.2s;
436 transition-timing-function: ease-in-out;
437 transition-delay: 0s;
438 }
439
440 .site-wrapper a:not([href]):not([tabindex]):hover {
441 text-decoration: underline;
442 color: #0275d8;
443 }
444 .site-wrapper .bt_azul {
445 background-color: #008ad3;
446 color: #FFFFFF;
447 }
448</style>
449
450<script type="text/javascript">
451$( document ).ready(function() {
452
453 var tam = ${entries?size};
454 if(tam <= 1){
455 tam = ${entries?size};
456 window.location.href = $(".card-body .btn-sm.btn-block").attr("href");
457 }else{
458 tam=3;
459 $('.owl-carousel:not(".owl-carousel-unique")').owlCarousel({
460 loop: true,
461 margin: 10,
462 nav: true,
463 dots:false,
464 responsiveClass: true,
465 responsive: {
466 0: {
467 items: 1,
468 },
469 600: {
470 items: tam,
471 },
472 1000: {
473 items: tam,
474 margin: 20,
475 }
476 }
477 });
478 var heights = $(".mayorAltura").map(function() {
479 console.log("height");
480 console.log($(this).height());
481 return $(this).height();
482 }).get();
483
484 maxHeight = Math.max.apply(null, heights);
485
486 $(".mayorAltura").height(maxHeight);
487
488 /*************************************************/
489
490 var heights = $(".alturaTit").map(function() {
491 console.log("height");
492 console.log($(this).height());
493 return $(this).height();
494 }).get();
495
496 maxHeight = Math.max.apply(null, heights);
497
498 $(".alturaTit").height(maxHeight);
499
500 }
501
502
503 console.log("tam 2="+tam);
504 /* convertir en slider */
505 $(".entry-title.taglib-categorization-filter").attr("hidden","true");
506});
507
508function goToHome(){
509 showLoader();
510 window.location.href = window.location.origin;
511}
512
513function abreArchivo(groupId, uuid){
514 var stringURL = window.location.origin + window.location.pathname.replace(window.location.pathname.split("/")[3], 'pdf-viewer?uuid=') + uuid +"&groupId=" + groupId;
515 window.open(stringURL, '_blank');
516}
517
518</script>
ノード: liferay-app-server2.tokiomarine.corp:8080