Detalle Productos Cat
An error occurred while processing the template.
Denied access to model object as it does not belong to current company 14306307
----
FTL stack trace ("~" means nesting-related):
- Failed at: #list attachmentFiles as attachmentFile [in template "14306307#14306335#null" at line 690, column 33]
----
1<#include "${templatesPath}/10241186">
2<#assign finanzautoPhone = 901130013 />
3<#assign maxRelationships = 20 />
4<#assign objectDefinitionId = 14695654>
5<#assign cpAttachmentFileEntryService = serviceLocator.findService("com.liferay.commerce.product.service.CPAttachmentFileEntryService")>
6<#assign objectDefinitionService = serviceLocator.findService("com.liferay.object.service.ObjectDefinitionService")>
7<#assign objectEntryLocalService = serviceLocator.findService("com.liferay.object.service.ObjectEntryLocalService")>
8<#assign objectRelationshipService = serviceLocator.findService("com.liferay.object.service.ObjectRelationshipService")>
9<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
10<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
11<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
12<#assign assetCategoryPropertyService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyService")>
13<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")>
14<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
15<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
16
17<#assign groupId = themeDisplay.getScopeGroupId()>
18<#assign companyId = themeDisplay.getCompanyId()>
19<#assign portalURL = themeDisplay.getPortalURL()>
20
21<#assign assetCategoryClassName = "com.liferay.asset.kernel.model.AssetCategory" />
22<#assign assetCategoryClassNameId = classNameLocalService.getClassNameId(assetCategoryClassName) />
23<#-- -------------------------------------------------------------------- BUSQUEDA OBJETO -------------------------------------------------------------------- -->
24
25<#if request.getAttribute("productId")??>
26 <#assign objectEntryId = request.getAttribute("productId")>
27 <#assign values = objectEntryLocalService.getValues(objectEntryId)>
28 <#attempt>
29
30 ${request.setAttribute('productDetail', true)}
31 <#assign hostname = layout.getGroup().getDisplayURL(themeDisplay,false)?replace('/es','')?replace('/en','') />
32 <link rel="alternate" href="${hostname}/productos/${values.productUrlEs}" hreflang="x-default"/>
33 <link rel="alternate" href="${hostname}/productos/${values.productUrlEs}" hreflang="es-ES"/>
34 ${request.setAttribute('productES', '${hostname}/productos/${values.productUrlEs}')}
35 <#if locale == "es_ES">
36 <link rel="canonical" href="${hostname}/productos/${values.productUrlEs}"/>
37 </#if>
38
39 <#if values.productUrlEn??>
40 <link rel="alternate" href="${hostname}/en/products/${values.productUrlEn}" hreflang="en-GB"/>
41 ${request.setAttribute('productEN', '${hostname}/en/products/${values.productUrlEn}')}
42 <#if locale == "en_GB">
43 <link rel="canonical" href="${hostname}/en/products/${values.productUrlEn}"/>
44 </#if>
45
46 <#else>
47 <link rel="alternate" href="${hostname}/en/products/${values.productUrlEs}" hreflang="en-GB"/>
48 ${request.setAttribute('productEN', '${hostname}/en/products/${values.productUrlEs}')}
49 <#if locale == "en_GB">
50 <link rel="canonical" href="${hostname}/en/products/${values.productUrlEs}"/>
51 </#if>
52 </#if>
53
54
55
56
57
58 <#recover>
59
60 </#attempt>
61
62
63<#-- -------------------------------------------------------------------- FIN BUSQUEDA OBJETO -------------------------------------------------------------------- -->
64<#-- -------------------------------------------------------------------- BUSQUEDA CATEGORIA -------------------------------------------------------------------- -->
65 <#assign className = objectDefinitionService.getObjectDefinition(objectDefinitionId).getClassName() />
66 <#assign classNameId = classNameLocalService.getClassNameId(className) />
67 <#assign categories = assetCategoryLocalService.getCategories(classNameId, objectEntryId)/>
68 <#assign urlcyclica=""/>
69 <#assign categoryName = ""/>
70 <#assign urlCyclicaEnglish=""/>
71 <#assign useParentLink = false/>
72 <#assign implement = false/>
73 <#assign showSisterCategories = true/>
74 <#assign buy = true/>
75 <#assign principalCategoryName = "" />
76 <#if ((categories??) && (categories?size>0)) >
77 <#assign category = categories[0]/>
78 <#assign parentCategoryId = category.getParentCategoryId()/>
79 <#assign categoryProperties = assetCategoryPropertyService.getCategoryProperties(category.getCategoryId())/>
80 <p style="display:none;" id="categoryId">
81 ${category.getCategoryId()}
82 </p>
83 <#assign principalCategoryName = category.getTitle(locale) />
84 <p style="display:none;" id="principalCategoryName">
85 ${principalCategoryName}
86 </p>
87 <#list categoryProperties as categoryProperty>
88 <#assign key=categoryProperty["key"]/>
89 <#if (key == "URL_CYCLICA") >
90 <#assign urlcyclica=categoryProperty["value"]/>
91 </#if>
92 <#if (key == "URL_CYCLICA_ENGLISH")>
93 <#assign urlCyclicaEnglish = categoryProperty["value"]/>
94 </#if>
95 <#if (key == "DONT_SHOW_CHILDS")>
96 <#assign useParentLink = true/>
97 </#if>
98 <#if (key == "DONT_BUY")>
99 <#assign buy = false/>
100 </#if>
101 <#if (key == "IMPLEMENT")>
102 <#assign implement = true/>
103 </#if>
104 <#if (key == "DONT_SHOW_SISTERS")>
105 <#assign showSisterCategories = false/>
106 </#if>
107 </#list>
108 </#if>
109 <@liferay_util["html-top"]>
110 <title>${principalCategoryName} ${values.brand} ${getLanguage(values.names)}</title>
111 </@>
112<#-- -------------------------------------------------------------------- FIN BUSQUEDA CATEGORIA -------------------------------------------------------------------- -->
113<#-- -------------------------------------------------------------------- MIGAS DE PAN -------------------------------------------------------------------- -->
114 <#macro renderBreadcrumb(layout)>
115 <#if layout??>
116 <#attempt>
117 <#-- Llamada recursiva para el layout padre-->
118 <#if layout.getParentLayoutId() != 0>
119 <#assign parentLayout = layoutLocalService.getLayout(groupId, false, layout.getParentLayoutId())>
120 <@renderBreadcrumb parentLayout />
121 </#if>
122
123 <#-- Renderizar el breadcrumb para el layout actual -->
124 <li class="dfc pb-10">
125 <#assign url_bc = "">
126 <#if locale == "en_GB">
127 <#assign url_bc = "/en" >
128 </#if>
129 <a class="dfc" href="${portalURL}${url_bc}${layout.getFriendlyURL(locale)}">
130 <span class="bold font-14 underline">${layout.getName(locale)}</span>
131 </a>
132 <i class="bi bi-slash-lg ml-5 mr-5" style="transform: rotate(-25deg);"></i>
133 </li>
134 <#recover>
135 </#attempt>
136 </#if>
137 </#macro>
138 <#assign lastUrl="" />
139 <#assign name = getLanguage(values.longnames)/>
140 <#attempt>
141
142
143 <#if useParentLink>
144 <#assign categoryHreflist = friendlyURLEntryLocalService.getFriendlyURLEntries(groupId,assetCategoryClassNameId, category.parentCategoryId)/>
145 <#else>
146 <#assign categoryHreflist = friendlyURLEntryLocalService.getFriendlyURLEntries(groupId,assetCategoryClassNameId, category.categoryId)/>
147 </#if>
148 <#assign categoryHrefLocale = friendlyURLEntryLocalService.getFriendlyURLEntryLocalization(categoryHreflist[categoryHreflist?size - 1].getFriendlyURLEntryId(), locale)/>
149 <#assign targetLayout = layoutLocalService.fetchLayoutByFriendlyURL(groupId, false, "/"+categoryHrefLocale.urlTitle) />
150 <#assign lastUrl=portalURL+targetLayout.getFriendlyURL(locale) />
151
152 <div class=" portlet-breadcrumb cc pt-10">
153 <ul class="dfc m-difc ">
154 <li class="dfc pb-10">
155 <a id="lastUrl"><i
156 class="bi bi-arrow-left-short font-24 mr-20"></i></a>
157 </li>
158 <@renderBreadcrumb targetLayout />
159 <#if (values.longnames)?? && (name!="")>
160 <li class="dfc pb-10">
161 <span class="active font-14">${name}</span>
162
163 </li>
164 </#if>
165 </ul>
166 </div>
167 <#-- Función recursiva para construir las migas de pan -->
168
169
170 <#recover>
171 </#attempt>
172<#-- -------------------------------------------------------------------- FIN MIGAS DE PAN -------------------------------------------------------------------- -->
173
174
175 <#assign productImage="" />
176 <section class="produc-detail">
177 <div class="cc pb-40">
178 <div class="col">
179
180 <p style="display:none;" id="productId">
181 ${objectEntryId}
182 </p>
183 <#-- -------------------------------------------------------------------- MOSTRAR NOMBRE -------------------------------------------------------------------- -->
184
185 <div class="pt-header mb-40 pb-40 bb-gray2">
186 <div class="pr-title">
187 <#if (values.longnames)?? && (name!="")>
188 <h1 class="font-36 bold mb-20 m-font-24">${name}</h1>
189
190 </#if>
191 </div>
192 <#-- -------------------------------------------------------------------- FIN MOSTRAR NOMBRE -------------------------------------------------------------------- -->
193 <#assign description = getLanguage(values.description)/>
194 <div class="pr-desc">
195
196 <div class="img-marca mb-20 pb-20 bb-gray2 df aic sb">
197 <#if (values.brand)?? && (values.brand?length > 0)>
198
199 <p style="display:none;" id="productBrand">
200 ${values.brand}
201 </p>
202 <p style="display:none;" id="productUrl">
203 ${hostname}/productos/${values.productUrlEs}
204 </p>
205 <#-- <h3 class="pt-2">Marca: </h3> -->
206 <img src="/o/finanzauto-theme/images/marca/${values.brand?lower_case}.svg"/>
207 </#if>
208
209 <div class="toggle-sys mb-0 tar df aic jce p-20" id="metric-imperial-button">
210 <label class="font-12 bold mr-10"><@liferay.language key="finanzauto.products.unidades.medida" />
211 : </label>
212 <div class="dfc mt-0 mb-0">
213 <p onclick="toggleElements('metric')" id="metric"
214 class="cp mt-0 btn-master bg-primary h-40 "><@liferay.language key="finanzauto.products.metrico" /></p>
215 <p onclick="toggleElements('imperial')" id="imperial"
216 class="cp mt-0 btn-master ml-10 h-40"><@liferay.language key="finanzauto.products.imperial" /></p>
217 </div>
218 </div>
219 </div>
220
221 <#if (values.featuredSpecifications)?? && (values.featuredSpecifications?length > 0)>
222 <div id="featuredSpecifications">${getLanguageSection(values.featuredSpecifications)}</div>
223 </#if>
224 <#-- TO:DO -->
225 <#if buy>
226 <p class="mt-40 font-18 bold mb-20">
227 <@liferay.language key="finanzauto.products.disponibilidad" />
228 </p>
229 <div class="grid-3 gap-20 pb-20 mb-20 bb-gray2">
230 <a class="btn-master w-100 border-neutral300 normal" style="pointer-events: none"
231 href="javascript:void(0)"><@liferay.language key="finanzauto.products.compra" /></a>
232 <a class="btn-master w-100 border-neutral300 normal" style="pointer-events: none"
233 href="javascript:void(0)"><@liferay.language key="finanzauto.products.alquiler" /></a>
234
235 <#if locale=="es_ES" && urlcyclica!="#" && urlcyclica!="" >
236 <a class="btn-master w-100 border-neutral300 underline usada" target="_blank"
237 href="${urlcyclica}"><@liferay.language key="finanzauto.products.usada" /></a>
238 <#elseif locale=="en_GB" && urlCyclicaEnglish!="#" && urlCyclicaEnglish!="" >
239 <a class="btn-master w-100 border-neutral300 underline usada" target="_blank"
240 href="${urlCyclicaEnglish}"><@liferay.language key="finanzauto.products.usada" /></a>
241 <#else>
242 <a class="btn-master w-100 border-neutral300 normal" style="display: none"
243 href="javascript:void(0)"><@liferay.language key="finanzauto.products.usada" /></a>
244 </#if>
245
246 </div>
247 </#if>
248 <div class="grid-2 gap-20 mb-40">
249 <button id="btn-llamanos" class="cp btn-master bg-n c-white h-50 b-0"
250 onclick="callFinanzauto()"><i
251 class="bi bi-telephone mr-10 font-18"></i><@liferay.language key="finanzauto.products.llamanos" />
252 </button>
253 <button id="btn-interesa" onclick="showModalProductAndPushAnalytics()"
254 class="cp btn-master bg-primary h-50 c-white b-0"><@liferay.language key="finanzauto.products.me.interesa" />
255 <i class="ml-5 bi bi-arrow-right-short font-24"></i></button>
256 </div>
257 <div id="scroll-point-of-no-return" class="h-1 w-100"></div>
258 <#if (values.description)?? && (description!="")>
259 <p class="font-16 c-neutral800">${description}</p>
260 </#if>
261
262
263 </div>
264 <#-- -------------------------------------------------------------------- AGRUPAR ARCHIVOS -------------------------------------------------------------------- -->
265 <#assign imageList = [] />
266 <#assign featuresImageList = [] />
267 <#assign pdfList = [] />
268 <#assign attachmentFiles = cpAttachmentFileEntryService.getCPAttachmentFileEntries(classNameId, objectEntryId, 0, 0, -1, -1) />
269 <#-- Fotos por defecto (API Caterpillar) -->
270 <div class="pr-images gap-10 pr h-530">
271 <#list attachmentFiles as attachmentFile>
272 <#attempt>
273 <#assign file = dlFileEntryLocalService.getFileEntry(attachmentFile.getFileEntryId())>
274
275 <#if file.extension=="jpg"|| file.extension=="jpeg"||file.extension=="png">
276 <#if file.fileName?contains("features")>
277 <#assign featuresImageList = featuresImageList + [file] />
278 <#elseif !file.fileName?contains("no2dimage2davailable") && !file.fileName?contains("no-image-available")>
279 <#assign imageList = imageList + [file] />
280 </#if>
281 <#elseif file.extension=="pdf">
282 <#assign pdfList = pdfList + [file]>
283 <#else>
284 </#if>
285 <#recover>
286 </#attempt>
287
288 </#list>
289 <#assign imageList = imageList?sort_by("fileName")>
290
291
292 <#-- -------------------------------------------------------------------- FIN AGRUPAR ARCHIVOS -------------------------------------------------------------------- -->
293
294 <#-- -------------------------------------------------------------------- FOTOS -------------------------------------------------------------------- -->
295 <#-- Fotos personalizadas -->
296 <#assign imagesRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "images").getObjectRelationshipId() >
297 <#assign images=objectEntryLocalService.getOneToManyObjectEntries(groupId, imagesRelationshipId, objectEntryId, true, -1, -1)>
298 <#list images as image>
299
300 <#attempt>
301 <#assign fileId = image.getValues()["image"]>
302 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
303
304 <#if file.fileName?contains("features")>
305 <#assign featuresImageList = featuresImageList + [file] />
306 <#else>
307 <#assign imageList = imageList + [file] />
308 </#if>
309 <#recover>
310 </#attempt>
311 </#list>
312
313 <#if (imageList?size > 0)>
314 <#-- <h3 class="pt-2">Imágenes</h3> -->
315
316 <#-- mobile -->
317 <div class="image-selector-mobile" style="display:none;">
318 <#assign activeImage="active" />
319 <ul class="mobile-carousel">
320
321 <#assign counter=0 />
322 <#assign visibleElem ="" />
323 <#list imageList as image>
324
325 <li data-id="mobiole-${counter}" class="pr cp ${activeImage}">
326 <img class="pa w-100 h-100 ofc bg-white" loading="lazy"
327 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Preview-1000x0/${image.fileName}"/>
328 </li>
329 <#assign activeImage="" />
330 <#assign counter=counter + 1 />
331
332
333 </#list>
334
335 <#if (values.videosUrls)??>
336 <#assign videos = values.videosUrls?split("\n")>
337 <#list videos as video>
338 <#if video != "" >
339 <li data-id="${counter}"
340 class="pr cp ${activeImage} video-yt" ${visibleElem}>
341 <div class="overlay c-video"></div>
342 <div class="btn-play c-video"><i class="bi bi-play-circle-fill"></i>
343 </div>
344 <img data-url="${video}" class="pa w-100 h-100 ofc bg-white"
345 loading="lazy"
346 src="${video?replace('https://www.youtube.com/embed/','https://i.ytimg.com/vi_webp/')}/default.webp"/>
347
348 <#assign counter=counter + 1 />
349
350 </li>
351 </#if>
352 </#list>
353 </#if>
354
355 </ul>
356 </div> <#-- fin mobile -->
357
358
359 <#-- Mostramos todas las fotos -->
360 <div class="image-selector">
361 <#assign activeImage="active" />
362 <ul class="principal-carousel">
363
364 <#assign counter=0 />
365 <#assign visibleElem ="" />
366 <#list imageList as image>
367 <#-- <div class="w-80 h-80 pr mb-10 cp ${activeImage}"><i class="bi bi-x" style="display:none;"></i>
368 <span><img class="pa w-100 h-100 ofc bg-white" src="${portalURL}/documents/${image.repositoryId}/${image.folderId}/${image.fileName}"/></span>
369 <#assign activeImage="" />
370 </div> -->
371
372 <li data-id="${counter}" class="w-80 h-90 pr cp ${activeImage}">
373 <img class="pa w-100 h-80 ofc bg-white" loading="lazy"
374 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Preview-1000x0/${image.fileName}"/>
375 </li>
376 <#assign activeImage="" />
377 <#assign counter=counter + 1 />
378
379
380 </#list>
381
382 <#if (values.videosUrls)??>
383 <#assign videos = values.videosUrls?split("\n")>
384 <#list videos as video>
385 <#if video != "" >
386 <li data-id="${counter}"
387 class="w-80 h-90 pr cp ${activeImage} video-yt" ${visibleElem}>
388 <div class="overlay c-video"></div>
389 <div class="btn-play c-video"><i class="bi bi-play-circle-fill"></i>
390 </div>
391 <img data-url="${video}" class="pa w-100 h-80 ofc bg-white"
392 loading="lazy"
393 src="${video?replace('https://www.youtube.com/embed/','https://i.ytimg.com/vi_webp/')}/default.webp"/>
394 <#-- <iframe style="display:none;" width="100" height="80" src="${video}" frameborder="0" allowfullscreen></iframe> -->
395 <#assign counter=counter + 1 />
396
397 </li>
398 </#if>
399 </#list>
400 </#if>
401
402 </ul>
403 </div>
404 <div class="image-principal pr h-530 bg-white" data-size="${imageList?size - 1}">
405 <#list imageList as image>
406 <span><span class="arrow-prev disabled" style="display: none;"><i
407 class="bi bi-chevron-left"></i></span><span class="arrow-next"
408 style="display: none;"><i
409 class="bi bi-chevron-right"></i></span><i class="bi bi-x"
410 style="display:none;"></i>
411 <img class="pa w-100 h-100 ofc bg-white" loading="lazy"
412 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Preview-1000x0/${image.fileName}"/></span>
413 <span class="w-28 h-28 db bg-n br-50 pa b-20 r-20 c-white cp zoom-it z-2"><i
414 class="bi bi-zoom-in"></i></span>
415 <#assign productImage>
416 ${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Preview-1000x0/${image.fileName}
417 </#assign>
418
419
420 <#break>
421 </#list>
422 </div>
423 <#else>
424 <div>
425
426 </div>
427 <div class="image-principal pr h-530 bg-white" data-size="${1}">
428 <img class="pa w-100 h-100 ofc bg-white" loading="lazy"
429 src="/o/finanzauto-theme/images/no-photo.jpg"/></span>
430 </div>
431 </#if>
432
433
434 </div>
435 </div>
436 <#-- -------------------------------------------------------------------- FIN FOTOS-------------------------------------------------------------------- -->
437 <#-- -------------------------------------------------------------------- PDFS -------------------------------------------------------------------- -->
438
439 <#-- <#if (pdfList?size > 0)>
440 <div class="mb-40 pb-40 bb-gray2 w-100">
441 <h2 class="pb-40 font-32 c-neutral950"><@liferay.language key="documents" /></h2>
442 <div class="pdf-container grid-4 gap-20">
443 <#list pdfList as pdf>
444 <a class="bg-white p-20 br-5 font-14 df" href="${portalURL}/documents/${pdf.repositoryId}/${pdf.folderId}/${pdf.fileName}" download>
445 <i class="bi bi-file-earmark-pdf"></i>
446 ${pdf.fileName}
447 </a>
448 </#list>
449 </div>
450 </div>
451 </#if>
452 -->
453 <#-- -------------------------------------------------------------------- FIN PDFS -------------------------------------------------------------------- -->
454 <#-- -------------------------------------------------------------------- VENTAJAS -------------------------------------------------------------------- -->
455
456 <#assign activeElements=0/>
457
458
459 <#assign getType=""/>
460 <#assign advantages = getLanguageSection(values.advantages)/>
461 <#if (values.advantages)?? && (advantages!="")>
462 <#assign activeElements=1/>
463 <#assign getType>${getType} <a href="javascript:void(0)"
464 class="active btn-master bg-g font-15 mr-5 br-30 bold bg-primary h-50"
465 data-rel="ventajas">
466 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.ventajas" /></p>
467 </a></#assign>
468 </#if>
469
470 <#if (values.features)?? && (values.features?length > 0)>
471 <#if activeElements==0>
472 <#assign activeElements=2/>
473 <#assign getType>${getType} <a href="javascript:void(0)"
474 class="active btn-master bg-primary bold font-15 mr-5 br-30 pl-30 pr-30 h-50"
475 data-rel="caracteristicas">
476 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.caracteristicas" /></p>
477 </a></#assign>
478 <#else>
479 <#assign getType>${getType} <a href="javascript:void(0)"
480 class="btn-master bg-g normal font-15 mr-5 br-30 pl-30 pr-30 h-50"
481 data-rel="caracteristicas">
482 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.caracteristicas" /></p>
483 </a></#assign>
484 </#if>
485 </#if>
486
487 <#if (values.specifications)?? && (values.specifications?length > 0)>
488 <#if activeElements==0>
489 <#assign activeElements=3/>
490 <#assign getType>${getType} <a href="javascript:void(0)"
491 class="active btn-master mr-5 bg-primary bold font-15 br-30 pl-30 pr-30 h-50"
492 data-rel="especificaciones">
493 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.especificaciones" /></p>
494 </a></#assign>
495 <#else>
496 <#assign getType>${getType} <a href="javascript:void(0)"
497 class="btn-master mr-5 bg-g normal font-15 br-30 pl-30 pr-30 h-50"
498 data-rel="especificaciones">
499 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.especificaciones" /></p>
500 </a></#assign>
501 </#if>
502
503 </#if>
504
505 <#-- Pdfs personalizadas -->
506 <#assign documentsRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "documents").getObjectRelationshipId() >
507 <#assign documents=objectEntryLocalService.getOneToManyObjectEntries(groupId, documentsRelationshipId, objectEntryId, true, -1, -1)>
508 <#list documents as document>
509 <#assign fileId = document.getValues()["document"]>
510
511 <#attempt>
512 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
513 <#assign pdfList = pdfList + [file]>
514 <#recover>
515 </#attempt>
516 </#list>
517 <#if (pdfList?size > 0)>
518
519 <#if activeElements==0>
520 <#assign activeElements=4/>
521 <#assign getType>${getType} <a href="javascript:void(0)"
522 class="active btn-master bg-primary bold font-15 br-30 pl-30 pr-30 h-50"
523 data-rel="documentos">
524 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.documentos" /></p>
525 </a></#assign>
526 <#else>
527 <#assign getType>${getType} <a href="javascript:void(0)"
528 class="btn-master bg-g normal font-15 br-30 pl-30 pr-30 h-50"
529 data-rel="documentos">
530 <p class="pl-10 pr-10"><@liferay.language key="finanzauto.products.documentos" /></p>
531 </a></#assign>
532 </#if>
533
534 </#if>
535
536 <div class="tag-navigation mb-20">
537 ${getType}
538 </div>
539
540
541 <#if (values.advantages)?? && (advantages!="")>
542
543 <#assign style>
544 style="display:none;"
545 </#assign>
546 <#if activeElements == 1>
547 <#assign style="" />
548 </#if>
549 <div class="tag-content" id="ventajas" ${style}>${advantages}</div>
550 </#if>
551
552 <#-- -------------------------------------------------------------------- FIN VENTAJAS -------------------------------------------------------------------- -->
553 <#-- -------------------------------------------------------------------- CARACTERÍSTICAS -------------------------------------------------------------------- -->
554
555
556 <#if (values.features)?? && (values.features?length > 0)>
557
558 <#-- <h3 class="pt-4">Características</h3> -->
559 <#assign counter = 0>
560 <#assign features = getLanguageSection(values.features)>
561 <#assign featuresImageList = featuresImageList?sort_by("fileName")>
562
563
564
565 <#if (featuresImageList?size > 0)>
566 <#list 0..(featuresImageList?size-1) as i>
567 <#if features?contains("FEATURE_IMAGE")>
568 <#assign image = featuresImageList[counter]>
569 <#assign imageText = "<img loading='lazy' style='height:400px;width:auto'src='${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Preview-1000x0/${image.fileName}'"/>
570 <#assign features = features?replace("<p>FEATURE_IMAGE</p>", imageText,"f")>
571 <#assign counter = counter + 1>
572 </#if>
573 </#list>
574 </#if>
575 <#assign features = features?replace("<p>FEATURE_IMAGE</p>", ' <img class="height:400px;width:auto" loading="lazy"
576 src="/o/finanzauto-theme/images/no-photo.jpg"/>',"a")>
577
578
579 <#assign style>
580 style="display:none;"
581 </#assign>
582 <#if activeElements == 2>
583 <#assign style="" />
584 </#if>
585 <div class="tag-content" id="caracteristicas" ${style}>${features}</div>
586 </#if>
587
588 <#if (pdfList?size > 0)>
589 <#assign style>
590 style="display:none;"
591 </#assign>
592 <#if activeElements == 3>
593 <#assign style="" />
594 </#if>
595 <div class="tag-content" id="documentos" ${style}>
596 <div class="pdf-container grid-4 gap-20">
597 <#list pdfList as pdf>
598 <a class="bg-white p-20 br-5 font-14 df"
599 href="${portalURL}/documents/${pdf.repositoryId}/${pdf.folderId}/${pdf.fileName}"
600 download>
601 <i class="bi bi-file-earmark-pdf"></i>
602 ${pdf.fileName}
603 </a>
604 </#list>
605 </div>
606 </div>
607
608 </#if>
609 <#-- -------------------------------------------------------------------- FIN CARACTERÍSTICAS-------------------------------------------------------------------- -->
610 <#-- -------------------------------------------------------------------- ESPECIFICACIONES -------------------------------------------------------------------- -->
611 <#if (values.specifications)?? && (values.specifications?length > 0)>
612 <#assign getType>${getType} Especificaciones</#assign>
613 <#-- <h3 class="pt-4">Especificaciones</h3> -->
614 <#assign style>
615 style="display:none;"
616 </#assign>
617 <#if activeElements == 3>
618 <#assign style="" />
619 </#if>
620 <div class="tag-content"
621 id="especificaciones" ${style}>${getLanguageSection(values.specifications)}</div>
622 </#if>
623
624
625 </div>
626 </div>
627 <div class="bg-neutral100 pt-40">
628
629 <div class="cc">
630 <#-- -------------------------------------------------------------------- FIN ESPECIFICACIONES-------------------------------------------------------------------- -->
631 <#-- -------------------------------------------------------------------- RELACIONADOS -------------------------------------------------------------------- -->
632
633
634 <#if (category??) >
635 <#assign allObjectsValues =[] />
636 <#assign allBrothersObjectsValues =[] />
637 <#--Productos hermanos -->
638 <#assign hits = assetEntryLocalService.search(companyId,[groupId],0,className,"","","",category.getCategoryId()+"","",0,true,0,99).getDocs()>
639 <#list hits as hit>
640 <#assign objectId = hit.entryClassPK?number />
641 <#if (objectId!= objectEntryId) >
642 <#-- ------------- Valores del producto ------------- -->
643 <#assign valuesR = objectEntryLocalService.getValues(objectId) />
644 <#assign valuesR = valuesR + {"objectEntryId": objectId}>
645 <#assign allBrothersObjectsValues = allBrothersObjectsValues + [valuesR] />
646 </#if>
647 </#list>
648 </#if>
649 <#--Productos relacionados -->
650 <#if (values.relationships)?? && (values.relationships?length > 0)>
651 <#list values.relationships?split("\n") as relationship>
652 <#assign objectSearchBaseModels = objectEntryLocalService.searchObjectEntries(groupId,objectDefinitionId,relationship, 1, 1)>
653 <#if (objectSearchBaseModels.baseModels?size>0) >
654 <#assign addToAllObjects = true />
655 <#assign objectSearch = objectSearchBaseModels.baseModels[0]>
656 <#assign objectId = objectSearch.objectEntryId>
657 </#if>
658 <#-- Verificar si objectId ya está en allObjectsValues -->
659 <#attempt>
660 <#list allBrothersObjectsValues as objectValues>
661 <#if objectValues.objectEntryId == objectId >
662 <#assign addToAllObjects = false />
663 </#if>
664 </#list>
665 <#if addToAllObjects >
666 <#assign valuesR = objectEntryLocalService.getValues(objectId)>
667 <#assign valuesR = valuesR + {"objectEntryId": objectId}>
668 <#assign allObjectsValues = allObjectsValues + [valuesR] />
669 </#if><#recover></#attempt>
670 </#list>
671
672 </#if>
673 <#-- ------------- Tambien te puede interesar: ------------- -->
674 <#if (allBrothersObjectsValues)?? &&(allBrothersObjectsValues?size > 0) >
675 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.related"/></h2>
676
677
678 <div class="mb-40 p-relacionados">
679 <ul class="pb-20 product-carousel">
680 <#assign hideLoadCarousel = "" />
681
682 <#assign allBrothersObjectsValues = allBrothersObjectsValues?sort_by("names")>
683 <#assign count=0 >
684 <#list allBrothersObjectsValues as valuesR>
685 <#assign count=count+1 >
686 <#assign imageList = [] />
687
688 <#-- ------------- Imagen del producto ------------- -->
689 <#assign attachmentFiles = cpAttachmentFileEntryService.getCPAttachmentFileEntries(classNameId, valuesR.objectEntryId, 0, 0, -1, -1) />
690 <#list attachmentFiles as attachmentFile>
691
692 <#attempt>
693 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile.getFileEntryId())/>
694 <#if (image.extension=="jpg"|| image.extension=="jpeg"||image.extension=="png") && !image.fileName?contains("features") && !image.fileName?contains("no2dimage2davailable")>
695 <#assign imageList = imageList + [image] />
696 </#if>
697 <#recover>
698 </#attempt>
699 </#list>
700 <#assign image = -1>
701 <#assign imageList = imageList?sort_by("fileName")>
702 <#if (imageList?size>0)>
703 <#assign image = imageList[0]>
704 <#else><#-- Fotos personalizadas -->
705 <#assign imagesRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "images").getObjectRelationshipId() >
706 <#assign images=objectEntryLocalService.getOneToManyObjectEntries(groupId, imagesRelationshipId, valuesR.objectEntryId, true, -1, -1)>
707 <#list images as image>
708 <#assign fileId = image.getValues()["image"]>
709 <#attempt>
710 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
711 <#assign imageList = imageList + [file]>
712 <#recover>
713 </#attempt>
714 </#list>
715
716 <#assign imageList = imageList?sort_by("fileName")>
717 <#if (imageList?size>0)>
718 <#assign image = imageList[0]>
719 </#if>
720 </#if>
721 <li ${hideLoadCarousel}>
722 <#if locale=="es_ES" >
723 <a href="/productos/${valuesR.productUrlEs}" class="w-card product w-100 br-10 oh">
724 <#else>
725 <a href="/en/products/${valuesR.productUrlEn}"
726 class="w-card product w-100 br-10 oh">
727 </#if>
728 <span class="image">
729 <#if (image?? && (!image?is_number)) >
730
731 <img class="ofc" loading="lazy"
732 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
733 <#else>
734 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
735 </#if>
736 </span>
737 <span class="container">
738 <span class="c-title bb-gray pt-10 pb-10 mb-10 dfc sb">
739 <h3 class="underline bold font-15">
740 ${getLanguage(valuesR.names)}
741 </h3>
742 <span class="card-chevron dfcc w-28 h-28 border-white br-50 circle-white"><i
743 class="bi bi-chevron-right bold"></i></span>
744 </span>
745 <span class="c-info font-14 c-neutral900">
746 ${getLanguageSection(valuesR.featuredSpecifications)}
747 </span>
748 <p style="display:none;"
749 class="product-brand">${valuesR.brand}</p>
750 <p style="display:none;"
751 class="product-id">${valuesR.objectEntryId}</p>
752 </span>
753
754 </a>
755
756 </li>
757 <#if count == 4 >
758 <#assign hideLoadCarousel>style="display:none"</#assign>
759 </#if>
760 <#if count == maxRelationships >
761 <#break>
762 </#if>
763 </#list>
764 </ul>
765 </div>
766 </#if>
767 <#-- ------------- Implementos compatibles: ------------- -->
768 <#if (allObjectsValues??)&&(allObjectsValues?size > 0) >
769
770 <#if implement>
771 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.maquinas"/></h2>
772 <#else>
773 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.implementos"/></h2>
774 </#if>
775
776
777 <div class="mb-40 p-relacionados">
778 <ul class="pb-20 product-implements-carousel">
779 <#assign hideLoadCarousel = "" />
780
781 <#assign allObjectsValues = allObjectsValues?sort_by("names")>
782 <#assign count=0 >
783 <#list allObjectsValues as valuesR>
784 <#assign count=count+1 >
785 <#assign imageList = [] />
786
787 <#-- ------------- Imagen del producto ------------- -->
788 <#assign attachmentFiles = cpAttachmentFileEntryService.getCPAttachmentFileEntries(classNameId, valuesR.objectEntryId, 0, 0, -1, -1) />
789 <#list attachmentFiles as attachmentFile>
790 <#attempt>
791 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile.getFileEntryId())/>
792 <#if (image.extension=="jpg"|| image.extension=="jpeg"||image.extension=="png") && !image.fileName?contains("features") && !image.fileName?contains("no2dimage2davailable")>
793 <#assign imageList = imageList + [image] />
794 </#if>
795 <#recover>
796 </#attempt>
797 </#list>
798 <#assign image = -1>
799 <#assign imageList = imageList?sort_by("fileName")>
800 <#if (imageList?size>0)>
801 <#assign image = imageList[0]>
802 <#else><#-- Fotos personalizadas -->
803 <#assign imagesRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "images").getObjectRelationshipId() >
804 <#assign images=objectEntryLocalService.getOneToManyObjectEntries(groupId, imagesRelationshipId, valuesR.objectEntryId, true, -1, -1)>
805 <#list images as image>
806 <#attempt>
807 <#assign fileId = image.getValues()["image"]>
808 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
809 <#assign imageList = imageList + [file]>
810
811 <#recover>
812 </#attempt>
813 </#list>
814
815 <#assign imageList = imageList?sort_by("fileName")>
816 <#if (imageList?size>0)>
817 <#assign image = imageList[0]>
818 </#if>
819 </#if>
820 <li ${hideLoadCarousel}>
821 <#if locale=="es_ES" >
822 <a href="/productos/${valuesR.productUrlEs}" class="w-card product w-100 br-10 oh">
823 <#else>
824 <a href="/en/products/${valuesR.productUrlEn}"
825 class="w-card product w-100 br-10 oh">
826 </#if>
827 <span class="image">
828 <#if (image?? && (!image?is_number)) >
829 <img class="ofc" loading="lazy"
830 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
831 <#else>
832 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
833 </#if>
834 </span>
835 <#assign sectionLength = 1 />
836 <#attempt>
837 <#if getLanguageSection(valuesR.featuredSpecifications)?length == 0>
838 <#assign sectionLength = 0 />
839 </#if>
840 <#recover>
841
842 </#attempt>
843 <span class="container container-${sectionLength}">
844 <span class="c-title bb-gray pt-10 pb-10 mb-10 dfc sb">
845 <h3 class="underline bold font-15">
846 ${getLanguage(valuesR.names)}
847 </h3>
848 <span class="card-chevron dfcc w-28 h-28 border-white br-50 circle-white"><i
849 class="bi bi-chevron-right bold"></i></span>
850 </span>
851 <span class="c-info font-14 c-neutral900">
852 ${getLanguageSection(valuesR.featuredSpecifications)}
853
854 </span>
855 <p style="display:none;"
856 class="product-brand">${valuesR.brand}</p>
857 <p style="display:none;"
858 class="product-id">${valuesR.objectEntryId}</p>
859 </span>
860
861 </a>
862
863 </li>
864 <#if count == 4 >
865 <#assign hideLoadCarousel>style="display:none"</#assign>
866 </#if>
867 <#if count == maxRelationships >
868 <#break>
869 </#if>
870 </#list>
871 </ul>
872 </div>
873 </#if>
874
875
876 <#-- -------------------------------------------------------------------- FIN RELACIONADOS -------------------------------------------------------------------- -->
877
878 <#-- -------------------------------------------------------------------- CATEGORIAS RELACIONADAS -------------------------------------------------------------------- -->
879
880 <#assign count=0 >
881 <#if ((categories??) && (categories?size>0)) >
882 <#assign sisterCategories = assetCategoryLocalService.getSubcategoryIds(parentCategoryId)/>
883 <#assign parentCategory = category.getParentCategory()/>
884 <#assign parentCategoryName = parentCategory.getName() />
885
886 <#assign hideLoadCarousel = "" />
887
888 <#assign categories = [] />
889 <#list sisterCategories as categoryId>
890 <#assign showCategory = true/>
891 <#if categoryId!= parentCategoryId && categoryId!=category.getCategoryId()>
892 <#assign sisterCategory = assetCategoryLocalService.getAssetCategory(categoryId)/>
893 <#assign categoryProperties = assetCategoryPropertyService.getCategoryProperties(categoryId)/>
894 ${sisterCategory.setName("99")}
895 <#list categoryProperties as categoryProperty>
896 <#assign key=categoryProperty["key"]/>
897 <#if (key == "SORT") >
898 ${sisterCategory.setName(categoryProperty["value"])}
899 </#if>
900 <#if (key == "DONT_SHOW_CHILDS") >
901 <#assign showCategory = false/>
902 </#if>
903 </#list>
904
905 <#if showCategory >
906 <#assign categories = categories+[sisterCategory] />
907 </#if>
908 </#if>
909 </#list>
910 <#if ((categories??) && (categories?size>0)) && showSisterCategories >
911 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.other.categories"/>
912 ${parentCategoryName}:</h2>
913 <div class="mb-40 p-relacionados">
914 <ul class="pb-20 categories-carousel">
915 <#assign categories = categories?sort_by("name")>
916
917 <#list categories as category>
918 <#attempt>
919 <#assign count=count+1 >
920 <#assign categoryId = category.getCategoryId() />
921
922 <#assign attachmentFile = cpAttachmentFileEntryService.getCPAttachmentFileEntries(assetCategoryClassNameId, categoryId, 0, 0, -1, -1) />
923 <#assign image=-1>
924 <#if ((attachmentFile??) && (attachmentFile?size>0))>
925 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile[0].getFileEntryId())>
926 </#if>
927 <#assign categoryName = category.getTitle(locale) />
928 <#assign categoryHreflist = friendlyURLEntryLocalService.getFriendlyURLEntries(groupId,assetCategoryClassNameId, categoryId)/>
929
930 <#list categoryHreflist as categoryHref>
931 <#assign categoryHrefLocale = friendlyURLEntryLocalService.getFriendlyURLEntryLocalization(categoryHref.getFriendlyURLEntryId(),locale)/>
932 </#list>
933 <li ${hideLoadCarousel}>
934 <#assign url_bc = "">
935 <#if locale == "en_GB">
936 <#assign url_bc = "/en" >
937 </#if>
938
939 <a href="${url_bc}/${categoryHrefLocale.getUrlTitle()?replace('/g/','/')}"
940 class="w-card w-100 product fleet">
941 <span class="image p-15">
942 <#if image?? && (!image?is_number) >
943 <img class="ofc" loading="lazy"
944 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
945 <#else>
946 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
947 </#if>
948 </span>
949 <span class="container">
950 <span class="card-title">
951 <h3 class="underline m-font-14 font-16">
952 ${categoryName}
953 </h3>
954 <span class="card-chevron dfcc w-32 h-32 border-white br-50"><i
955 class="bi bi-chevron-right"></i></span>
956 </span>
957 </span>
958 </a>
959 </li>
960 <#if count == 4 >
961 <#assign hideLoadCarousel>style="display:none"</#assign>
962 </#if>
963 <#recover>
964 </#attempt>
965 </#list>
966 </ul>
967 </div>
968 </#if>
969 </#if>
970
971
972
973 <#-- -------------------------------------------------------------------- FIN CATEGORIAS RELACIONADAS-------------------------------------------------------------------- -->
974
975 </div>
976
977 <#if ((values.url360Inside)?? && (values.url360Inside?has_content)) || (values.url360Outside)?? &&(values.url360Outside?has_content) || ((values.urlVirtualShowroom)?? &&(values.urlVirtualShowroom?has_content)) >
978 <div class="bg-white pt-60 pb-60">
979 <div class="cc">
980 <#-- -------------------------------------------------------------------- 360 -------------------------------------------------------------------- -->
981
982 <#assign getIframe=""/>
983
984 <#assign selectedTab="selected" />
985 <#assign styleTab=""/>
986
987
988 <ul class="df jcc pb-5 mb-20 bb-gray">
989 <#if (values.url360Inside)?? && (values.url360Inside?has_content) >
990 <#assign secure360InsideUrl = values.url360Inside?replace("http:", "https:")>
991 <li class="pl-10 pr-10 pr"><h3 data-tab="1"
992 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.360.interior" /></h3>
993 </li>
994 <#assign getIframe>${getIframe}
995 <div id="data-tab-1" ${styleTab} class="content-tab df jcc">
996 <iframe class="border-0" width="750" height="750" src="${secure360InsideUrl}"
997 scrolling="no"></iframe>
998 </div></#assign>
999 <#assign selectedTab="normal" />
1000 <#assign styleTab>style="display:none;"</#assign>
1001 </#if>
1002
1003 <#if (values.url360Outside)?? &&(values.url360Outside?has_content) >
1004 <#assign secure360OutsideUrl = values.url360Outside?replace("http:", "https:")>
1005 <li class="pl-10 pr-10 pr"><h3 data-tab="2"
1006 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.360.exterior" /></h3>
1007 </li>
1008 <#assign getIframe>${getIframe}
1009 <div id="data-tab-2" ${styleTab} class="content-tab df jcc">
1010 <iframe class="border-0" width="750" height="750"
1011 src="${secure360OutsideUrl}" scrolling="no"></iframe>
1012 </div></#assign>
1013 <#assign selectedTab="normal" />
1014 <#assign styleTab>style="display:none;"</#assign>
1015 </#if>
1016 <#-- -------------------------------------------------------------------- FIN 360-------------------------------------------------------------------- -->
1017 <#-- -------------------------------------------------------------------- TOUR VIRTUAL -------------------------------------------------------------------- -->
1018 <#if (values.urlVirtualShowroom)?? &&(values.urlVirtualShowroom?has_content) >
1019 <#assign secureVirtualShowroomUrl = values.urlVirtualShowroom?replace("http:", "https:")>
1020 <li class="pl-10 pr-10 pr"><h3 data-tab="3"
1021 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.tour.virtual" /></h3>
1022 </li>
1023 <#assign getIframe>${getIframe}
1024 <div id="data-tab-3" ${styleTab} class="content-tab df jcc">
1025 <iframe class="border-0" width="750" height="750"
1026 src="${secureVirtualShowroomUrl}" scrolling="no"></iframe></div></#assign>
1027 <#assign selectedTab="normal" />
1028 <#assign styleTab>style="display:none;"</#assign>
1029 </#if>
1030 </ul>
1031 <div class="tabs-container">
1032 ${getIframe}
1033 </div>
1034 <#-- -------------------------------------------------------------------- FIN TOUR VIRTUAL-------------------------------------------------------------------- -->
1035 </div>
1036 </div>
1037 </#if>
1038 </div>
1039 </div>
1040
1041 <div id="fixed-info" class="bb-gray2">
1042 <div class="cc dfc sb h-85 gap-20">
1043 <span class="dfc m-dn"><span class="db w-70 h-70 pr mr-20"><img class="pa w-100 h-100 l-0 t-0"
1044 loading="lazy"
1045 src="${productImage}"/></span><p
1046 class="mw-550 font-18 bold c-neutral900">${name}</p></span>
1047 <div class="grid-2 gap-20 w-100 mw-350 m-mw-i">
1048 <button
1049 class="btn-master bg-n c-white h-50 cp b-0" onclick="callFinanzauto()"><i
1050 class="bi bi-telephone mr-10 font-18 btn-llamanos"></i><@liferay.language key="finanzauto.products.llamanos" />
1051 </button>
1052 <button onclick="showModalProductAndPushAnalytics()"
1053 class="btn-interes btn-master bg-primary h-50 c-white b-0 cp"><@liferay.language key="finanzauto.products.me.interesa" />
1054 <i class="ml-5 bi bi-arrow-right-short font-24"></i></button>
1055 </div>
1056 </div>
1057 </div>
1058
1059
1060 </section>
1061 <div class="modal fade" id="modalPhone" tabindex="-1" role="dialog" aria-labelledby="modalNoResultsLabel"
1062 aria-hidden="true" style="display:none;">
1063 <div class="modal-dialog" role="document">
1064 <div class="modal-content">
1065 <div class="modal-header">
1066 <div class="panel-header tac pb-10 mb-30">
1067 <h2 class="h2 font-32 bold mt-40"><@liferay.language key="finanzauto.products.llamanos" /></h2>
1068 <button type="button" class="close-popup close" data-dismiss="modal" aria-label="Close">
1069 <span aria-hidden="true"><i class="bi bi-x"></i></span>
1070 </button>
1071 </div>
1072 </div>
1073 <div class="modal-body">
1074 <div class="panel cc pt-40 pb-40 maxw-900">
1075 <div class="panel-body">
1076 <div class="call-us">
1077 <a href="tel:+34${finanzautoPhone}"><span><i
1078 class="bi bi-telephone-outbound"></i></span></a>
1079 <p>
1080 <a href="tel:+34${finanzautoPhone}">+34 ${finanzautoPhone}</a>
1081 </p>
1082 </div>
1083 </div>
1084 </div>
1085 </div>
1086 </div>
1087 </div>
1088 </div>
1089 <style>
1090 .controls-visible.has-control-menu.scrolled-product div#fixed-info {
1091 margin-top: 0px !important;
1092 }
1093
1094 body.modal-open header#banner {
1095 z-index: 1;
1096 }
1097
1098 HTML body header#banner {
1099 transform: inherit !important;
1100 }
1101
1102 .w-card span.container.container-0 span.c-title {
1103 border: 0px;
1104 margin-bottom: 0px;
1105 padding-bottom: 0px;
1106 align-items: center;
1107 justify-content: center;
1108 }
1109
1110 @media (max-width: 990px) {
1111
1112 .active-video-ytb {
1113 position: fixed;
1114 top: 0px;
1115 left: 0px;
1116 z-index: 999;
1117 width: 100%;
1118 height: 100%;
1119 background-color: #fffffff5;
1120 display: flex;
1121 align-items: center;
1122 justify-content: center;
1123 padding-left: 20px;
1124 padding-right: 20px;
1125 }
1126
1127 .active-video-ytb iframe {
1128 width: 100%;
1129 max-height: calc(100% - 100px);
1130 height: 350px;
1131 border: 0px;
1132 max-width: 700px;
1133 }
1134
1135 .close-video-mobile {
1136 position: absolute;
1137 top: 10px;
1138 right: 15px;
1139 font-size: 29px;
1140 cursor: pointer;
1141 }
1142
1143 .youtube-mobile-video {
1144 overflow: hidden;
1145 }
1146
1147 .youtube-mobile-video #smartsupp-widget-container {
1148 visibility: hidden;
1149 }
1150 }
1151
1152
1153 @media (min-width: 770px) {
1154 body header#banner {
1155 position: relative !important;
1156 top: 0px;
1157 width: 100%;
1158 transform: translateY(0px) !important;
1159
1160 }
1161
1162 body.languagePopup header#banner {
1163 transform: inherit !important;
1164 }
1165 }
1166
1167 /*.portlet-breadcrumb ul li a, .portlet-breadcrumb ul li span {
1168 max-width: 350px;
1169 white-space: nowrap;
1170 overflow: hidden;
1171 text-overflow: ellipsis;
1172 }*/
1173
1174 .portlet-breadcrumb > ul > li {
1175 float: left;
1176 }
1177
1178 .portlet-breadcrumb > ul > li:first-child {
1179 position: absolute;
1180 left: 0px;
1181 }
1182
1183 .portlet-breadcrumb > ul {
1184 display: inline-block !important;
1185 width: 100%;
1186 padding-left: 44px;
1187 position: relative;
1188 box-sizing: border-box;
1189 }
1190
1191
1192 .b-0 {
1193 border: 0;
1194 }
1195
1196 .caterpillar #metric, .caterpillar #imperial {
1197 border: 1px solid #fc0;
1198 }
1199
1200 #metric, #imperial {
1201 margin-left: 0px;
1202 max-height: 30px;
1203 border: 1px solid #e4032e;
1204 }
1205
1206 #metric:not(.bg-primary) {
1207 font-weight: normal !important;
1208 }
1209
1210 #imperial:not(.bg-primary) {
1211 font-weight: normal !important;
1212 }
1213
1214 .image-selector {
1215 height: 530px;
1216 }
1217
1218 .principal-carousel:not(.tns-carousel) {
1219
1220 position: relative;
1221 max-height: 530px;
1222 overflow: hidden;
1223 }
1224
1225 .principal-carousel .btn-play i {
1226 color: #fff;
1227 font-size: 25px;
1228 }
1229
1230 .principal-carousel .btn-play {
1231 position: absolute;
1232 z-index: 3;
1233 width: 100%;
1234 height: 100%;
1235 display: flex;
1236 align-items: center;
1237 justify-content: center;
1238 }
1239
1240 body .principal-carousel .overlay {
1241 opacity: 0.6 !important;
1242 background-color: #242424 !important;
1243 z-index: 2 !important;
1244 height: 80px !important;
1245 width: 100%;
1246 position: absolute;
1247 top: 0px !important;
1248 }
1249
1250 .accordion-content {
1251 padding-top: 20px;
1252 }
1253
1254 div#especificaciones .tar {
1255 text-align: left;
1256 margin-top: 5px;
1257 margin-bottom: 5px;
1258 }
1259
1260 .pt-header {
1261 display: grid;
1262
1263 column-gap: 40px;
1264 grid: "a b""a c" 1fr;
1265 grid-template-columns: 60% 1fr;
1266 }
1267
1268 .pr-title {
1269 grid-area: b;
1270 }
1271
1272 .pr-desc {
1273 grid-area: c;
1274 }
1275
1276 .pr-images {
1277 grid-area: a;
1278 }
1279
1280 .pr-images {
1281 display: grid;
1282 grid-template-columns: 100px 1fr;
1283 width: 100%;
1284 }
1285
1286 .caterpillar .image-selector .active img {
1287 outline: 2px solid #FFCC00;
1288 outline-offset: -2px;
1289 }
1290
1291 .image-selector .active {
1292 outline: 2px solid #000;
1293 }
1294
1295 .image-selector > div:not(.active):hover {
1296 outline: 2px solid #9d9d9d;
1297 }
1298
1299 .product-carousel .tns-item {
1300 padding-right: 10px;
1301 }
1302
1303 .product-implements-carousel .tns-item {
1304 padding-right: 10px;
1305 }
1306
1307 .categories-carousel .tns-item {
1308 padding-right: 10px;
1309 }
1310
1311 .p-relacionados .tns-outer {
1312 display: grid;
1313 grid-template:
1314 "a a"
1315 "b c";
1316 }
1317
1318 .p-relacionados .tns-controls {
1319 grid-area: c;
1320 display: flex;
1321 justify-content: flex-end;
1322 padding-right: 10px;
1323 }
1324
1325 .p-relacionados .tns-nav {
1326 grid-area: b;
1327 }
1328
1329 .p-relacionados .tns-ovh {
1330 grid-area: a;
1331 }
1332
1333 .tns-controls button {
1334 width: 32px;
1335 height: 32px;
1336 border-radius: 50%;
1337 border: 0px;
1338 background-color: #030712;
1339 color: #fff;
1340 overflow: hidden;
1341 white-space: nowrap;
1342 text-indent: 100px;
1343 position: relative;
1344 }
1345
1346 .tns-controls button + button {
1347 margin-left: 10px;
1348 }
1349
1350 .tns-controls button + button::after {
1351 content: "\F285";
1352 font-size: 14px;
1353 color: #fff;
1354 text-indent: 0px;
1355 left: 10px;
1356 top: 9px;
1357 position: absolute;
1358 z-index: 1;
1359 font-family: 'bootstrap-icons';
1360 font-weight: bold;
1361 }
1362
1363 .tns-controls button:first-child::after {
1364 content: "\F284";
1365 font-size: 14px;
1366 color: #fff;
1367 text-indent: 0px;
1368 left: 9px;
1369 top: 9px;
1370 position: absolute;
1371 z-index: 1;
1372 font-family: 'bootstrap-icons';
1373 font-weight: bold;
1374 }
1375
1376 .tns-controls button[disabled] {
1377 background-color: #d4d6d8;
1378 color: #404953;
1379 }
1380
1381 .tns-controls button[disabled]::after {
1382 color: #404953;
1383 }
1384
1385 .tns-nav button {
1386 width: 50px;
1387 margin-right: 20px;
1388 border-radius: 6px;
1389 border: 0px;
1390 background-color: #bfc2c6;
1391 height: 4px;
1392 }
1393
1394 .tns-nav button.tns-nav-active {
1395 background-color: #030712;
1396 }
1397
1398 .tns-item {
1399 opacity: 0;
1400 transition: all 0.25s linear;
1401 }
1402
1403 .tns-item.tns-slide-active {
1404 opacity: 1;
1405 }
1406
1407 #especificaciones table tr {
1408 display: grid;
1409 width: 100%;
1410 grid-template-columns: 1fr 1fr;
1411 padding-top: 20px;
1412 padding-bottom: 20px;
1413 border-top: 1px solid #adb1b6;
1414 }
1415
1416 table tr:nth-child(even) {
1417 background-color: #d4d6d8;
1418 }
1419
1420 div#especificaciones table tr td {
1421 padding-left: 20px;
1422 font-size: 16px;
1423 letter-spacing: 0.5px;
1424 color: #1A2431;
1425 }
1426
1427 #especificaciones table {
1428
1429 width: 100%;
1430 }
1431
1432 #especificaciones h4, #ventajas h4, #caracteristicas h4 {
1433 font-size: 18px;
1434 margin-top: 20px;
1435 width: 100%;
1436 display: inline-block;
1437 margin-bottom: 10px;
1438 }
1439
1440 #caracteristicas ul {
1441 list-style: disc;
1442 margin-top: 10px;
1443 margin-bottom: 10px;
1444 padding-left: 20px;
1445 }
1446
1447 #caracteristicas ul li {
1448 margin-bottom: 10px;
1449 }
1450
1451 .produc-detail, .portlet-boundary_com_liferay_site_navigation_breadcrumb_web_portlet_SiteNavigationBreadcrumbPortlet_ {
1452 background-color: #f7f8f8;
1453 }
1454
1455 i.bi.bi-file-earmark-pdf {
1456 margin-right: 10px;
1457 font-size: 20px;
1458 height: 100%;
1459 }
1460
1461 div#fixed-info {
1462 position: fixed;
1463 top: 0px;
1464 left: 0px;
1465 width: 100%;
1466 z-index: -1;
1467 background-color: #fff;
1468 opacity: 0;
1469 transition: opacity 0.2s linear;
1470 }
1471
1472 .scrolled-product div#fixed-info {
1473 z-index: 1;
1474 opacity: 1;
1475 }
1476
1477 .controls-visible.has-control-menu.scrolled-product div#fixed-info {
1478 margin-top: 56px;
1479 }
1480
1481 i.bi.bi-zoom-in {
1482 left: 7px;
1483 font-size: 14px;
1484 position: relative;
1485 top: 4px;
1486 }
1487
1488 .zoom-image {
1489 overflow: hidden;
1490 }
1491
1492 body.zoom-image .image-principal {
1493 position: fixed;
1494 background-color: #030712;
1495 width: 100%;
1496 height: 100%;
1497 top: 0px;
1498 left: 0;
1499 z-index: 2;
1500 display: flex;
1501 align-items: center;
1502 justify-content: center;
1503 }
1504
1505 body.zoom-image .zoom-it {
1506 display: none;
1507 }
1508
1509 body.zoom-image .image-principal > span:first-child {
1510 position: absolute;
1511 top: 0px;
1512 left: 0px;
1513 width: 100%;
1514 height: 100%;
1515 display: block;
1516 padding: 50px;
1517 }
1518
1519 body.zoom-image .image-principal > span:first-child img {
1520 width: 100%;
1521 height: 100%;
1522 position: relative;
1523 object-fit: contain;
1524 background-color: transparent;
1525 }
1526
1527 body.zoom-image header#banner {
1528 z-index: 0;
1529 }
1530
1531 body.zoom-image .image-selector .active > span {
1532 display: block;
1533 width: 80%;
1534 height: 80%;
1535 position: relative;
1536 }
1537
1538 body.zoom-image i.bi.bi-x {
1539 display: block !important;
1540 color: #fff;
1541 font-size: 32px;
1542 position: absolute;
1543 top: 20px;
1544 right: 20px;
1545 cursor: pointer;
1546 }
1547
1548 body.zoom-image .image-selector .active {
1549 cursor: default !important;
1550 }
1551
1552 body.zoom-image .cadmin.control-menu-container {
1553 display: none;
1554 }
1555
1556 h3.nav-tab.selected::after {
1557 content: "";
1558 width: 100%;
1559 height: 1px;
1560 background-color: black;
1561 position: absolute;
1562 bottom: -6px;
1563 left: 0px;
1564 }
1565
1566 h3.nav-tab:hover:not(.selected)::after {
1567 content: "";
1568 width: 100%;
1569 height: 1px;
1570 background-color: rgb(204, 204, 204);
1571 position: absolute;
1572 bottom: -6px;
1573 left: 0px;
1574 }
1575
1576 #especificaciones table tr:first-child {
1577 border-top: 0px;
1578 }
1579
1580 .accordion i {
1581 transform: rotate(0deg);
1582 transition: all 0.25s linear;
1583 position: relative;
1584 top: 0px;
1585 }
1586
1587 .accordion.show-ac i {
1588 transform: rotate(180deg);
1589 top: 9px;
1590 }
1591
1592 .accordion table, .accordion table tbody {
1593 display: block;
1594 width: 100%;
1595 }
1596
1597 .accordion table {
1598 margin-bottom: 40px;
1599 }
1600
1601 .feature-nav {
1602 display: flex;
1603 font-size: 14px;
1604 border-bottom: 1px solid #b5b5b5;
1605 gap: 10px;
1606 margin-bottom: 40px;
1607 }
1608
1609 .feature-nav > div {
1610 position: relative;
1611 display: flex;
1612 align-items: center;
1613 }
1614
1615 .feature-nav > div.selected::after {
1616 content: "";
1617 width: 100%;
1618 height: 3px;
1619 background-color: black;
1620 position: absolute;
1621 bottom: -2px;
1622 left: 0px;
1623 }
1624
1625 #caracteristicas .feature-nav h4 {
1626 font-size: 12px !important;
1627 font-weight: normal;
1628 cursor: pointer;
1629 }
1630
1631 #caracteristicas .feature-nav > .selected h4 {
1632 text-shadow: 0px 0px 1px;
1633 }
1634
1635 .features-container {
1636 display: grid;
1637 grid-template-columns: 40% 1fr;
1638 gap: 20px;
1639 }
1640
1641 .features-container > div img {
1642 max-width: 100%;
1643 object-fit: cover;
1644 }
1645
1646 .features-container .img-content {
1647 display: flex;
1648 background-color: #fff;
1649 justify-content: center;
1650 }
1651
1652 ul.product-carousel:not(.tns-carousel) {
1653 display: grid;
1654 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1655 gap: 10px;
1656 }
1657
1658 .product-carousel.tns-carousel > li {
1659 display: inline-block !important;
1660 }
1661
1662 ul.product-implements-carousel:not(.tns-carousel) {
1663 display: grid;
1664 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1665 gap: 10px;
1666 }
1667
1668 .product-implements-carousel.tns-carousel > li {
1669 display: inline-block !important;
1670 }
1671
1672 ul.categories-carousel:not(.tns-carousel) {
1673 display: grid;
1674 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1675 gap: 10px;
1676 }
1677
1678 .categories-carousel.tns-carousel > li {
1679 display: inline-block !important;
1680 }
1681
1682 .image-selector .tns-nav button {
1683 width: 10px;
1684 height: 10px;
1685 padding: 0px;
1686 margin: 0px;
1687 }
1688
1689 .image-selector .tns-nav {
1690 display: flex;
1691 align-items: center;
1692 justify-content: center;
1693 gap: 10px;
1694 position: absolute;
1695 z-index: 1;
1696 width: 100%;
1697 padding-left: 110px;
1698 bottom: -30px;
1699 }
1700
1701 .image-selector .tns-controls {
1702 display: none;
1703 }
1704
1705 .h-90 {
1706 height: 90px;
1707 }
1708
1709 .image-selector > div:not(.active):hover, .image-selector .active {
1710 outline: 0;
1711 }
1712
1713 .principal-carousel.tns-carousel .tns-item {
1714 opacity: 1;
1715 }
1716
1717 span.arrow-prev {
1718 background-color: #2c2c2c;
1719 width: 32px;
1720 height: 32px;
1721 border-radius: 50%;
1722 top: 50%;
1723 position: absolute;
1724 left: 25px;
1725 align-items: center;
1726 justify-content: center;
1727 color: #fff;
1728 cursor: pointer;
1729 }
1730
1731 span.arrow-next {
1732 background-color: #2c2c2c;
1733 width: 32px;
1734 height: 32px;
1735 border-radius: 50%;
1736 top: 50%;
1737 position: absolute;
1738 right: 25px;
1739 align-items: center;
1740 justify-content: center;
1741 color: #fff;
1742 cursor: pointer;
1743 }
1744
1745 .zoom-image .image-principal:not(.no-c) span.arrow-next, .zoom-image .image-principal:not(.no-c) span.arrow-prev {
1746 display: flex !important;
1747 }
1748
1749 span.arrow-next.disabled, span.arrow-prev.disabled {
1750 opacity: 0.5;
1751 }
1752
1753 .p-relacionados .tns-nav {
1754 display: none;
1755 }
1756
1757 #featuredSpecifications span span p, #featuredSpecifications div div p {
1758 text-align: left !important;
1759 margin-right: 1rem;
1760
1761 }
1762
1763 #featuredSpecifications span span.grid-2, #featuredSpecifications div div.grid-2 {
1764 grid-template-columns: 1fr !important;
1765
1766 }
1767
1768 #featuredSpecifications span.c-info, #featuredSpecifications div.c-info {
1769 display: flex !important;
1770
1771 }
1772
1773 div.featuredspecifications {
1774 margin-bottom: 20px;
1775 gap: 20px;
1776 display: grid;
1777 grid-template-columns: 1fr 1fr 1fr;
1778 }
1779
1780 div.featuredspecifications div p.name {
1781 color: #333D48;
1782 font-size: 0.88rem;
1783 line-height: 1.13rem;
1784 }
1785
1786 div.featuredspecifications div p.value {
1787 font-weight: bold;
1788 margin-top: 0px;
1789 font-size: 1rem;
1790 line-height: 1.5rem;
1791 letter-spacing: 0.5px
1792 }
1793
1794
1795 .zoom-image .image-principal iframe {
1796 width: calc(100% - 200px);
1797 margin-left: 100px;
1798 height: calc(100% - 100px);
1799 margin-top: 50px;
1800 }
1801
1802
1803 /*
1804 div.pr-desc span.grid-2{
1805 display: flex;
1806 flex-direction: column;
1807 text-align:left;
1808 }
1809 #featuredSpecifications span{
1810 display:flex;
1811 justify-content: start;
1812 align-items: start;
1813 }*/
1814
1815 .product-carousel.tns-slider {
1816 display: flex;
1817 }
1818
1819 .product-carousel > .tns-item {
1820 display: flex !important;
1821 height: auto;
1822 }
1823
1824 .product-carousel a.product {
1825 height: 100%;
1826 }
1827
1828 .product-carousel a.product span.image {
1829 overflow: hidden;
1830 height: 175px;
1831 }
1832
1833 .product-carousel a.product span.image img {
1834 position: absolute;
1835 top: 0px;
1836 left: 0px;
1837 }
1838
1839 .p-relacionados .product-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1840 position: absolute;
1841 z-index: -1;
1842 opacity: 0;
1843 }
1844
1845 .product-implements-carousel.tns-slider {
1846 display: flex;
1847 }
1848
1849 .product-implements-carousel > .tns-item {
1850 display: flex !important;
1851 height: auto;
1852 }
1853
1854
1855 .product-implements-carousel a.product {
1856 height: 100%;
1857 }
1858
1859 .product-implements-carousel a.product span.image {
1860 overflow: hidden;
1861 height: 175px;
1862 }
1863
1864 .product-implements-carousel a.product span.image img {
1865 position: absolute;
1866 top: 0px;
1867 left: 0px;
1868 }
1869
1870 .p-relacionados .product-implements-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1871 position: absolute;
1872 z-index: -1;
1873 opacity: 0;
1874 }
1875
1876 .p-relacionados .categories-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1877 position: absolute;
1878 z-index: -1;
1879 opacity: 0;
1880 }
1881
1882 .w-card.product span.image {
1883 overflow: hidden;
1884 }
1885
1886 body.modal-open {
1887 overflow: hidden;
1888 }
1889
1890 div#modalProduct {
1891 border: 0px;
1892 width: 100%;
1893 height: 100%;
1894 padding: 0px;
1895 top: 0px;
1896 left: 0px;
1897 background-color: transparent;
1898 animation: none !important;
1899 }
1900
1901 div#modalProduct.modal.show {
1902 display: flex !important;
1903 flex-direction: column;
1904 justify-content: center;
1905 align-items: center;
1906 }
1907
1908 div#modalProduct.modal.show::after {
1909 content: "";
1910 width: 100%;
1911 left: 0px;
1912 top: 0px;
1913 height: 100%;
1914 background-color: #000;
1915 position: absolute;
1916 opacity: 0.5;
1917 z-index: 1;
1918 }
1919
1920 div#modalProduct .modal-dialog {
1921 position: relative;
1922 z-index: 2;
1923 background-color: #fff;
1924 width: 100%;
1925 height: 100%;
1926 max-width: 800px;
1927 max-height: 70dvh;
1928 border-radius: 10px;
1929 display: flex !important;
1930 flex-direction: column;
1931 justify-content: center;
1932 align-items: center;
1933 overflow: hidden;
1934 }
1935
1936 div#modalPhone .modal-dialog {
1937 position: relative;
1938 z-index: 2;
1939 background-color: #fff;
1940 width: 100%;
1941 height: 100%;
1942 max-width: 300px;
1943 max-height: 40dvh;
1944 border-radius: 10px;
1945 display: flex !important;
1946 flex-direction: column;
1947 justify-content: center;
1948 align-items: center;
1949 overflow: hidden;
1950 }
1951
1952 .modal-dialog .modal-content {
1953 width: 100%;
1954 height: 100%;
1955 overflow-y: auto;
1956 padding: 40px;
1957 }
1958
1959 div#modalProduct .modal-header .panel-header {
1960
1961 }
1962
1963 div#modalProduct .modal-header .panel-header .close {
1964 top: -20px;
1965 right: 0px;
1966 }
1967
1968
1969 div#modalProduct .btn-primary:hover {
1970 color: #fff;
1971 }
1972
1973
1974 div#modalProduct .modal-dialog {
1975 animation: none !important;
1976 }
1977
1978 div#modalProduct .panel.cc.pt-40.pb-40.maxw-900 {
1979 padding-top: 0px;
1980 }
1981
1982 div#modalPhone .modal-header .panel-header {
1983
1984 }
1985
1986 div#modalPhone .modal-header .panel-header .close {
1987 top: 15px;
1988 right: 15px;
1989 }
1990
1991 div#modalPhone .modal-header .panel-header .close {
1992 font-size: 30px;
1993 }
1994
1995
1996 div#modalPhone .btn-primary:hover {
1997 color: #fff;
1998 }
1999
2000
2001 div#modalPhone .modal-dialog {
2002 animation: none !important;
2003 }
2004
2005 div#modalPhone .panel.cc.pt-40.pb-40.maxw-900 {
2006 padding-top: 0px;
2007 }
2008
2009 #modalPhone {
2010 position: fixed;
2011 }
2012
2013 .modal-open.show-phone-popup #modalPhone {
2014 background-color: #000000eb;
2015 width: 100%;
2016 height: 100%;
2017 top: 0px;
2018 left: 0px;
2019 z-index: 99;
2020 justify-content: center;
2021 align-items: center;
2022 display: flex !important;
2023 }
2024
2025
2026 .modal-open.show-phone-popup #modalPhone .modal-dialog {
2027 max-width: 400px;
2028 max-height: 350px;
2029 border-radius: 10px !important;
2030 }
2031
2032 .modal-open.show-phone-popup #modalPhone .modal-dialog .modal-content {
2033 width: 100%;
2034 height: 100%;
2035 overflow-y: auto;
2036 padding: 20px;
2037 }
2038
2039 #modalPhone .call-us {
2040 display: flex;
2041 flex-direction: column;
2042 align-items: center;
2043 justify-content: center;
2044 }
2045
2046 .call-us a > span {
2047 width: 100px;
2048 height: 100px;
2049 background-color: #f2f2f2;
2050 display: inline-flex;
2051 justify-content: center;
2052 align-items: center;
2053 border-radius: 50%;
2054 font-size: 33px;
2055 margin-bottom: 20px;
2056 }
2057
2058 .call-us a {
2059 letter-spacing: 3px;
2060 }
2061
2062 .product-implements-carousel span.c-title > p {
2063 padding-right: 10px;
2064 }
2065
2066 @media (max-width: 900px) {
2067
2068 div#modalProduct.modal.show {
2069 justify-content: flex-end;
2070 }
2071
2072 #modalProduct .modal-dialog {
2073 position: relative;
2074 z-index: 2;
2075 background-color: #fff;
2076 width: 96%;
2077 max-width: 100%;
2078 max-height: 100%;
2079 border-radius: 10px;
2080 overflow-x: hidden;
2081 height: 80dvh;
2082 border-radius: 10px 10px 0px 0px !important;
2083 }
2084
2085
2086 #modalPhone .modal-dialog {
2087 position: relative;
2088 z-index: 2;
2089 background-color: #fff;
2090 width: 96%;
2091 max-width: 100%;
2092 max-height: 100%;
2093 border-radius: 10px;
2094 overflow-x: hidden;
2095 height: 80dvh;
2096 border-radius: 10px 10px 0px 0px !important;
2097 }
2098 }
2099
2100 /**/
2101
2102 @media (max-width: 975px) {
2103
2104 .img-marca {
2105 margin-top: 40px;
2106 }
2107
2108 .pt-header {
2109 grid:
2110 "b"
2111 "a"
2112 "c";
2113
2114 }
2115
2116 .feature-nav {
2117 width: 100%;
2118 white-space: nowrap;
2119 overflow-y: hidden;
2120 overflow-x: scroll;
2121 padding-bottom: 10px;
2122 border-bottom: 0px;
2123 gap: 0;
2124 }
2125
2126 .feature-nav > div {
2127 padding-left: 10px;
2128 padding-right: 10px;
2129 border-bottom: 1px solid #b5b5b5;
2130 }
2131
2132 .features-container {
2133 grid-template-columns: 1fr;
2134 gap: 20px;
2135 }
2136
2137 .tag-navigation {
2138 white-space: nowrap;
2139 overflow-y: auto;
2140 padding-bottom: 10px;
2141 }
2142
2143 }
2144
2145 @media (max-width: 769px) {
2146 div#modalProduct form textarea {
2147 min-height: 100px;
2148 max-height: 100px;
2149 }
2150
2151 div#modalProduct .modal-header .panel-header .close {
2152 top: 12px;
2153 right: 8px;
2154 }
2155
2156 .modal-open header#banner {
2157 z-index: 1;
2158 }
2159
2160 body div#modalProduct .modal-dialog {
2161 max-height: 98dvh;
2162 }
2163
2164 .image-selector-mobile .video-yt iframe {
2165 width: 100%;
2166 height: 100%;
2167 border: 0px;
2168 position: absolute;
2169 z-index: 99;
2170 max-width: 700px;
2171 }
2172
2173 .image-selector-mobile .btn-play.c-video {
2174 color: #fff;
2175 z-index: 99;
2176 position: absolute;
2177 font-size: 40px;
2178 top: 50%;
2179 left: 50%;
2180 margin-left: -20px;
2181 margin-top: -25px;
2182 }
2183
2184 body section#content .image-selector-mobile .overlay.c-video {
2185 opacity: 0.5;
2186 width: 100%;
2187 height: 100%;
2188 position: absolute;
2189 top: 0px;
2190 left: 0px;
2191 background-color: #565656;
2192 z-index: 99;
2193 }
2194
2195 .produc-detail .image-selector-mobile .tns-nav button.tns-nav-active {
2196 background-color: #030712;
2197 }
2198
2199 body .produc-detail .pr-images.h-530 {
2200 min-height: 400px;
2201 }
2202
2203 .image-selector-mobile .tns-ovh {
2204 order: 1;
2205 }
2206
2207 .image-selector-mobile .tns-nav {
2208 order: 2;
2209 text-align: center;
2210 margin-top: 20px;
2211 }
2212
2213 .image-selector-mobile .tns-outer {
2214 display: flex;
2215 flex-direction: column;
2216 }
2217
2218 .image-selector-mobile .tns-nav button {
2219 width: 10px;
2220 margin-right: 8px;
2221 border-radius: 50%;
2222 border: 0px;
2223 background-color: #bfc2c6;
2224 height: 10px;
2225 padding: 0px;
2226 }
2227
2228 .image-selector-mobile .tns-controls {
2229 display: none;
2230 }
2231
2232 .image-selector-mobile .tns-item {
2233 opacity: 1;
2234 }
2235
2236 .image-selector-mobile .tns-outer, .image-selector-mobile .tns-outer, .image-selector-mobile .tns-ovh, .image-selector-mobile .tns-inner,
2237 .image-selector-mobile ul.mobile-carousel, .image-selector-mobile .mobile-carousel > li {
2238 height: 100%;
2239 }
2240
2241 .image-selector-mobile {
2242 display: block !important;
2243 width: 100%;
2244 }
2245
2246 .image-selector-mobile ~ div {
2247 display: none;
2248 }
2249
2250
2251 #widgetMessengerFrame {
2252 position: fixed !important;
2253 top: 0px !important;
2254 left: 0px !important;
2255 width: 100% !important;
2256 height: 100% !important;
2257 }
2258
2259 .scrolled-product #smartsupp-widget-container > div {
2260 bottom: 100px !important;
2261 }
2262
2263 body #footer {
2264 padding-bottom: 100px;
2265 }
2266
2267 body div#fixed-info {
2268 top: inherit;
2269 bottom: 0px;
2270 }
2271
2272 .subcategory.mb-20 h2 + a {
2273 margin-top: 20px;
2274 text-align: right;
2275 }
2276
2277 .subcategory.mb-20 {
2278 flex-direction: column;
2279 }
2280
2281 .subcategory.mb-20 h2 {
2282 width: 100%;
2283 }
2284
2285 .subcategory.mb-20 h2 a {
2286 width: 100%;
2287 }
2288
2289 html body .m-difc {
2290 flex-wrap: wrap !important;
2291 }
2292
2293 .features-container .img-content img {
2294 width: 100% !important;
2295 height: auto !important;
2296 }
2297
2298 .pr-images {
2299 grid-template-columns: 1fr;
2300 width: 100%;
2301 }
2302
2303 .image-principal {
2304 max-height: 400px;
2305 width: 100%;
2306 }
2307
2308 .image-principal img {
2309 position: relative;
2310 width: 100%;
2311 height: 100%;
2312 }
2313
2314 .image-selector .tns-ovh {
2315 height: auto !important;
2316 }
2317
2318 ul.principal-carousel li {
2319 width: 10px;
2320 height: 10px;
2321 overflow: hidden;
2322 border-radius: 50%;
2323 transition: none;
2324 }
2325
2326 .image-selector {
2327 position: absolute;
2328 z-index: 1;
2329 width: 100%;
2330 bottom: 10%;
2331 }
2332
2333 ul.principal-carousel {
2334 display: flex;
2335 align-items: center;
2336 justify-content: center;
2337 gap: 10px;
2338 }
2339
2340 .principal-carousel.tns-carousel .tns-item {
2341 opacity: 0.5;
2342 filter: brightness(0) invert(1);
2343 }
2344
2345 .principal-carousel.tns-carousel .tns-item.active {
2346 opacity: 1;
2347 }
2348
2349 .img-marca {
2350 padding-top: 20px;
2351 }
2352
2353 body.zoom-image .image-principal {
2354 height: 100dvh;
2355 max-height: 100dvh;
2356 }
2357
2358 }
2359
2360 </style>
2361
2362
2363 <script>
2364 var productItem;
2365 var pushed = false;
2366 let startX;
2367 $("document").ready(function () {
2368 $('a[href*="/es/"]').attr('href', function(i, href) {
2369 return href.replace('/es/', '/');
2370 });
2371 $(".image-selector-mobile .btn-play.c-video .bi.bi-play-circle-fill").click(function () {
2372
2373 let url = $(this).parent().next().data("url");
2374 $("#wrapper").append('<div class="active-video-ytb"><div class="close-video-mobile"><i class="bi bi-x"></i></div><iframe src="' + url + '?autoplay=1&mute=1" ></iframe></div>');
2375 $("body").addClass("youtube-mobile-video")
2376
2377 })
2378
2379 $("html").on("click", ".close-video-mobile", function () {
2380
2381 $("#wrapper .active-video-ytb").remove();
2382 $("body").removeClass("youtube-mobile-video")
2383
2384 })
2385
2386 $("#lastUrl").attr("href", '${lastUrl}')
2387 loadAnalyticsItem();
2388 pushAnalytics();
2389 let lastScrollY = 0;
2390 let ticking = false;
2391
2392 function onScroll() {
2393 lastScrollY = window.scrollY;
2394
2395 if (!ticking) {
2396 window.requestAnimationFrame(() => {
2397 checkScrollPosition(lastScrollY);
2398 ticking = false;
2399 });
2400
2401 ticking = true;
2402 }
2403 }
2404
2405 function checkScrollPosition(scrollY) {
2406 const targetPosition = $("#scroll-point-of-no-return").offset().top; // Cambia este valor a la posición deseada
2407
2408 if (scrollY >= targetPosition) {
2409 // Aquí va el código que deseas ejecutar
2410 $("body").addClass("scrolled-product");
2411 } else {
2412 $("body").removeClass("scrolled-product");
2413 }
2414 }
2415
2416 window.addEventListener('scroll', onScroll);
2417
2418
2419 $(".tag-navigation a").click(function () {
2420
2421 let el = $(this);
2422 let id = el.data("rel");
2423
2424 $(".tag-navigation a.active").removeClass("bg-primary bold");
2425 $(".tag-navigation a.active").addClass("bg-g normal");
2426 $(".tag-navigation a.active").removeClass("active");
2427
2428 el.addClass("active bg-primary bold");
2429 el.removeClass("bg-g normal");
2430
2431 $(".tag-content").hide();
2432 $("#" + id).show();
2433
2434 });
2435
2436
2437 $(".image-selector .principal-carousel .c-video").click(function () {
2438 let el = $(this).parent().find("img");
2439 $(".image-principal iframe").remove();
2440 $(this).parent().find("img").trigger("click");
2441 let url = el.data("url");
2442
2443 $(".image-principal img").parent().append('<iframe class="pa z-2 t-0 l-0" width="100%" height="100%" src="' + url + '" frameborder="0" allowfullscreen></iframe>');
2444
2445 });
2446
2447 $(".image-selector .principal-carousel img").click(function () {
2448
2449 let imgUrl = $(this).attr("src");
2450 $(".image-principal iframe").remove();
2451 $(".image-selector .principal-carousel .active").removeClass("active");
2452
2453 $(this).parent().addClass("active");
2454 $(".image-principal img").attr("src", imgUrl);
2455
2456 });
2457
2458 $(".nav-tab").click(function () {
2459
2460 let dataTab = $(this).data("tab");
2461 $(".nav-tab.selected").addClass("normal");
2462 $(".nav-tab.selected").removeClass("selected");
2463
2464 $(".tabs-container .content-tab").hide();
2465 $(this).addClass("selected");
2466 $(this).removeClass("normal");
2467 $("#data-tab-" + dataTab).show();
2468
2469 });
2470
2471
2472 $(".tag-content .accordion .accordion-title").click(function () {
2473
2474 let elem = $(this);
2475 let parentElem = elem.closest(".accordion");
2476 if (parentElem.hasClass("show-ac")) {
2477 parentElem.addClass("hide-ac");
2478 parentElem.removeClass("show-ac");
2479 elem.next().slideUp("fast", function () {
2480 // Animation complete.
2481 });
2482
2483 } else {
2484 parentElem.addClass("show-ac");
2485 parentElem.removeClass("hide-ac");
2486 elem.next().slideDown("fast", function () {
2487 // Animation complete.
2488 });
2489
2490 }
2491
2492 });
2493 try {
2494 // Verificar si el contenedor .principal-carousel existe
2495 if ($('.principal-carousel').length) {
2496 var slider2 = tns({
2497 container: '.principal-carousel',
2498 items: 6,
2499 axis: "vertical",
2500 slideBy: 'page',
2501 autoplay: false,
2502 loop: false,
2503 mouseDrag: true
2504 });
2505 }
2506
2507 if ($('.mobile-carousel').length) {
2508 var slider3 = tns({
2509 container: '.mobile-carousel',
2510 items: 1,
2511 slideBy: 'page',
2512 autoplay: false,
2513 loop: false,
2514 mouseDrag: true
2515 });
2516 }
2517
2518 } catch
2519 (error) {
2520 }
2521
2522 try {
2523 // Verificar si el contenedor .product-carousel existe
2524 if ($('.product-carousel').length) {
2525 var slider = tns({
2526 container: '.product-carousel',
2527 items: 5,
2528 slideBy: 'page',
2529 autoplay: false,
2530 loop: false,
2531 responsive: {
2532 950: {
2533 items: 5
2534 },
2535 769: {
2536 items: 4
2537 },
2538 550: {
2539 items: 3
2540 },
2541 450: {
2542 items: 2
2543 },
2544 0: {
2545 items: 1
2546 }
2547 }
2548 });
2549 }
2550
2551 } catch
2552 (error) {
2553 }
2554
2555 try {
2556 // Verificar si el contenedor .product-implements-carousel existe
2557 if ($('.product-implements-carousel').length) {
2558 var slider = tns({
2559 container: '.product-implements-carousel',
2560 items: 5,
2561 slideBy: 'page',
2562 autoplay: false,
2563 loop: false,
2564 responsive: {
2565 950: {
2566 items: 5
2567 },
2568 769: {
2569 items: 4
2570 },
2571 550: {
2572 items: 3
2573 },
2574 450: {
2575 items: 2
2576 },
2577 0: {
2578 items: 1
2579 }
2580 }
2581 });
2582 }
2583
2584 } catch
2585 (error) {
2586 }
2587 try {
2588 // Verificar si el contenedor .categories-carousel existe
2589 if ($('.categories-carousel').length) {
2590 var slider = tns({
2591 container: '.categories-carousel',
2592 items: 5,
2593 slideBy: 'page',
2594 autoplay: false,
2595 loop: false,
2596 responsive: {
2597 950: {
2598 items: 5
2599 },
2600 769: {
2601 items: 4
2602 },
2603 550: {
2604 items: 3
2605 },
2606 450: {
2607 items: 2
2608 },
2609 0: {
2610 items: 1
2611 }
2612 }
2613 });
2614 }
2615
2616 } catch
2617 (error) {
2618 }
2619 $(".feature-nav > div").click(function () {
2620 let elem = $(this);
2621 let id = elem.attr("id"); // Obtener el ID del elemento clicado
2622 let content = id.replace("data-feature-", ""); // Eliminar "data-feature-" del ID
2623 $(".feature-nav > .selected").removeClass("selected");
2624 elem.addClass("selected");
2625 $(".feature-content .feature").hide();
2626 $(".feature-content #feature-" + content).show();
2627
2628 });
2629
2630
2631 $(".image-principal .zoom-it").click(function () {
2632
2633 $("body").addClass("zoom-image");
2634 let elem = $(".image-principal").data("size");
2635 if (elem < 2) {
2636 $(".image-principal").addClass("no-c");
2637 } else {
2638 let elem = $(".principal-carousel .active");
2639 if (elem.next(".tns-item").length == 0) {
2640 $(".arrow-next").addClass("disabled");
2641 }
2642 if (elem.prev(".tns-item").length == 0) {
2643 $(".arrow-prev").addClass("disabled");
2644 }
2645 }
2646
2647 });
2648
2649 $("i.bi.bi-x").click(function () {
2650
2651 $("body").removeClass("zoom-image");
2652
2653 });
2654
2655
2656 $(".arrow-next").click(function () {
2657
2658 let elem = $(".principal-carousel .active");
2659 let totalElements = parseInt($(".principal-carousel li").length) - 1;
2660
2661 console.log((parseInt(elem.data("id")) + 1));
2662
2663 disableArrows();
2664
2665 if ((parseInt(elem.data("id")) + 1) <= totalElements) {
2666
2667 elem.next().find("img").trigger("click");
2668 console.log("selected next:" + parseInt(elem.data("id") + 1));
2669
2670 if ($("#tns1-item" + parseInt(elem.data("id") + 1)).find("img").data("url") !== undefined) {
2671 let url = $("#tns1-item" + parseInt(elem.data("id") + 1)).find("img").data("url");
2672 $(".image-principal > span:first-child").append('<iframe class="pa t-0 l-0 w-100 h-100 z-2" frameBorder="0" src="' + url + '"></iframe>');
2673 }
2674 }
2675
2676
2677 })
2678
2679 $(".arrow-prev").click(function () {
2680
2681 let elem = $(".principal-carousel .active");
2682 let totalElements = parseInt($(".principal-carousel li").length) - 1;
2683
2684 console.log("total" + totalElements + "-" + (parseInt(elem.data("id")) - 1));
2685
2686 disableArrows();
2687
2688 if ((parseInt(elem.data("id")) - 1) >= 0) {
2689
2690 console.log("selected prev:" + parseInt(elem.data("id") - 1))
2691 elem.prev().find("img").trigger("click");
2692
2693 if ($("#tns1-item" + parseInt(elem.data("id") - 1)).find("img").data("url") !== undefined) {
2694 let url = $("#tns1-item" + parseInt(elem.data("id") - 1)).find("img").data("url");
2695 $(".image-principal > span:first-child").append('<iframe class="pa t-0 l-0 w-100 h-100 z-2" frameBorder="0" src="' + url + '"></iframe>');
2696 }
2697 }
2698
2699
2700 })
2701
2702 function disableArrows() {
2703 setTimeout(function () {
2704
2705 let actualItem = $(".principal-carousel .active").data("id");
2706 let totalItems = parseInt($(".principal-carousel li").length) - 1;
2707
2708
2709 if (actualItem <= 0) {
2710 $(".arrow-prev").addClass("disabled");
2711 } else {
2712 $(".arrow-prev").removeClass("disabled");
2713 }
2714
2715 if (actualItem >= totalItems) {
2716 $(".arrow-next").addClass("disabled");
2717 } else {
2718 $(".arrow-next").removeClass("disabled");
2719 }
2720
2721 }, 150);
2722
2723 }
2724
2725
2726 $('a[title="idioma español"]').attr('href', '/productos/${values.productUrlEs}');
2727 $('a[title="idioma english"]').attr('href', '/en/products/${values.productUrlEn}');
2728
2729 $("#cifdiv").remove();
2730 /*
2731 $(".image-selector").on("touchstart", function(event) {
2732 startX = event.originalEvent.touches[0].clientX;
2733 });
2734
2735 $(".image-selector").on("touchend", function(event) {
2736 let endX = event.originalEvent.changedTouches[0].clientX;
2737 let diffX = startX - endX;
2738
2739
2740 let swipeThreshold = 30;
2741
2742 if (diffX > swipeThreshold) {
2743
2744 $(".arrow-next").trigger("click");
2745 } else if (diffX < -swipeThreshold) {
2746
2747 $(".arrow-prev").trigger("click");
2748 }
2749 });*/
2750
2751
2752 });
2753
2754 function loadAnalyticsItem() {
2755 var productbrand = '${values.brand}';
2756 if (productbrand === "Cat") {
2757 productbrand = "Caterpillar";
2758 }
2759 var variant = 'compra,alquiler'
2760 if ($('.usada').length > 0) {
2761 variant += ",usada";
2762 }
2763 productItem = {
2764 item_id: '${objectEntryId}',
2765 item_name: '${getLanguage(values.names)}',
2766 currency: 'EUR',
2767 coupon: '',
2768 item_brand: productbrand,
2769 item_category: '${principalCategoryName}',
2770 item_category2: '',//TODO
2771 item_category3: '',//TODO
2772 item_category4: '',//TODO
2773 item_category5: '',//TODO
2774 item_list_id: localStorage.getItem("itemListId"),
2775 item_list_name: localStorage.getItem("itemListName"),
2776 item_variant: variant,
2777 location_id: localStorage.getItem("location_id"),
2778 price: 1,
2779 quantity: 1
2780 }
2781 localStorage.setItem("location_id", "");
2782 localStorage.setItem("itemListName", "");
2783 localStorage.setItem("itemListId", "");
2784 }
2785
2786 function pushAnalytics() {
2787 if (!pushed) {
2788 pushed = true
2789 var dataLayerObj = {
2790 event: 'view_item',
2791 ecommerce: {
2792 items: [
2793 productItem
2794 ]
2795 }
2796 }
2797
2798
2799 console.debug(dataLayerObj);
2800 dataLayer.push(dataLayerObj);
2801 }
2802 }
2803
2804 $(".close-popup.close").click(function () {
2805 $("body").removeClass("show-phone-popup");
2806 })
2807
2808 $("#modalPhone").click(function () {
2809 setTimeout(function () {
2810
2811 if (!$("body").hasClass("modal-open")) {
2812 $("body").removeClass("show-phone-popup");
2813 }
2814
2815 }, 150);
2816 })
2817
2818
2819 function callFinanzauto() {
2820 var dataLayerObj = {
2821 event: 'add_to_cart',
2822 ecommerce: {
2823 items: [
2824 productItem
2825 ]
2826 }
2827 }
2828 console.debug(dataLayerObj);
2829 dataLayer.push(dataLayerObj);
2830
2831 if (isMobile()) {
2832 // Si es un dispositivo móvil, redirige para hacer una llamada
2833 window.location.href = 'tel:+34${finanzautoPhone}';
2834 } else {
2835 $('#modalPhone').modal('show');
2836 $('body').addClass('show-phone-popup');
2837 }
2838 }
2839
2840 function isMobile() {
2841 // Verifica si el dispositivo es móvil
2842 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
2843 }
2844
2845 function showModalProductAndPushAnalytics() {
2846
2847 var dataLayerObj = {
2848 event: 'begin_checkout',
2849 ecommerce: {
2850 items: [
2851 productItem
2852 ]
2853 }
2854 }
2855 console.debug(dataLayerObj);
2856 dataLayer.push(dataLayerObj);
2857 showModalProduct();
2858 }
2859
2860 function pushFullAnalytic() {
2861
2862 var dataLayerObj = {
2863 event: "purchase",
2864 ecommerce: {
2865 transaction_id: $("#transactionId").val(),
2866 value: "1",
2867 tax: "0",
2868 shipping: "0",
2869 currency: 'EUR',
2870 coupon: '',
2871 payment_type: 'detalle_producto',
2872 items: [
2873 productItem
2874 ]
2875 }
2876 }
2877 console.debug(dataLayerObj);
2878 dataLayer.push(dataLayerObj);
2879
2880 }
2881 </script>
2882<#else>
2883 <div class="pag-404 df fdc jcc aic">
2884
2885 <img src="/documents/14306333/0/pag-404.jpg/c00959e2-e88d-4b06-1cba-d282b57f006a?t=1737040420259" />
2886
2887
2888 <p class="title-404"><@liferay.language key="product.not.found.title" /></p>
2889 <p class="content-404"><@liferay.language key="product.not.found.text" /></p>
2890
2891 <a class="btn btn-secondary" href="/"><@liferay.language key="product.not.found.button" /></a>
2892
2893
2894
2895</div>
2896
2897<style>
2898.pag-404 {
2899 min-height: 600px;
2900}
2901body #wrapper {
2902 background-color: #fff;
2903}
2904p.title-404 {
2905 font-size: 20px;
2906 font-weight: bold;
2907 margin-top: 20px;
2908 max-width: 500px;
2909 text-align: center;
2910}
2911p.content-404 {
2912 margin-bottom: 20px;
2913 color: #787878; max-width: 600px;
2914 text-align: center;
2915}
2916
2917</style>
2918</#if>