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