Detalle Productos Cat
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> allBrothersObjectsValues [in template "14306307#14306335#null" at line 658, column 36] ---- 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: #list allBrothersObjectsValues as obj... [in template "14306307#14306335#null" at line 658, column 29] ----
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 <#-- Verificar si objectId ya está en allObjectsValues -->
658 <#list allBrothersObjectsValues as objectValues>
659 <#if objectValues.objectEntryId == objectId >
660 <#assign addToAllObjects = false />
661 </#if>
662 </#list>
663 <#if addToAllObjects >
664 <#assign valuesR = objectEntryLocalService.getValues(objectId)>
665 <#assign valuesR = valuesR + {"objectEntryId": objectId}>
666 <#assign allObjectsValues = allObjectsValues + [valuesR] />
667 </#if>
668 </#if>
669 </#list>
670 </#if>
671 <#-- ------------- Tambien te puede interesar: ------------- -->
672 <#if (allBrothersObjectsValues)?? &&(allBrothersObjectsValues?size > 0) >
673 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.related"/></h2>
674
675
676 <div class="mb-40 p-relacionados">
677 <ul class="pb-20 product-carousel">
678 <#assign hideLoadCarousel = "" />
679
680 <#assign allBrothersObjectsValues = allBrothersObjectsValues?sort_by("names")>
681 <#assign count=0 >
682 <#list allBrothersObjectsValues as valuesR>
683 <#assign count=count+1 >
684 <#assign imageList = [] />
685
686 <#-- ------------- Imagen del producto ------------- -->
687 <#assign attachmentFiles = cpAttachmentFileEntryService.getCPAttachmentFileEntries(classNameId, valuesR.objectEntryId, 0, 0, -1, -1) />
688 <#list attachmentFiles as attachmentFile>
689
690 <#attempt>
691 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile.getFileEntryId())/>
692 <#if (image.extension=="jpg"|| image.extension=="jpeg"||image.extension=="png") && !image.fileName?contains("features") && !image.fileName?contains("no2dimage2davailable")>
693 <#assign imageList = imageList + [image] />
694 </#if>
695 <#recover>
696 </#attempt>
697 </#list>
698 <#assign image = -1>
699 <#assign imageList = imageList?sort_by("fileName")>
700 <#if (imageList?size>0)>
701 <#assign image = imageList[0]>
702 <#else><#-- Fotos personalizadas -->
703 <#assign imagesRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "images").getObjectRelationshipId() >
704 <#assign images=objectEntryLocalService.getOneToManyObjectEntries(groupId, imagesRelationshipId, valuesR.objectEntryId, true, -1, -1)>
705 <#list images as image>
706 <#assign fileId = image.getValues()["image"]>
707 <#attempt>
708 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
709 <#assign imageList = imageList + [file]>
710 <#recover>
711 </#attempt>
712 </#list>
713
714 <#assign imageList = imageList?sort_by("fileName")>
715 <#if (imageList?size>0)>
716 <#assign image = imageList[0]>
717 </#if>
718 </#if>
719 <li ${hideLoadCarousel}>
720 <#if locale=="es_ES" >
721 <a href="/productos/${valuesR.productUrlEs}" class="w-card product w-100 br-10 oh">
722 <#else>
723 <a href="/en/products/${valuesR.productUrlEn}"
724 class="w-card product w-100 br-10 oh">
725 </#if>
726 <span class="image">
727 <#if (image?? && (!image?is_number)) >
728
729 <img class="ofc" loading="lazy"
730 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
731 <#else>
732 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
733 </#if>
734 </span>
735 <span class="container">
736 <span class="c-title bb-gray pt-10 pb-10 mb-10 dfc sb">
737 <h3 class="underline bold font-15">
738 ${getLanguage(valuesR.names)}
739 </h3>
740 <span class="card-chevron dfcc w-28 h-28 border-white br-50 circle-white"><i
741 class="bi bi-chevron-right bold"></i></span>
742 </span>
743 <span class="c-info font-14 c-neutral900">
744 ${getLanguageSection(valuesR.featuredSpecifications)}
745 </span>
746 <p style="display:none;"
747 class="product-brand">${valuesR.brand}</p>
748 <p style="display:none;"
749 class="product-id">${valuesR.objectEntryId}</p>
750 </span>
751
752 </a>
753
754 </li>
755 <#if count == 4 >
756 <#assign hideLoadCarousel>style="display:none"</#assign>
757 </#if>
758 <#if count == maxRelationships >
759 <#break>
760 </#if>
761 </#list>
762 </ul>
763 </div>
764 </#if>
765 <#-- ------------- Implementos compatibles: ------------- -->
766 <#if (allObjectsValues??)&&(allObjectsValues?size > 0) >
767
768 <#if implement>
769 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.maquinas"/></h2>
770 <#else>
771 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.products.implementos"/></h2>
772 </#if>
773
774
775 <div class="mb-40 p-relacionados">
776 <ul class="pb-20 product-implements-carousel">
777 <#assign hideLoadCarousel = "" />
778
779 <#assign allObjectsValues = allObjectsValues?sort_by("names")>
780 <#assign count=0 >
781 <#list allObjectsValues as valuesR>
782 <#assign count=count+1 >
783 <#assign imageList = [] />
784
785 <#-- ------------- Imagen del producto ------------- -->
786 <#assign attachmentFiles = cpAttachmentFileEntryService.getCPAttachmentFileEntries(classNameId, valuesR.objectEntryId, 0, 0, -1, -1) />
787 <#list attachmentFiles as attachmentFile>
788 <#attempt>
789 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile.getFileEntryId())/>
790 <#if (image.extension=="jpg"|| image.extension=="jpeg"||image.extension=="png") && !image.fileName?contains("features") && !image.fileName?contains("no2dimage2davailable")>
791 <#assign imageList = imageList + [image] />
792 </#if>
793 <#recover>
794 </#attempt>
795 </#list>
796 <#assign image = -1>
797 <#assign imageList = imageList?sort_by("fileName")>
798 <#if (imageList?size>0)>
799 <#assign image = imageList[0]>
800 <#else><#-- Fotos personalizadas -->
801 <#assign imagesRelationshipId = objectRelationshipService.getObjectRelationship(objectDefinitionId, "images").getObjectRelationshipId() >
802 <#assign images=objectEntryLocalService.getOneToManyObjectEntries(groupId, imagesRelationshipId, valuesR.objectEntryId, true, -1, -1)>
803 <#list images as image>
804 <#attempt>
805 <#assign fileId = image.getValues()["image"]>
806 <#assign file = dlFileEntryLocalService.getFileEntry(fileId)>
807 <#assign imageList = imageList + [file]>
808
809 <#recover>
810 </#attempt>
811 </#list>
812
813 <#assign imageList = imageList?sort_by("fileName")>
814 <#if (imageList?size>0)>
815 <#assign image = imageList[0]>
816 </#if>
817 </#if>
818 <li ${hideLoadCarousel}>
819 <#if locale=="es_ES" >
820 <a href="/productos/${valuesR.productUrlEs}" class="w-card product w-100 br-10 oh">
821 <#else>
822 <a href="/en/products/${valuesR.productUrlEn}"
823 class="w-card product w-100 br-10 oh">
824 </#if>
825 <span class="image">
826 <#if (image?? && (!image?is_number)) >
827 <img class="ofc" loading="lazy"
828 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
829 <#else>
830 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
831 </#if>
832 </span>
833 <#assign sectionLength = 1 />
834 <#attempt>
835 <#if getLanguageSection(valuesR.featuredSpecifications)?length == 0>
836 <#assign sectionLength = 0 />
837 </#if>
838 <#recover>
839
840 </#attempt>
841 <span class="container container-${sectionLength}">
842 <span class="c-title bb-gray pt-10 pb-10 mb-10 dfc sb">
843 <h3 class="underline bold font-15">
844 ${getLanguage(valuesR.names)}
845 </h3>
846 <span class="card-chevron dfcc w-28 h-28 border-white br-50 circle-white"><i
847 class="bi bi-chevron-right bold"></i></span>
848 </span>
849 <span class="c-info font-14 c-neutral900">
850 ${getLanguageSection(valuesR.featuredSpecifications)}
851
852 </span>
853 <p style="display:none;"
854 class="product-brand">${valuesR.brand}</p>
855 <p style="display:none;"
856 class="product-id">${valuesR.objectEntryId}</p>
857 </span>
858
859 </a>
860
861 </li>
862 <#if count == 4 >
863 <#assign hideLoadCarousel>style="display:none"</#assign>
864 </#if>
865 <#if count == maxRelationships >
866 <#break>
867 </#if>
868 </#list>
869 </ul>
870 </div>
871 </#if>
872
873
874 <#-- -------------------------------------------------------------------- FIN RELACIONADOS -------------------------------------------------------------------- -->
875
876 <#-- -------------------------------------------------------------------- CATEGORIAS RELACIONADAS -------------------------------------------------------------------- -->
877
878 <#assign count=0 >
879 <#if ((categories??) && (categories?size>0)) >
880 <#assign sisterCategories = assetCategoryLocalService.getSubcategoryIds(parentCategoryId)/>
881 <#assign parentCategory = category.getParentCategory()/>
882 <#assign parentCategoryName = parentCategory.getName() />
883
884 <#assign hideLoadCarousel = "" />
885
886 <#assign categories = [] />
887 <#list sisterCategories as categoryId>
888 <#assign showCategory = true/>
889 <#if categoryId!= parentCategoryId && categoryId!=category.getCategoryId()>
890 <#assign sisterCategory = assetCategoryLocalService.getAssetCategory(categoryId)/>
891 <#assign categoryProperties = assetCategoryPropertyService.getCategoryProperties(categoryId)/>
892 ${sisterCategory.setName("99")}
893 <#list categoryProperties as categoryProperty>
894 <#assign key=categoryProperty["key"]/>
895 <#if (key == "SORT") >
896 ${sisterCategory.setName(categoryProperty["value"])}
897 </#if>
898 <#if (key == "DONT_SHOW_CHILDS") >
899 <#assign showCategory = false/>
900 </#if>
901 </#list>
902
903 <#if showCategory >
904 <#assign categories = categories+[sisterCategory] />
905 </#if>
906 </#if>
907 </#list>
908 <#if ((categories??) && (categories?size>0)) && showSisterCategories >
909 <h2 class="font-20 c-neutral900 mb-20 dfc"><@liferay.language key="finanzauto.products.other.categories"/>
910 ${parentCategoryName}:</h2>
911 <div class="mb-40 p-relacionados">
912 <ul class="pb-20 categories-carousel">
913 <#assign categories = categories?sort_by("name")>
914
915 <#list categories as category>
916 <#attempt>
917 <#assign count=count+1 >
918 <#assign categoryId = category.getCategoryId() />
919
920 <#assign attachmentFile = cpAttachmentFileEntryService.getCPAttachmentFileEntries(assetCategoryClassNameId, categoryId, 0, 0, -1, -1) />
921 <#assign image=-1>
922 <#if ((attachmentFile??) && (attachmentFile?size>0))>
923 <#assign image = dlFileEntryLocalService.getFileEntry(attachmentFile[0].getFileEntryId())>
924 </#if>
925 <#assign categoryName = category.getTitle(locale) />
926 <#assign categoryHreflist = friendlyURLEntryLocalService.getFriendlyURLEntries(groupId,assetCategoryClassNameId, categoryId)/>
927
928 <#list categoryHreflist as categoryHref>
929 <#assign categoryHrefLocale = friendlyURLEntryLocalService.getFriendlyURLEntryLocalization(categoryHref.getFriendlyURLEntryId(),locale)/>
930 </#list>
931 <li ${hideLoadCarousel}>
932 <#assign url_bc = "">
933 <#if locale == "en_GB">
934 <#assign url_bc = "/en" >
935 </#if>
936
937 <a href="${url_bc}/${categoryHrefLocale.getUrlTitle()?replace('/g/','/')}"
938 class="w-card w-100 product fleet">
939 <span class="image p-15">
940 <#if image?? && (!image?is_number) >
941 <img class="ofc" loading="lazy"
942 src="${portalURL}/o/adaptive-media/image/${image.getFileEntryId()}/Thumbnail-300x300/${image.fileName}"/>
943 <#else>
944 <img class="ofc" src="/o/finanzauto-theme/images/no-photo.jpg"/>
945 </#if>
946 </span>
947 <span class="container">
948 <span class="card-title">
949 <h3 class="underline m-font-14 font-16">
950 ${categoryName}
951 </h3>
952 <span class="card-chevron dfcc w-32 h-32 border-white br-50"><i
953 class="bi bi-chevron-right"></i></span>
954 </span>
955 </span>
956 </a>
957 </li>
958 <#if count == 4 >
959 <#assign hideLoadCarousel>style="display:none"</#assign>
960 </#if>
961 <#recover>
962 </#attempt>
963 </#list>
964 </ul>
965 </div>
966 </#if>
967 </#if>
968
969
970
971 <#-- -------------------------------------------------------------------- FIN CATEGORIAS RELACIONADAS-------------------------------------------------------------------- -->
972
973 </div>
974
975 <#if ((values.url360Inside)?? && (values.url360Inside?has_content)) || (values.url360Outside)?? &&(values.url360Outside?has_content) || ((values.urlVirtualShowroom)?? &&(values.urlVirtualShowroom?has_content)) >
976 <div class="bg-white pt-60 pb-60">
977 <div class="cc">
978 <#-- -------------------------------------------------------------------- 360 -------------------------------------------------------------------- -->
979
980 <#assign getIframe=""/>
981
982 <#assign selectedTab="selected" />
983 <#assign styleTab=""/>
984
985
986 <ul class="df jcc pb-5 mb-20 bb-gray">
987 <#if (values.url360Inside)?? && (values.url360Inside?has_content) >
988 <#assign secure360InsideUrl = values.url360Inside?replace("http:", "https:")>
989 <li class="pl-10 pr-10 pr"><h3 data-tab="1"
990 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.360.interior" /></h3>
991 </li>
992 <#assign getIframe>${getIframe}
993 <div id="data-tab-1" ${styleTab} class="content-tab df jcc">
994 <iframe class="border-0" width="750" height="750" src="${secure360InsideUrl}"
995 scrolling="no"></iframe>
996 </div></#assign>
997 <#assign selectedTab="normal" />
998 <#assign styleTab>style="display:none;"</#assign>
999 </#if>
1000
1001 <#if (values.url360Outside)?? &&(values.url360Outside?has_content) >
1002 <#assign secure360OutsideUrl = values.url360Outside?replace("http:", "https:")>
1003 <li class="pl-10 pr-10 pr"><h3 data-tab="2"
1004 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.360.exterior" /></h3>
1005 </li>
1006 <#assign getIframe>${getIframe}
1007 <div id="data-tab-2" ${styleTab} class="content-tab df jcc">
1008 <iframe class="border-0" width="750" height="750"
1009 src="${secure360OutsideUrl}" scrolling="no"></iframe>
1010 </div></#assign>
1011 <#assign selectedTab="normal" />
1012 <#assign styleTab>style="display:none;"</#assign>
1013 </#if>
1014 <#-- -------------------------------------------------------------------- FIN 360-------------------------------------------------------------------- -->
1015 <#-- -------------------------------------------------------------------- TOUR VIRTUAL -------------------------------------------------------------------- -->
1016 <#if (values.urlVirtualShowroom)?? &&(values.urlVirtualShowroom?has_content) >
1017 <#assign secureVirtualShowroomUrl = values.urlVirtualShowroom?replace("http:", "https:")>
1018 <li class="pl-10 pr-10 pr"><h3 data-tab="3"
1019 class="nav-tab ${selectedTab} font-16 cp"><@liferay.language key="finanzauto.products.tour.virtual" /></h3>
1020 </li>
1021 <#assign getIframe>${getIframe}
1022 <div id="data-tab-3" ${styleTab} class="content-tab df jcc">
1023 <iframe class="border-0" width="750" height="750"
1024 src="${secureVirtualShowroomUrl}" scrolling="no"></iframe></div></#assign>
1025 <#assign selectedTab="normal" />
1026 <#assign styleTab>style="display:none;"</#assign>
1027 </#if>
1028 </ul>
1029 <div class="tabs-container">
1030 ${getIframe}
1031 </div>
1032 <#-- -------------------------------------------------------------------- FIN TOUR VIRTUAL-------------------------------------------------------------------- -->
1033 </div>
1034 </div>
1035 </#if>
1036 </div>
1037 </div>
1038
1039 <div id="fixed-info" class="bb-gray2">
1040 <div class="cc dfc sb h-85 gap-20">
1041 <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"
1042 loading="lazy"
1043 src="${productImage}"/></span><p
1044 class="mw-550 font-18 bold c-neutral900">${name}</p></span>
1045 <div class="grid-2 gap-20 w-100 mw-350 m-mw-i">
1046 <button
1047 class="btn-master bg-n c-white h-50 cp b-0" onclick="callFinanzauto()"><i
1048 class="bi bi-telephone mr-10 font-18 btn-llamanos"></i><@liferay.language key="finanzauto.products.llamanos" />
1049 </button>
1050 <button onclick="showModalProductAndPushAnalytics()"
1051 class="btn-interes btn-master bg-primary h-50 c-white b-0 cp"><@liferay.language key="finanzauto.products.me.interesa" />
1052 <i class="ml-5 bi bi-arrow-right-short font-24"></i></button>
1053 </div>
1054 </div>
1055 </div>
1056
1057
1058 </section>
1059 <div class="modal fade" id="modalPhone" tabindex="-1" role="dialog" aria-labelledby="modalNoResultsLabel"
1060 aria-hidden="true" style="display:none;">
1061 <div class="modal-dialog" role="document">
1062 <div class="modal-content">
1063 <div class="modal-header">
1064 <div class="panel-header tac pb-10 mb-30">
1065 <h2 class="h2 font-32 bold mt-40"><@liferay.language key="finanzauto.products.llamanos" /></h2>
1066 <button type="button" class="close-popup close" data-dismiss="modal" aria-label="Close">
1067 <span aria-hidden="true"><i class="bi bi-x"></i></span>
1068 </button>
1069 </div>
1070 </div>
1071 <div class="modal-body">
1072 <div class="panel cc pt-40 pb-40 maxw-900">
1073 <div class="panel-body">
1074 <div class="call-us">
1075 <a href="tel:+34${finanzautoPhone}"><span><i
1076 class="bi bi-telephone-outbound"></i></span></a>
1077 <p>
1078 <a href="tel:+34${finanzautoPhone}">+34 ${finanzautoPhone}</a>
1079 </p>
1080 </div>
1081 </div>
1082 </div>
1083 </div>
1084 </div>
1085 </div>
1086 </div>
1087 <style>
1088 .controls-visible.has-control-menu.scrolled-product div#fixed-info {
1089 margin-top: 0px !important;
1090 }
1091
1092 body.modal-open header#banner {
1093 z-index: 1;
1094 }
1095
1096 HTML body header#banner {
1097 transform: inherit !important;
1098 }
1099
1100 .w-card span.container.container-0 span.c-title {
1101 border: 0px;
1102 margin-bottom: 0px;
1103 padding-bottom: 0px;
1104 align-items: center;
1105 justify-content: center;
1106 }
1107
1108 @media (max-width: 990px) {
1109
1110 .active-video-ytb {
1111 position: fixed;
1112 top: 0px;
1113 left: 0px;
1114 z-index: 999;
1115 width: 100%;
1116 height: 100%;
1117 background-color: #fffffff5;
1118 display: flex;
1119 align-items: center;
1120 justify-content: center;
1121 padding-left: 20px;
1122 padding-right: 20px;
1123 }
1124
1125 .active-video-ytb iframe {
1126 width: 100%;
1127 max-height: calc(100% - 100px);
1128 height: 350px;
1129 border: 0px;
1130 max-width: 700px;
1131 }
1132
1133 .close-video-mobile {
1134 position: absolute;
1135 top: 10px;
1136 right: 15px;
1137 font-size: 29px;
1138 cursor: pointer;
1139 }
1140
1141 .youtube-mobile-video {
1142 overflow: hidden;
1143 }
1144
1145 .youtube-mobile-video #smartsupp-widget-container {
1146 visibility: hidden;
1147 }
1148 }
1149
1150
1151 @media (min-width: 770px) {
1152 body header#banner {
1153 position: relative !important;
1154 top: 0px;
1155 width: 100%;
1156 transform: translateY(0px) !important;
1157
1158 }
1159
1160 body.languagePopup header#banner {
1161 transform: inherit !important;
1162 }
1163 }
1164
1165 /*.portlet-breadcrumb ul li a, .portlet-breadcrumb ul li span {
1166 max-width: 350px;
1167 white-space: nowrap;
1168 overflow: hidden;
1169 text-overflow: ellipsis;
1170 }*/
1171
1172 .portlet-breadcrumb > ul > li {
1173 float: left;
1174 }
1175
1176 .portlet-breadcrumb > ul > li:first-child {
1177 position: absolute;
1178 left: 0px;
1179 }
1180
1181 .portlet-breadcrumb > ul {
1182 display: inline-block !important;
1183 width: 100%;
1184 padding-left: 44px;
1185 position: relative;
1186 box-sizing: border-box;
1187 }
1188
1189
1190 .b-0 {
1191 border: 0;
1192 }
1193
1194 .caterpillar #metric, .caterpillar #imperial {
1195 border: 1px solid #fc0;
1196 }
1197
1198 #metric, #imperial {
1199 margin-left: 0px;
1200 max-height: 30px;
1201 border: 1px solid #e4032e;
1202 }
1203
1204 #metric:not(.bg-primary) {
1205 font-weight: normal !important;
1206 }
1207
1208 #imperial:not(.bg-primary) {
1209 font-weight: normal !important;
1210 }
1211
1212 .image-selector {
1213 height: 530px;
1214 }
1215
1216 .principal-carousel:not(.tns-carousel) {
1217
1218 position: relative;
1219 max-height: 530px;
1220 overflow: hidden;
1221 }
1222
1223 .principal-carousel .btn-play i {
1224 color: #fff;
1225 font-size: 25px;
1226 }
1227
1228 .principal-carousel .btn-play {
1229 position: absolute;
1230 z-index: 3;
1231 width: 100%;
1232 height: 100%;
1233 display: flex;
1234 align-items: center;
1235 justify-content: center;
1236 }
1237
1238 body .principal-carousel .overlay {
1239 opacity: 0.6 !important;
1240 background-color: #242424 !important;
1241 z-index: 2 !important;
1242 height: 80px !important;
1243 width: 100%;
1244 position: absolute;
1245 top: 0px !important;
1246 }
1247
1248 .accordion-content {
1249 padding-top: 20px;
1250 }
1251
1252 div#especificaciones .tar {
1253 text-align: left;
1254 margin-top: 5px;
1255 margin-bottom: 5px;
1256 }
1257
1258 .pt-header {
1259 display: grid;
1260
1261 column-gap: 40px;
1262 grid: "a b""a c" 1fr;
1263 grid-template-columns: 60% 1fr;
1264 }
1265
1266 .pr-title {
1267 grid-area: b;
1268 }
1269
1270 .pr-desc {
1271 grid-area: c;
1272 }
1273
1274 .pr-images {
1275 grid-area: a;
1276 }
1277
1278 .pr-images {
1279 display: grid;
1280 grid-template-columns: 100px 1fr;
1281 width: 100%;
1282 }
1283
1284 .caterpillar .image-selector .active img {
1285 outline: 2px solid #FFCC00;
1286 outline-offset: -2px;
1287 }
1288
1289 .image-selector .active {
1290 outline: 2px solid #000;
1291 }
1292
1293 .image-selector > div:not(.active):hover {
1294 outline: 2px solid #9d9d9d;
1295 }
1296
1297 .product-carousel .tns-item {
1298 padding-right: 10px;
1299 }
1300
1301 .product-implements-carousel .tns-item {
1302 padding-right: 10px;
1303 }
1304
1305 .categories-carousel .tns-item {
1306 padding-right: 10px;
1307 }
1308
1309 .p-relacionados .tns-outer {
1310 display: grid;
1311 grid-template:
1312 "a a"
1313 "b c";
1314 }
1315
1316 .p-relacionados .tns-controls {
1317 grid-area: c;
1318 display: flex;
1319 justify-content: flex-end;
1320 padding-right: 10px;
1321 }
1322
1323 .p-relacionados .tns-nav {
1324 grid-area: b;
1325 }
1326
1327 .p-relacionados .tns-ovh {
1328 grid-area: a;
1329 }
1330
1331 .tns-controls button {
1332 width: 32px;
1333 height: 32px;
1334 border-radius: 50%;
1335 border: 0px;
1336 background-color: #030712;
1337 color: #fff;
1338 overflow: hidden;
1339 white-space: nowrap;
1340 text-indent: 100px;
1341 position: relative;
1342 }
1343
1344 .tns-controls button + button {
1345 margin-left: 10px;
1346 }
1347
1348 .tns-controls button + button::after {
1349 content: "\F285";
1350 font-size: 14px;
1351 color: #fff;
1352 text-indent: 0px;
1353 left: 10px;
1354 top: 9px;
1355 position: absolute;
1356 z-index: 1;
1357 font-family: 'bootstrap-icons';
1358 font-weight: bold;
1359 }
1360
1361 .tns-controls button:first-child::after {
1362 content: "\F284";
1363 font-size: 14px;
1364 color: #fff;
1365 text-indent: 0px;
1366 left: 9px;
1367 top: 9px;
1368 position: absolute;
1369 z-index: 1;
1370 font-family: 'bootstrap-icons';
1371 font-weight: bold;
1372 }
1373
1374 .tns-controls button[disabled] {
1375 background-color: #d4d6d8;
1376 color: #404953;
1377 }
1378
1379 .tns-controls button[disabled]::after {
1380 color: #404953;
1381 }
1382
1383 .tns-nav button {
1384 width: 50px;
1385 margin-right: 20px;
1386 border-radius: 6px;
1387 border: 0px;
1388 background-color: #bfc2c6;
1389 height: 4px;
1390 }
1391
1392 .tns-nav button.tns-nav-active {
1393 background-color: #030712;
1394 }
1395
1396 .tns-item {
1397 opacity: 0;
1398 transition: all 0.25s linear;
1399 }
1400
1401 .tns-item.tns-slide-active {
1402 opacity: 1;
1403 }
1404
1405 #especificaciones table tr {
1406 display: grid;
1407 width: 100%;
1408 grid-template-columns: 1fr 1fr;
1409 padding-top: 20px;
1410 padding-bottom: 20px;
1411 border-top: 1px solid #adb1b6;
1412 }
1413
1414 table tr:nth-child(even) {
1415 background-color: #d4d6d8;
1416 }
1417
1418 div#especificaciones table tr td {
1419 padding-left: 20px;
1420 font-size: 16px;
1421 letter-spacing: 0.5px;
1422 color: #1A2431;
1423 }
1424
1425 #especificaciones table {
1426
1427 width: 100%;
1428 }
1429
1430 #especificaciones h4, #ventajas h4, #caracteristicas h4 {
1431 font-size: 18px;
1432 margin-top: 20px;
1433 width: 100%;
1434 display: inline-block;
1435 margin-bottom: 10px;
1436 }
1437
1438 #caracteristicas ul {
1439 list-style: disc;
1440 margin-top: 10px;
1441 margin-bottom: 10px;
1442 padding-left: 20px;
1443 }
1444
1445 #caracteristicas ul li {
1446 margin-bottom: 10px;
1447 }
1448
1449 .produc-detail, .portlet-boundary_com_liferay_site_navigation_breadcrumb_web_portlet_SiteNavigationBreadcrumbPortlet_ {
1450 background-color: #f7f8f8;
1451 }
1452
1453 i.bi.bi-file-earmark-pdf {
1454 margin-right: 10px;
1455 font-size: 20px;
1456 height: 100%;
1457 }
1458
1459 div#fixed-info {
1460 position: fixed;
1461 top: 0px;
1462 left: 0px;
1463 width: 100%;
1464 z-index: -1;
1465 background-color: #fff;
1466 opacity: 0;
1467 transition: opacity 0.2s linear;
1468 }
1469
1470 .scrolled-product div#fixed-info {
1471 z-index: 1;
1472 opacity: 1;
1473 }
1474
1475 .controls-visible.has-control-menu.scrolled-product div#fixed-info {
1476 margin-top: 56px;
1477 }
1478
1479 i.bi.bi-zoom-in {
1480 left: 7px;
1481 font-size: 14px;
1482 position: relative;
1483 top: 4px;
1484 }
1485
1486 .zoom-image {
1487 overflow: hidden;
1488 }
1489
1490 body.zoom-image .image-principal {
1491 position: fixed;
1492 background-color: #030712;
1493 width: 100%;
1494 height: 100%;
1495 top: 0px;
1496 left: 0;
1497 z-index: 2;
1498 display: flex;
1499 align-items: center;
1500 justify-content: center;
1501 }
1502
1503 body.zoom-image .zoom-it {
1504 display: none;
1505 }
1506
1507 body.zoom-image .image-principal > span:first-child {
1508 position: absolute;
1509 top: 0px;
1510 left: 0px;
1511 width: 100%;
1512 height: 100%;
1513 display: block;
1514 padding: 50px;
1515 }
1516
1517 body.zoom-image .image-principal > span:first-child img {
1518 width: 100%;
1519 height: 100%;
1520 position: relative;
1521 object-fit: contain;
1522 background-color: transparent;
1523 }
1524
1525 body.zoom-image header#banner {
1526 z-index: 0;
1527 }
1528
1529 body.zoom-image .image-selector .active > span {
1530 display: block;
1531 width: 80%;
1532 height: 80%;
1533 position: relative;
1534 }
1535
1536 body.zoom-image i.bi.bi-x {
1537 display: block !important;
1538 color: #fff;
1539 font-size: 32px;
1540 position: absolute;
1541 top: 20px;
1542 right: 20px;
1543 cursor: pointer;
1544 }
1545
1546 body.zoom-image .image-selector .active {
1547 cursor: default !important;
1548 }
1549
1550 body.zoom-image .cadmin.control-menu-container {
1551 display: none;
1552 }
1553
1554 h3.nav-tab.selected::after {
1555 content: "";
1556 width: 100%;
1557 height: 1px;
1558 background-color: black;
1559 position: absolute;
1560 bottom: -6px;
1561 left: 0px;
1562 }
1563
1564 h3.nav-tab:hover:not(.selected)::after {
1565 content: "";
1566 width: 100%;
1567 height: 1px;
1568 background-color: rgb(204, 204, 204);
1569 position: absolute;
1570 bottom: -6px;
1571 left: 0px;
1572 }
1573
1574 #especificaciones table tr:first-child {
1575 border-top: 0px;
1576 }
1577
1578 .accordion i {
1579 transform: rotate(0deg);
1580 transition: all 0.25s linear;
1581 position: relative;
1582 top: 0px;
1583 }
1584
1585 .accordion.show-ac i {
1586 transform: rotate(180deg);
1587 top: 9px;
1588 }
1589
1590 .accordion table, .accordion table tbody {
1591 display: block;
1592 width: 100%;
1593 }
1594
1595 .accordion table {
1596 margin-bottom: 40px;
1597 }
1598
1599 .feature-nav {
1600 display: flex;
1601 font-size: 14px;
1602 border-bottom: 1px solid #b5b5b5;
1603 gap: 10px;
1604 margin-bottom: 40px;
1605 }
1606
1607 .feature-nav > div {
1608 position: relative;
1609 display: flex;
1610 align-items: center;
1611 }
1612
1613 .feature-nav > div.selected::after {
1614 content: "";
1615 width: 100%;
1616 height: 3px;
1617 background-color: black;
1618 position: absolute;
1619 bottom: -2px;
1620 left: 0px;
1621 }
1622
1623 #caracteristicas .feature-nav h4 {
1624 font-size: 12px !important;
1625 font-weight: normal;
1626 cursor: pointer;
1627 }
1628
1629 #caracteristicas .feature-nav > .selected h4 {
1630 text-shadow: 0px 0px 1px;
1631 }
1632
1633 .features-container {
1634 display: grid;
1635 grid-template-columns: 40% 1fr;
1636 gap: 20px;
1637 }
1638
1639 .features-container > div img {
1640 max-width: 100%;
1641 object-fit: cover;
1642 }
1643
1644 .features-container .img-content {
1645 display: flex;
1646 background-color: #fff;
1647 justify-content: center;
1648 }
1649
1650 ul.product-carousel:not(.tns-carousel) {
1651 display: grid;
1652 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1653 gap: 10px;
1654 }
1655
1656 .product-carousel.tns-carousel > li {
1657 display: inline-block !important;
1658 }
1659
1660 ul.product-implements-carousel:not(.tns-carousel) {
1661 display: grid;
1662 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1663 gap: 10px;
1664 }
1665
1666 .product-implements-carousel.tns-carousel > li {
1667 display: inline-block !important;
1668 }
1669
1670 ul.categories-carousel:not(.tns-carousel) {
1671 display: grid;
1672 grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
1673 gap: 10px;
1674 }
1675
1676 .categories-carousel.tns-carousel > li {
1677 display: inline-block !important;
1678 }
1679
1680 .image-selector .tns-nav button {
1681 width: 10px;
1682 height: 10px;
1683 padding: 0px;
1684 margin: 0px;
1685 }
1686
1687 .image-selector .tns-nav {
1688 display: flex;
1689 align-items: center;
1690 justify-content: center;
1691 gap: 10px;
1692 position: absolute;
1693 z-index: 1;
1694 width: 100%;
1695 padding-left: 110px;
1696 bottom: -30px;
1697 }
1698
1699 .image-selector .tns-controls {
1700 display: none;
1701 }
1702
1703 .h-90 {
1704 height: 90px;
1705 }
1706
1707 .image-selector > div:not(.active):hover, .image-selector .active {
1708 outline: 0;
1709 }
1710
1711 .principal-carousel.tns-carousel .tns-item {
1712 opacity: 1;
1713 }
1714
1715 span.arrow-prev {
1716 background-color: #2c2c2c;
1717 width: 32px;
1718 height: 32px;
1719 border-radius: 50%;
1720 top: 50%;
1721 position: absolute;
1722 left: 25px;
1723 align-items: center;
1724 justify-content: center;
1725 color: #fff;
1726 cursor: pointer;
1727 }
1728
1729 span.arrow-next {
1730 background-color: #2c2c2c;
1731 width: 32px;
1732 height: 32px;
1733 border-radius: 50%;
1734 top: 50%;
1735 position: absolute;
1736 right: 25px;
1737 align-items: center;
1738 justify-content: center;
1739 color: #fff;
1740 cursor: pointer;
1741 }
1742
1743 .zoom-image .image-principal:not(.no-c) span.arrow-next, .zoom-image .image-principal:not(.no-c) span.arrow-prev {
1744 display: flex !important;
1745 }
1746
1747 span.arrow-next.disabled, span.arrow-prev.disabled {
1748 opacity: 0.5;
1749 }
1750
1751 .p-relacionados .tns-nav {
1752 display: none;
1753 }
1754
1755 #featuredSpecifications span span p, #featuredSpecifications div div p {
1756 text-align: left !important;
1757 margin-right: 1rem;
1758
1759 }
1760
1761 #featuredSpecifications span span.grid-2, #featuredSpecifications div div.grid-2 {
1762 grid-template-columns: 1fr !important;
1763
1764 }
1765
1766 #featuredSpecifications span.c-info, #featuredSpecifications div.c-info {
1767 display: flex !important;
1768
1769 }
1770
1771 div.featuredspecifications {
1772 margin-bottom: 20px;
1773 gap: 20px;
1774 display: grid;
1775 grid-template-columns: 1fr 1fr 1fr;
1776 }
1777
1778 div.featuredspecifications div p.name {
1779 color: #333D48;
1780 font-size: 0.88rem;
1781 line-height: 1.13rem;
1782 }
1783
1784 div.featuredspecifications div p.value {
1785 font-weight: bold;
1786 margin-top: 0px;
1787 font-size: 1rem;
1788 line-height: 1.5rem;
1789 letter-spacing: 0.5px
1790 }
1791
1792
1793 .zoom-image .image-principal iframe {
1794 width: calc(100% - 200px);
1795 margin-left: 100px;
1796 height: calc(100% - 100px);
1797 margin-top: 50px;
1798 }
1799
1800
1801 /*
1802 div.pr-desc span.grid-2{
1803 display: flex;
1804 flex-direction: column;
1805 text-align:left;
1806 }
1807 #featuredSpecifications span{
1808 display:flex;
1809 justify-content: start;
1810 align-items: start;
1811 }*/
1812
1813 .product-carousel.tns-slider {
1814 display: flex;
1815 }
1816
1817 .product-carousel > .tns-item {
1818 display: flex !important;
1819 height: auto;
1820 }
1821
1822 .product-carousel a.product {
1823 height: 100%;
1824 }
1825
1826 .product-carousel a.product span.image {
1827 overflow: hidden;
1828 height: 175px;
1829 }
1830
1831 .product-carousel a.product span.image img {
1832 position: absolute;
1833 top: 0px;
1834 left: 0px;
1835 }
1836
1837 .p-relacionados .product-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1838 position: absolute;
1839 z-index: -1;
1840 opacity: 0;
1841 }
1842
1843 .product-implements-carousel.tns-slider {
1844 display: flex;
1845 }
1846
1847 .product-implements-carousel > .tns-item {
1848 display: flex !important;
1849 height: auto;
1850 }
1851
1852
1853 .product-implements-carousel a.product {
1854 height: 100%;
1855 }
1856
1857 .product-implements-carousel a.product span.image {
1858 overflow: hidden;
1859 height: 175px;
1860 }
1861
1862 .product-implements-carousel a.product span.image img {
1863 position: absolute;
1864 top: 0px;
1865 left: 0px;
1866 }
1867
1868 .p-relacionados .product-implements-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1869 position: absolute;
1870 z-index: -1;
1871 opacity: 0;
1872 }
1873
1874 .p-relacionados .categories-carousel:not(.tns-carousel) li + li + li + li + li ~ li {
1875 position: absolute;
1876 z-index: -1;
1877 opacity: 0;
1878 }
1879
1880 .w-card.product span.image {
1881 overflow: hidden;
1882 }
1883
1884 body.modal-open {
1885 overflow: hidden;
1886 }
1887
1888 div#modalProduct {
1889 border: 0px;
1890 width: 100%;
1891 height: 100%;
1892 padding: 0px;
1893 top: 0px;
1894 left: 0px;
1895 background-color: transparent;
1896 animation: none !important;
1897 }
1898
1899 div#modalProduct.modal.show {
1900 display: flex !important;
1901 flex-direction: column;
1902 justify-content: center;
1903 align-items: center;
1904 }
1905
1906 div#modalProduct.modal.show::after {
1907 content: "";
1908 width: 100%;
1909 left: 0px;
1910 top: 0px;
1911 height: 100%;
1912 background-color: #000;
1913 position: absolute;
1914 opacity: 0.5;
1915 z-index: 1;
1916 }
1917
1918 div#modalProduct .modal-dialog {
1919 position: relative;
1920 z-index: 2;
1921 background-color: #fff;
1922 width: 100%;
1923 height: 100%;
1924 max-width: 800px;
1925 max-height: 70dvh;
1926 border-radius: 10px;
1927 display: flex !important;
1928 flex-direction: column;
1929 justify-content: center;
1930 align-items: center;
1931 overflow: hidden;
1932 }
1933
1934 div#modalPhone .modal-dialog {
1935 position: relative;
1936 z-index: 2;
1937 background-color: #fff;
1938 width: 100%;
1939 height: 100%;
1940 max-width: 300px;
1941 max-height: 40dvh;
1942 border-radius: 10px;
1943 display: flex !important;
1944 flex-direction: column;
1945 justify-content: center;
1946 align-items: center;
1947 overflow: hidden;
1948 }
1949
1950 .modal-dialog .modal-content {
1951 width: 100%;
1952 height: 100%;
1953 overflow-y: auto;
1954 padding: 40px;
1955 }
1956
1957 div#modalProduct .modal-header .panel-header {
1958
1959 }
1960
1961 div#modalProduct .modal-header .panel-header .close {
1962 top: -20px;
1963 right: 0px;
1964 }
1965
1966
1967 div#modalProduct .btn-primary:hover {
1968 color: #fff;
1969 }
1970
1971
1972 div#modalProduct .modal-dialog {
1973 animation: none !important;
1974 }
1975
1976 div#modalProduct .panel.cc.pt-40.pb-40.maxw-900 {
1977 padding-top: 0px;
1978 }
1979
1980 div#modalPhone .modal-header .panel-header {
1981
1982 }
1983
1984 div#modalPhone .modal-header .panel-header .close {
1985 top: 15px;
1986 right: 15px;
1987 }
1988
1989 div#modalPhone .modal-header .panel-header .close {
1990 font-size: 30px;
1991 }
1992
1993
1994 div#modalPhone .btn-primary:hover {
1995 color: #fff;
1996 }
1997
1998
1999 div#modalPhone .modal-dialog {
2000 animation: none !important;
2001 }
2002
2003 div#modalPhone .panel.cc.pt-40.pb-40.maxw-900 {
2004 padding-top: 0px;
2005 }
2006
2007 #modalPhone {
2008 position: fixed;
2009 }
2010
2011 .modal-open.show-phone-popup #modalPhone {
2012 background-color: #000000eb;
2013 width: 100%;
2014 height: 100%;
2015 top: 0px;
2016 left: 0px;
2017 z-index: 99;
2018 justify-content: center;
2019 align-items: center;
2020 display: flex !important;
2021 }
2022
2023
2024 .modal-open.show-phone-popup #modalPhone .modal-dialog {
2025 max-width: 400px;
2026 max-height: 350px;
2027 border-radius: 10px !important;
2028 }
2029
2030 .modal-open.show-phone-popup #modalPhone .modal-dialog .modal-content {
2031 width: 100%;
2032 height: 100%;
2033 overflow-y: auto;
2034 padding: 20px;
2035 }
2036
2037 #modalPhone .call-us {
2038 display: flex;
2039 flex-direction: column;
2040 align-items: center;
2041 justify-content: center;
2042 }
2043
2044 .call-us a > span {
2045 width: 100px;
2046 height: 100px;
2047 background-color: #f2f2f2;
2048 display: inline-flex;
2049 justify-content: center;
2050 align-items: center;
2051 border-radius: 50%;
2052 font-size: 33px;
2053 margin-bottom: 20px;
2054 }
2055
2056 .call-us a {
2057 letter-spacing: 3px;
2058 }
2059
2060 .product-implements-carousel span.c-title > p {
2061 padding-right: 10px;
2062 }
2063
2064 @media (max-width: 900px) {
2065
2066 div#modalProduct.modal.show {
2067 justify-content: flex-end;
2068 }
2069
2070 #modalProduct .modal-dialog {
2071 position: relative;
2072 z-index: 2;
2073 background-color: #fff;
2074 width: 96%;
2075 max-width: 100%;
2076 max-height: 100%;
2077 border-radius: 10px;
2078 overflow-x: hidden;
2079 height: 80dvh;
2080 border-radius: 10px 10px 0px 0px !important;
2081 }
2082
2083
2084 #modalPhone .modal-dialog {
2085 position: relative;
2086 z-index: 2;
2087 background-color: #fff;
2088 width: 96%;
2089 max-width: 100%;
2090 max-height: 100%;
2091 border-radius: 10px;
2092 overflow-x: hidden;
2093 height: 80dvh;
2094 border-radius: 10px 10px 0px 0px !important;
2095 }
2096 }
2097
2098 /**/
2099
2100 @media (max-width: 975px) {
2101
2102 .img-marca {
2103 margin-top: 40px;
2104 }
2105
2106 .pt-header {
2107 grid:
2108 "b"
2109 "a"
2110 "c";
2111
2112 }
2113
2114 .feature-nav {
2115 width: 100%;
2116 white-space: nowrap;
2117 overflow-y: hidden;
2118 overflow-x: scroll;
2119 padding-bottom: 10px;
2120 border-bottom: 0px;
2121 gap: 0;
2122 }
2123
2124 .feature-nav > div {
2125 padding-left: 10px;
2126 padding-right: 10px;
2127 border-bottom: 1px solid #b5b5b5;
2128 }
2129
2130 .features-container {
2131 grid-template-columns: 1fr;
2132 gap: 20px;
2133 }
2134
2135 .tag-navigation {
2136 white-space: nowrap;
2137 overflow-y: auto;
2138 padding-bottom: 10px;
2139 }
2140
2141 }
2142
2143 @media (max-width: 769px) {
2144 div#modalProduct form textarea {
2145 min-height: 100px;
2146 max-height: 100px;
2147 }
2148
2149 div#modalProduct .modal-header .panel-header .close {
2150 top: 12px;
2151 right: 8px;
2152 }
2153
2154 .modal-open header#banner {
2155 z-index: 1;
2156 }
2157
2158 body div#modalProduct .modal-dialog {
2159 max-height: 98dvh;
2160 }
2161
2162 .image-selector-mobile .video-yt iframe {
2163 width: 100%;
2164 height: 100%;
2165 border: 0px;
2166 position: absolute;
2167 z-index: 99;
2168 max-width: 700px;
2169 }
2170
2171 .image-selector-mobile .btn-play.c-video {
2172 color: #fff;
2173 z-index: 99;
2174 position: absolute;
2175 font-size: 40px;
2176 top: 50%;
2177 left: 50%;
2178 margin-left: -20px;
2179 margin-top: -25px;
2180 }
2181
2182 body section#content .image-selector-mobile .overlay.c-video {
2183 opacity: 0.5;
2184 width: 100%;
2185 height: 100%;
2186 position: absolute;
2187 top: 0px;
2188 left: 0px;
2189 background-color: #565656;
2190 z-index: 99;
2191 }
2192
2193 .produc-detail .image-selector-mobile .tns-nav button.tns-nav-active {
2194 background-color: #030712;
2195 }
2196
2197 body .produc-detail .pr-images.h-530 {
2198 min-height: 400px;
2199 }
2200
2201 .image-selector-mobile .tns-ovh {
2202 order: 1;
2203 }
2204
2205 .image-selector-mobile .tns-nav {
2206 order: 2;
2207 text-align: center;
2208 margin-top: 20px;
2209 }
2210
2211 .image-selector-mobile .tns-outer {
2212 display: flex;
2213 flex-direction: column;
2214 }
2215
2216 .image-selector-mobile .tns-nav button {
2217 width: 10px;
2218 margin-right: 8px;
2219 border-radius: 50%;
2220 border: 0px;
2221 background-color: #bfc2c6;
2222 height: 10px;
2223 padding: 0px;
2224 }
2225
2226 .image-selector-mobile .tns-controls {
2227 display: none;
2228 }
2229
2230 .image-selector-mobile .tns-item {
2231 opacity: 1;
2232 }
2233
2234 .image-selector-mobile .tns-outer, .image-selector-mobile .tns-outer, .image-selector-mobile .tns-ovh, .image-selector-mobile .tns-inner,
2235 .image-selector-mobile ul.mobile-carousel, .image-selector-mobile .mobile-carousel > li {
2236 height: 100%;
2237 }
2238
2239 .image-selector-mobile {
2240 display: block !important;
2241 width: 100%;
2242 }
2243
2244 .image-selector-mobile ~ div {
2245 display: none;
2246 }
2247
2248
2249 #widgetMessengerFrame {
2250 position: fixed !important;
2251 top: 0px !important;
2252 left: 0px !important;
2253 width: 100% !important;
2254 height: 100% !important;
2255 }
2256
2257 .scrolled-product #smartsupp-widget-container > div {
2258 bottom: 100px !important;
2259 }
2260
2261 body #footer {
2262 padding-bottom: 100px;
2263 }
2264
2265 body div#fixed-info {
2266 top: inherit;
2267 bottom: 0px;
2268 }
2269
2270 .subcategory.mb-20 h2 + a {
2271 margin-top: 20px;
2272 text-align: right;
2273 }
2274
2275 .subcategory.mb-20 {
2276 flex-direction: column;
2277 }
2278
2279 .subcategory.mb-20 h2 {
2280 width: 100%;
2281 }
2282
2283 .subcategory.mb-20 h2 a {
2284 width: 100%;
2285 }
2286
2287 html body .m-difc {
2288 flex-wrap: wrap !important;
2289 }
2290
2291 .features-container .img-content img {
2292 width: 100% !important;
2293 height: auto !important;
2294 }
2295
2296 .pr-images {
2297 grid-template-columns: 1fr;
2298 width: 100%;
2299 }
2300
2301 .image-principal {
2302 max-height: 400px;
2303 width: 100%;
2304 }
2305
2306 .image-principal img {
2307 position: relative;
2308 width: 100%;
2309 height: 100%;
2310 }
2311
2312 .image-selector .tns-ovh {
2313 height: auto !important;
2314 }
2315
2316 ul.principal-carousel li {
2317 width: 10px;
2318 height: 10px;
2319 overflow: hidden;
2320 border-radius: 50%;
2321 transition: none;
2322 }
2323
2324 .image-selector {
2325 position: absolute;
2326 z-index: 1;
2327 width: 100%;
2328 bottom: 10%;
2329 }
2330
2331 ul.principal-carousel {
2332 display: flex;
2333 align-items: center;
2334 justify-content: center;
2335 gap: 10px;
2336 }
2337
2338 .principal-carousel.tns-carousel .tns-item {
2339 opacity: 0.5;
2340 filter: brightness(0) invert(1);
2341 }
2342
2343 .principal-carousel.tns-carousel .tns-item.active {
2344 opacity: 1;
2345 }
2346
2347 .img-marca {
2348 padding-top: 20px;
2349 }
2350
2351 body.zoom-image .image-principal {
2352 height: 100dvh;
2353 max-height: 100dvh;
2354 }
2355
2356 }
2357
2358 </style>
2359
2360
2361 <script>
2362 var productItem;
2363 var pushed = false;
2364 let startX;
2365 $("document").ready(function () {
2366 $('a[href*="/es/"]').attr('href', function(i, href) {
2367 return href.replace('/es/', '/');
2368 });
2369 $(".image-selector-mobile .btn-play.c-video .bi.bi-play-circle-fill").click(function () {
2370
2371 let url = $(this).parent().next().data("url");
2372 $("#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>');
2373 $("body").addClass("youtube-mobile-video")
2374
2375 })
2376
2377 $("html").on("click", ".close-video-mobile", function () {
2378
2379 $("#wrapper .active-video-ytb").remove();
2380 $("body").removeClass("youtube-mobile-video")
2381
2382 })
2383
2384 $("#lastUrl").attr("href", '${lastUrl}')
2385 loadAnalyticsItem();
2386 pushAnalytics();
2387 let lastScrollY = 0;
2388 let ticking = false;
2389
2390 function onScroll() {
2391 lastScrollY = window.scrollY;
2392
2393 if (!ticking) {
2394 window.requestAnimationFrame(() => {
2395 checkScrollPosition(lastScrollY);
2396 ticking = false;
2397 });
2398
2399 ticking = true;
2400 }
2401 }
2402
2403 function checkScrollPosition(scrollY) {
2404 const targetPosition = $("#scroll-point-of-no-return").offset().top; // Cambia este valor a la posición deseada
2405
2406 if (scrollY >= targetPosition) {
2407 // Aquí va el código que deseas ejecutar
2408 $("body").addClass("scrolled-product");
2409 } else {
2410 $("body").removeClass("scrolled-product");
2411 }
2412 }
2413
2414 window.addEventListener('scroll', onScroll);
2415
2416
2417 $(".tag-navigation a").click(function () {
2418
2419 let el = $(this);
2420 let id = el.data("rel");
2421
2422 $(".tag-navigation a.active").removeClass("bg-primary bold");
2423 $(".tag-navigation a.active").addClass("bg-g normal");
2424 $(".tag-navigation a.active").removeClass("active");
2425
2426 el.addClass("active bg-primary bold");
2427 el.removeClass("bg-g normal");
2428
2429 $(".tag-content").hide();
2430 $("#" + id).show();
2431
2432 });
2433
2434
2435 $(".image-selector .principal-carousel .c-video").click(function () {
2436 let el = $(this).parent().find("img");
2437 $(".image-principal iframe").remove();
2438 $(this).parent().find("img").trigger("click");
2439 let url = el.data("url");
2440
2441 $(".image-principal img").parent().append('<iframe class="pa z-2 t-0 l-0" width="100%" height="100%" src="' + url + '" frameborder="0" allowfullscreen></iframe>');
2442
2443 });
2444
2445 $(".image-selector .principal-carousel img").click(function () {
2446
2447 let imgUrl = $(this).attr("src");
2448 $(".image-principal iframe").remove();
2449 $(".image-selector .principal-carousel .active").removeClass("active");
2450
2451 $(this).parent().addClass("active");
2452 $(".image-principal img").attr("src", imgUrl);
2453
2454 });
2455
2456 $(".nav-tab").click(function () {
2457
2458 let dataTab = $(this).data("tab");
2459 $(".nav-tab.selected").addClass("normal");
2460 $(".nav-tab.selected").removeClass("selected");
2461
2462 $(".tabs-container .content-tab").hide();
2463 $(this).addClass("selected");
2464 $(this).removeClass("normal");
2465 $("#data-tab-" + dataTab).show();
2466
2467 });
2468
2469
2470 $(".tag-content .accordion .accordion-title").click(function () {
2471
2472 let elem = $(this);
2473 let parentElem = elem.closest(".accordion");
2474 if (parentElem.hasClass("show-ac")) {
2475 parentElem.addClass("hide-ac");
2476 parentElem.removeClass("show-ac");
2477 elem.next().slideUp("fast", function () {
2478 // Animation complete.
2479 });
2480
2481 } else {
2482 parentElem.addClass("show-ac");
2483 parentElem.removeClass("hide-ac");
2484 elem.next().slideDown("fast", function () {
2485 // Animation complete.
2486 });
2487
2488 }
2489
2490 });
2491 try {
2492 // Verificar si el contenedor .principal-carousel existe
2493 if ($('.principal-carousel').length) {
2494 var slider2 = tns({
2495 container: '.principal-carousel',
2496 items: 6,
2497 axis: "vertical",
2498 slideBy: 'page',
2499 autoplay: false,
2500 loop: false,
2501 mouseDrag: true
2502 });
2503 }
2504
2505 if ($('.mobile-carousel').length) {
2506 var slider3 = tns({
2507 container: '.mobile-carousel',
2508 items: 1,
2509 slideBy: 'page',
2510 autoplay: false,
2511 loop: false,
2512 mouseDrag: true
2513 });
2514 }
2515
2516 } catch
2517 (error) {
2518 }
2519
2520 try {
2521 // Verificar si el contenedor .product-carousel existe
2522 if ($('.product-carousel').length) {
2523 var slider = tns({
2524 container: '.product-carousel',
2525 items: 5,
2526 slideBy: 'page',
2527 autoplay: false,
2528 loop: false,
2529 responsive: {
2530 950: {
2531 items: 5
2532 },
2533 769: {
2534 items: 4
2535 },
2536 550: {
2537 items: 3
2538 },
2539 450: {
2540 items: 2
2541 },
2542 0: {
2543 items: 1
2544 }
2545 }
2546 });
2547 }
2548
2549 } catch
2550 (error) {
2551 }
2552
2553 try {
2554 // Verificar si el contenedor .product-implements-carousel existe
2555 if ($('.product-implements-carousel').length) {
2556 var slider = tns({
2557 container: '.product-implements-carousel',
2558 items: 5,
2559 slideBy: 'page',
2560 autoplay: false,
2561 loop: false,
2562 responsive: {
2563 950: {
2564 items: 5
2565 },
2566 769: {
2567 items: 4
2568 },
2569 550: {
2570 items: 3
2571 },
2572 450: {
2573 items: 2
2574 },
2575 0: {
2576 items: 1
2577 }
2578 }
2579 });
2580 }
2581
2582 } catch
2583 (error) {
2584 }
2585 try {
2586 // Verificar si el contenedor .categories-carousel existe
2587 if ($('.categories-carousel').length) {
2588 var slider = tns({
2589 container: '.categories-carousel',
2590 items: 5,
2591 slideBy: 'page',
2592 autoplay: false,
2593 loop: false,
2594 responsive: {
2595 950: {
2596 items: 5
2597 },
2598 769: {
2599 items: 4
2600 },
2601 550: {
2602 items: 3
2603 },
2604 450: {
2605 items: 2
2606 },
2607 0: {
2608 items: 1
2609 }
2610 }
2611 });
2612 }
2613
2614 } catch
2615 (error) {
2616 }
2617 $(".feature-nav > div").click(function () {
2618 let elem = $(this);
2619 let id = elem.attr("id"); // Obtener el ID del elemento clicado
2620 let content = id.replace("data-feature-", ""); // Eliminar "data-feature-" del ID
2621 $(".feature-nav > .selected").removeClass("selected");
2622 elem.addClass("selected");
2623 $(".feature-content .feature").hide();
2624 $(".feature-content #feature-" + content).show();
2625
2626 });
2627
2628
2629 $(".image-principal .zoom-it").click(function () {
2630
2631 $("body").addClass("zoom-image");
2632 let elem = $(".image-principal").data("size");
2633 if (elem < 2) {
2634 $(".image-principal").addClass("no-c");
2635 } else {
2636 let elem = $(".principal-carousel .active");
2637 if (elem.next(".tns-item").length == 0) {
2638 $(".arrow-next").addClass("disabled");
2639 }
2640 if (elem.prev(".tns-item").length == 0) {
2641 $(".arrow-prev").addClass("disabled");
2642 }
2643 }
2644
2645 });
2646
2647 $("i.bi.bi-x").click(function () {
2648
2649 $("body").removeClass("zoom-image");
2650
2651 });
2652
2653
2654 $(".arrow-next").click(function () {
2655
2656 let elem = $(".principal-carousel .active");
2657 let totalElements = parseInt($(".principal-carousel li").length) - 1;
2658
2659 console.log((parseInt(elem.data("id")) + 1));
2660
2661 disableArrows();
2662
2663 if ((parseInt(elem.data("id")) + 1) <= totalElements) {
2664
2665 elem.next().find("img").trigger("click");
2666 console.log("selected next:" + parseInt(elem.data("id") + 1));
2667
2668 if ($("#tns1-item" + parseInt(elem.data("id") + 1)).find("img").data("url") !== undefined) {
2669 let url = $("#tns1-item" + parseInt(elem.data("id") + 1)).find("img").data("url");
2670 $(".image-principal > span:first-child").append('<iframe class="pa t-0 l-0 w-100 h-100 z-2" frameBorder="0" src="' + url + '"></iframe>');
2671 }
2672 }
2673
2674
2675 })
2676
2677 $(".arrow-prev").click(function () {
2678
2679 let elem = $(".principal-carousel .active");
2680 let totalElements = parseInt($(".principal-carousel li").length) - 1;
2681
2682 console.log("total" + totalElements + "-" + (parseInt(elem.data("id")) - 1));
2683
2684 disableArrows();
2685
2686 if ((parseInt(elem.data("id")) - 1) >= 0) {
2687
2688 console.log("selected prev:" + parseInt(elem.data("id") - 1))
2689 elem.prev().find("img").trigger("click");
2690
2691 if ($("#tns1-item" + parseInt(elem.data("id") - 1)).find("img").data("url") !== undefined) {
2692 let url = $("#tns1-item" + parseInt(elem.data("id") - 1)).find("img").data("url");
2693 $(".image-principal > span:first-child").append('<iframe class="pa t-0 l-0 w-100 h-100 z-2" frameBorder="0" src="' + url + '"></iframe>');
2694 }
2695 }
2696
2697
2698 })
2699
2700 function disableArrows() {
2701 setTimeout(function () {
2702
2703 let actualItem = $(".principal-carousel .active").data("id");
2704 let totalItems = parseInt($(".principal-carousel li").length) - 1;
2705
2706
2707 if (actualItem <= 0) {
2708 $(".arrow-prev").addClass("disabled");
2709 } else {
2710 $(".arrow-prev").removeClass("disabled");
2711 }
2712
2713 if (actualItem >= totalItems) {
2714 $(".arrow-next").addClass("disabled");
2715 } else {
2716 $(".arrow-next").removeClass("disabled");
2717 }
2718
2719 }, 150);
2720
2721 }
2722
2723
2724 $('a[title="idioma español"]').attr('href', '/productos/${values.productUrlEs}');
2725 $('a[title="idioma english"]').attr('href', '/en/products/${values.productUrlEn}');
2726
2727 $("#cifdiv").remove();
2728 /*
2729 $(".image-selector").on("touchstart", function(event) {
2730 startX = event.originalEvent.touches[0].clientX;
2731 });
2732
2733 $(".image-selector").on("touchend", function(event) {
2734 let endX = event.originalEvent.changedTouches[0].clientX;
2735 let diffX = startX - endX;
2736
2737
2738 let swipeThreshold = 30;
2739
2740 if (diffX > swipeThreshold) {
2741
2742 $(".arrow-next").trigger("click");
2743 } else if (diffX < -swipeThreshold) {
2744
2745 $(".arrow-prev").trigger("click");
2746 }
2747 });*/
2748
2749
2750 });
2751
2752 function loadAnalyticsItem() {
2753 var productbrand = '${values.brand}';
2754 if (productbrand === "Cat") {
2755 productbrand = "Caterpillar";
2756 }
2757 var variant = 'compra,alquiler'
2758 if ($('.usada').length > 0) {
2759 variant += ",usada";
2760 }
2761 productItem = {
2762 item_id: '${objectEntryId}',
2763 item_name: '${getLanguage(values.names)}',
2764 currency: 'EUR',
2765 coupon: '',
2766 item_brand: productbrand,
2767 item_category: '${principalCategoryName}',
2768 item_category2: '',//TODO
2769 item_category3: '',//TODO
2770 item_category4: '',//TODO
2771 item_category5: '',//TODO
2772 item_list_id: localStorage.getItem("itemListId"),
2773 item_list_name: localStorage.getItem("itemListName"),
2774 item_variant: variant,
2775 location_id: localStorage.getItem("location_id"),
2776 price: 1,
2777 quantity: 1
2778 }
2779 localStorage.setItem("location_id", "");
2780 localStorage.setItem("itemListName", "");
2781 localStorage.setItem("itemListId", "");
2782 }
2783
2784 function pushAnalytics() {
2785 if (!pushed) {
2786 pushed = true
2787 var dataLayerObj = {
2788 event: 'view_item',
2789 ecommerce: {
2790 items: [
2791 productItem
2792 ]
2793 }
2794 }
2795
2796
2797 console.debug(dataLayerObj);
2798 dataLayer.push(dataLayerObj);
2799 }
2800 }
2801
2802 $(".close-popup.close").click(function () {
2803 $("body").removeClass("show-phone-popup");
2804 })
2805
2806 $("#modalPhone").click(function () {
2807 setTimeout(function () {
2808
2809 if (!$("body").hasClass("modal-open")) {
2810 $("body").removeClass("show-phone-popup");
2811 }
2812
2813 }, 150);
2814 })
2815
2816
2817 function callFinanzauto() {
2818 var dataLayerObj = {
2819 event: 'add_to_cart',
2820 ecommerce: {
2821 items: [
2822 productItem
2823 ]
2824 }
2825 }
2826 console.debug(dataLayerObj);
2827 dataLayer.push(dataLayerObj);
2828
2829 if (isMobile()) {
2830 // Si es un dispositivo móvil, redirige para hacer una llamada
2831 window.location.href = 'tel:+34${finanzautoPhone}';
2832 } else {
2833 $('#modalPhone').modal('show');
2834 $('body').addClass('show-phone-popup');
2835 }
2836 }
2837
2838 function isMobile() {
2839 // Verifica si el dispositivo es móvil
2840 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
2841 }
2842
2843 function showModalProductAndPushAnalytics() {
2844
2845 var dataLayerObj = {
2846 event: 'begin_checkout',
2847 ecommerce: {
2848 items: [
2849 productItem
2850 ]
2851 }
2852 }
2853 console.debug(dataLayerObj);
2854 dataLayer.push(dataLayerObj);
2855 showModalProduct();
2856 }
2857
2858 function pushFullAnalytic() {
2859
2860 var dataLayerObj = {
2861 event: "purchase",
2862 ecommerce: {
2863 transaction_id: $("#transactionId").val(),
2864 value: "1",
2865 tax: "0",
2866 shipping: "0",
2867 currency: 'EUR',
2868 coupon: '',
2869 payment_type: 'detalle_producto',
2870 items: [
2871 productItem
2872 ]
2873 }
2874 }
2875 console.debug(dataLayerObj);
2876 dataLayer.push(dataLayerObj);
2877
2878 }
2879 </script>
2880<#else>
2881 <div class="pag-404 df fdc jcc aic">
2882
2883 <img src="/documents/14306333/0/pag-404.jpg/c00959e2-e88d-4b06-1cba-d282b57f006a?t=1737040420259" />
2884
2885
2886 <p class="title-404"><@liferay.language key="product.not.found.title" /></p>
2887 <p class="content-404"><@liferay.language key="product.not.found.text" /></p>
2888
2889 <a class="btn btn-secondary" href="/"><@liferay.language key="product.not.found.button" /></a>
2890
2891
2892
2893</div>
2894
2895<style>
2896.pag-404 {
2897 min-height: 600px;
2898}
2899body #wrapper {
2900 background-color: #fff;
2901}
2902p.title-404 {
2903 font-size: 20px;
2904 font-weight: bold;
2905 margin-top: 20px;
2906 max-width: 500px;
2907 text-align: center;
2908}
2909p.content-404 {
2910 margin-bottom: 20px;
2911 color: #787878; max-width: 600px;
2912 text-align: center;
2913}
2914
2915</style>
2916</#if>