{% extends "front/_common/_base.html.twig" %}
{% block linkcanonical %}
<link rel="canonical" href="{{ absolute_url(path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params'))) }}">
{% endblock %}
{% block cssadicional %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css" />
{% if info.captchaShow %}
<script type="text/javascript">
var onloadCallback = function() {
grecaptcha.render('html_element', {
'sitekey' : '{{ info.captchaSite }}'
});
};
</script>
{% endif %}
{% endblock %}
{% block classbody %}{% endblock %}
{% block content %}
<!-- banner -->
{% if detail.mainShow %}
<section class="b41 detalleBanner">
{% if home.mainQuoteShow %}
<a href="#form" id="cotizaBtn">
<img src="{{ asset(home.mainQuoteImg|image_path|default('/static/img/cotiza.png') ) }}" alt="{{ home.mainQuoteImg|image_alt }}" />
{% if home.mainQuoteText %}
<small>{{ home.mainQuoteText }}</small>
{% endif %}
</a>
{% endif %}
<picture>
<source media="(max-width:480px)" srcset="{{ asset(detail.mainImgBg1|image_path|default(detail.mainImg|image_path)) }}" />
<source media="(max-width:768px)" srcset="{{ asset(detail.mainImgBg2|image_path|default(detail.mainImg|image_path)) }}" />
<img src="{{ asset(detail.mainImg|image_path) }}" />
</picture>
<article class="b41__info wancho">
<div class="general_breadcrumbs">
<ul>
<li><a href="{{ path('home') }}">INICIO</a></li>
<li><a href="{{ path('trucks_cat', {'slug': detail.category.slug}) }}">{{ detail.category.title }}</a></li>
<li><a href="" aria-selected="true">{{ detail.title}}</a></li>
</ul>
</div>
<div>
<h2>{{ detail.mainPrefix }}</h2>
<h1>{{ detail.mainTitle }}</h1>
{% if detail.quoteShow %}
<a href="#form" class="general_button brown">{{ detail.mainBtnText|default('Quiero cotizar')}}</a>
{% endif %}
</div>
</article>
</section>
{% endif %}
<!-- atributos -->
{% if detail.attrShow or detail.rsFb or detail.rsTw or detail.rsWts %}
<section class="b42 atributos">
{% if detail.attrShow %}
<article class="wancho">
{% if detail.attrTitle %}
<small>{{ detail.attrTitle }}</small>
{% endif %}
<div class="flex jcc">
{% for item in detail.attrItemsActive %}
<div
class="faw__tab {{ loop.first ? 'active' : '' }}"
data-info="{{ item.text }}"
data-id="{{ loop.index }}"
>
{{ item.title }}
</div>
{% endfor %}
</div>
<div class="b42__itemContainer flex jcsb aic">
<div class="b42__swiper__info">
<h3></h3>
<div class="gParrafo"></div>
</div>
<div class="b42__swiper__container">
{% for item in detail.attrItemsRelationActive %}
<div class="swiper b42__swiper {{ loop.first ? 'active' : ''}}" data-id="{{loop.index}}">
<ul class="swiper-wrapper">
{% for i in item.images %}
<li
class="swiper-slide"
style="background-image: url('{{ asset(i.img|image_path) }}');" alt="{{ i.img|image_alt }}"
></li>
{% endfor %}
</ul>
<div class="nav-buttons">
<div class="button-prev"></div>
<div class="button-next"></div>
</div>
</div>
{% endfor %}
</div>
</div>
</article>
{% endif %}
{% if detail.rsFb or detail.rsTw or detail.rsWts %}
<div class="share_wrapper">
<ul>
{% if detail.rsFb %}
<li><a href="" class="icon-facebook facebook-share-fixed"></a></li>
{% endif %}
{% if detail.rsTw %}
<li><a href="" class="icon-twitter twitter-share-fixed"></a></li>
{% endif %}
{% if detail.rsWts %}
<li>
<a
href="https://api.whatsapp.com/send?text=FAW - Camión modelo {{detail.title}} {{ absolute_url(path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params'))) }}"
class="icon-whatsapp"
target="_blank"
data-action="share/whatsapp/share"
></a>
</li>
{% endif %}
</ul>
</div>
{% endif %}
</section>
{% endif %}
<!-- descripcion -->
{% if detail.descripShow %}
<section class="b43 descripcion">
<article class="wancho flex jcsb aic">
<div class="b43__desc">
{% if detail.descripTitle1 %}
<h3>{{ detail.descripTitle1}}</h3>
{% endif %}
<div class="gParrafo">
{{ detail.descripText|raw }}
</div>
</div>
{% if detail.descripItemsActive %}
<div class="b43__galeria">
<img src="{{ asset(detail.descripItemsActive[0]['img']|image_path) }}" alt="{{ detail.descripItemsActive[0]['img']|image_alt }}" class="b43__galeria-main" />
<ul class="flex">
{% for item in detail.descripItemsActive %}
<li class="{{ loop.first ? 'active' : '' }}">
<img src="{{ asset(item.img|image_path) }}" width="128" height="82" alt="{{ item.img|image_alt }}" />
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if detail.descripCharItemsActive %}
<div class="b43__desc b43__desc--info">
<h3>{{ detail.descripTitle2 }}</h3>
<ul>
{% for item in detail.descripCharItemsActive %}
<li>
<span>{{ item.title }}</span>
<p>{{ item.text }}</p>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</article>
</section>
{% endif %}
<!-- especificaciones -->
{% if detail.tecShow and detail.tecItemsActive %}
<section class="b44 especificaciones">
<article class="wancho">
<div class="flex jcsb">
{% if detail.tecTitle %}
<h4>{{ detail.tecTitle }}</h4>
{% endif %}
{% if detail.tecBrochure|image_path %}
<a href="{{ asset(detail.tecBrochure|image_path) }}" class="download-button" download>{{ detail.tecBrochureText|default('Descargar ficha técnica') }}</a>
{% endif %}
</div>
<div class="flex jcsb especs__ctn">
<ul class="especs_list">
{% for item in detail.tecItemsActive %}
<li data-id="{{ loop.index }}" class="{{ loop.first ? 'active' : '' }}">
<span>{{ item.title }}</span>
</li>
{% endfor %}
</ul>
<div class="especs__table-list">
{% for item in detail.tecItemsActive %}
<div data-id="{{ loop.index }}" class="{{ loop.first ? 'active' : '' }}">
{{ item.text|raw }}
</div>
{% endfor %}
</div>
</div>
</article>
</section>
{% endif %}
<!-- galeria -->
{% if detail.galleryShow and detail.galleryItemsActive %}
<section class="b45 galeria-detalle">
{% if detail.galleryTitle %}
<div class="wancho">
<h4>{{ detail.galleryTitle }}</h4>
</div>
{% endif %}
<!-- Slider main container -->
<div class="swiper b45__swiper">
<!-- Additional required wrapper -->
<ul class="swiper-wrapper">
<!-- Slides -->
{% for item in detail.galleryItemsActive %}
<li class="swiper-slide"><img src="{{ asset(item.img|image_path) }}" alt="{{ item.img|image_alt }}" /></li>
{% endfor %}
</ul>
<!-- If we need navigation buttons -->
<div class="nav-buttons">
<div class="button-prev"></div>
<div class="button-next"></div>
</div>
</div>
</section>
{% endif %}
<!-- cotiza -->
{% if detail.quoteShow %}
<section class="b46 cotizar-detalle" id="form">
<article class="wancho flex">
<div class="b46__cotizar">
{% if detail.quotePrefix %}
<small>{{ detail.quotePrefix }}</small>
{% endif %}
{% if detail.quoteTitle %}
<h4>{{ detail.quoteTitle|block_tag('span')|raw}}</h4>
{% endif %}
<div class="general_form">
{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }}
{{ form_widget(form.utmSource, {'attr': {'class': 'form_utmsource'}}) }}
{{ form_widget(form.utmMedium, {'attr': {'class': 'form_utmmedium'}}) }}
{{ form_widget(form.utmCampaign, {'attr': {'class': 'form_utmcampaign'}}) }}
{{ form_widget(form.utmContent, {'attr': {'class': 'form_utmcontent'}}) }}
{{ form_widget(form.utmTerm, {'attr': {'class': 'form_utmterm'}}) }}
{{ form_widget(form.gclid, {'attr': {'class': 'gclid'}}) }}
{{ form_widget(form.isPerson) }}
<fieldset class="radioGroup">
<div>
<input type="radio" name="tipo" id="empresa" checked />
<label for="empresa">Soy empresa</label>
</div>
<div>
<input type="radio" name="tipo" id="natural" />
<label for="natural">Soy persona natural</label>
</div>
</fieldset>
<fieldset class="formGroup" id="personaGroup" style="display:none;">
<div class="fInput fSelect">
{{ form_widget(form.docType, {'attr': {'class':'validate[required]', 'data-validation-placeholder' : 'Tipo doc*'}}) }}
</div>
<div class="fInput">
<label for="empresa">Número doc.</label>
{{ form_widget(form.docNum, {'attr': {'class':'validate[required, maxSize[15]]', 'data-validation-placeholder' : 'Tipo doc*', 'data-maxChar':'15', 'data-expression':'number'}}) }}
</div>
<!--
<div class="fInput fSelect">
<select
class="validate[required]"
data-validation-placeholder="Tipo de vehículo*"
name="vehiculo"
id="vehiculo"
>
<option selected="selected">Tipo de vehículo*</option>
<option value="ica">ica</option>
</select>
</div>
<div class="fInput fSelect">
<select
class="validate[required]"
data-validation-placeholder="Modelo"
name="modelo"
id="modelo"
>
<option selected="selected">Modelo</option>
<option value="ica">ica</option>
</select>
</div>
-->
</fieldset>
<fieldset class="formGroup" id="empresaGroup">
<div class="fInput">
<label for="ruc">RUC*</label>
{{ form_widget(form.ruc, {'attr': {'class':'validate[required, maxSize[15]] validKeypress', 'data-maxChar':'15', 'data-expression':'number'}}) }}
</div>
<div class="fInput">
<label for="empresa">Empresa*</label>
{{ form_widget(form.factory, {'attr': {'class':'validate[required, maxSize[255]] validKeypress', 'data-maxChar':'15', 'data-expression':'text'}}) }}
</div>
</fieldset>
<fieldset class="formGroup">
<div class="fInput">
<label for="nombre">Nombres*</label>
{{ form_widget(form.name, {'attr': {'class':'validate[required, maxSize[50]] validKeypress', 'data-maxChar':'50', 'data-expression':'text'}}) }}
</div>
<div class="fInput">
<label for="apellidos">Apellidos*</label>
{{ form_widget(form.lastname, {'attr': {'class':'validate[required, maxSize[50]] validKeypress', 'data-maxChar':'50', 'data-expression':'text'}}) }}
</div>
</fieldset>
<fieldset class="formGroup">
<div class="fInput">
<label for="telefono">Teléfono*</label>
{{ form_widget(form.phone, {'attr': {'class':'validate[required, maxSize[15]] validKeypress', 'type': 'tel', 'data-maxChar':'15', 'data-expression':'number'}}) }}
</div>
<div class="fInput">
<label for="correo">Correo Electrónico*</label>
{{ form_widget(form.email, {'attr': {'class':'validate[required, maxSize[100]] validKeypress', 'type': 'email', 'data-maxChar':'100', 'data-expression':'email'}}) }}
</div>
</fieldset>
<div class="fInput fSelect">
{{ form_widget(form.departament, {'attr': {'class':'validate[required]', 'data-validation-placeholder' : 'Departamento*'}}) }}
</div>
<div class="fInput fSelect">
{{ form_widget(form.origin, {'attr': {'class':'validate[required]' }}) }}
</div>
<div class="fInput">
<label for="comentario">¿Tienes algún comentario?</label>
{{ form_widget(form.comment, {'attr': {'class':'validate[maxSize[255]]', 'data-maxChar' : '255'}}) }}
</div>
<div class="fCheckBox">
<span>*Campos obligatorios</span>
<div class="formCheckbox">
<input type="checkbox" id="1" name="check_terminos" class="validate[required]" />
<label for="1"
>He leído y acepto las <a href="{{ path('privacy') }}" target="_blank">Políticas de privacidad</a></label
>
</div>
</div>
{% if info.captchaShow %}
<div style="margin-bottom:10px; position: relative; width: max-content;">
<div id="html_element"></div>
</div>
{% endif %}
<div class="formButtonCtn">
<button class="f-guardar-contacto-general hidden_button_send" id="sendFormMachine">Enviar</button>
<button class="show_button_send">Enviando... <span class="icon-flecha-derecha"></span></button>
</div>
{{ form_end(form) }}
</div>
</div>
</article>
{% if detail.quoteItemsActive %}
<div class="b46__galeria">
<img src="{{ asset(detail.quoteItemsActive[0]['img']|image_path) }}" alt="{{ detail.quoteItemsActive[0]['img']|image_alt }}" class="b46__galeria__main" />
<!-- Slider main container -->
<div class="swiper b46__swiper">
<!-- Additional required wrapper -->
<ul class="swiper-wrapper">
<!-- Slides -->
{% for item in detail.quoteItemsActive %}
<li class="swiper-slide">
<img src="{{ asset(item.img|image_path) }}" alt="{{item.img|image_path}}" />
</li>
{% endfor %}
</ul>
<div class="nav-buttons">
<div class="button-prev"></div>
<div class="button-next"></div>
</div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
</div>
{% endif %}
</section>
{% endif %}
<!-- sostenibilidad -->
{% if detail.promiseShow %}
<section class="b47 sostenibilidad">
<img src="{{ asset(detail.promiseImg|image_path) }}" alt="{{ detail.promiseImg|image_alt }}" class="b47__main-img" />
<article class="wancho">
<div class="b47__info">
{% if detail.promiseLogo|image_path %}
<img src="{{ asset(detail.promiseLogo|image_path) }}" alt="{{ detail.promiseLogo|image_alt }}" />
{% endif %}
{% if detail.promisePrefix %}
<small>{{ detail.promisePrefix }}</small>
{% endif %}
{% if detail.promiseTitle %}
<h5>{{ detail.promiseTitle }}</h5>
{% endif %}
<div class="gParrafo">
{{ detail.promiseText|raw }}
</div>
</div>
</article>
</section>
{% endif %}
<!-- otros -->
{% if detail.machinesShow and detail.machinesItemsActive|length > 0 %}
<section class="otros">
{% if detail.machinesTitle %}
<div class="wancho">
<h5>{{ detail.machinesTitle }}</h5>
</div>
{% endif %}
<div class="swiper">
<ul class="camiones_list swiper-wrapper">
{% for item in detail.machinesItemsActive|slice(0, 3) %}
<li class="camion_card swiper-slide">
<img src="{{ asset(item.imgList|image_path) }}" alt="marcacamion" />
<small>{{ item.category.title|upper }}</small>
<p>{{ item.title }}</p>
<div class="flex">
<a href="{{ path('truck', {'slug' : item.slug}) }}" class="general_button white">Ver modelo</a>
<a href="{{ path('truck', {'slug' : item.slug}) }}#form" class="general_button">Quiero Cotizar</a>
</div>
</li>
{% endfor %}
</ul>
<div class="nav-buttons">
<div class="button-prev"></div>
<div class="button-next"></div>
</div>
</div>
</section>
{% endif %}
{% endblock %}
{% block jsfinal %}
<script src="{{ STATIC_URL }}js/validationform/jquery.validationEngine.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
{% include 'front/templates/captcha.html.twig' %}
<script type="text/javascript">
//atributos
const tabCount = document.querySelectorAll('.faw__tab');
const swiperCount = document.querySelectorAll('.b42__swiper');
if(document.getElementsByClassName('faw__tab').length > 0) {
setInfo(document.getElementsByClassName('faw__tab')[0]);
}
tabCount.forEach(tab => {
tab.addEventListener('click', () => {
setInfo(tab);
tabCount.forEach(item => {
item.classList.remove('active');
});
tab.classList.add('active');
const getItemId = tab.dataset.id;
swiperCount.forEach(item => {
item.classList.remove('active');
});
const getSwiper = document.querySelector(`.b42__swiper[data-id="${getItemId}"]`);
getSwiper.classList.add('active');
});
});
function setInfo(element) {
const getTitle = element.innerHTML;
const getText = element.dataset.info;
document.querySelector('.b42__swiper__info').querySelector('h3').innerHTML = getTitle;
document.querySelector('.b42__swiper__info').querySelector('.gParrafo').innerHTML = getText;
}
swiperCount.forEach(swiperEl => {
const atributo_swiper = new Swiper(swiperEl, {
loop: true,
slidesPerView: 1,
spaceBetween: 0,
simulateTouch: true,
navigation: {
nextEl: `.b42 .button-next`,
prevEl: `.b42 .button-prev`,
},
});
});
//atributos
//descripciones
const getGallery = document.querySelector('.b43__galeria ul');
getGallery.addEventListener('click', event => {
const getItem = event.target;
document.querySelectorAll('.b43__galeria li').forEach(item => {
item.classList.remove('active');
});
getItem.parentNode.classList.add('active');
document.querySelector('.b43__galeria-main').src = getItem.src;
});
//descripciones
//especificaciones
const getList = document.querySelector('.especs_list');
const listItems = document.querySelectorAll('.especs_list li');
const listTable = document.querySelectorAll('.especs__table-list div');
getList.addEventListener('click', event => {
listItems.forEach(item => {
item.classList.remove('active');
});
event.target.classList.add('active');
const getItemId = event.target.dataset.id;
listTable.forEach(item => {
item.classList.remove('active');
});
const getTable = document.querySelector(`.especs__table-list div[data-id="${getItemId}"]`);
getTable.classList.add('active');
});
//especificaciones
//galeria
const galeria_swiper = new Swiper('.b45__swiper', {
loop: true,
slidesPerView: 1,
spaceBetween: 42,
slidesPerView: 'auto',
simulateTouch: true,
centeredSlides: true,
// Navigation arrows
navigation: {
nextEl: '.b45 .button-next',
prevEl: '.b45 .button-prev',
},
});
//galeria
// cotizar
// NOV 20222, Comprobando que existe el carrusel
if (document.querySelector('.b46__galeria')) {
const cotizar_swiper = new Swiper('.b46__swiper', {
loop: false,
slidesPerView: 'auto',
spaceBetween: 16,
scrollbar: {
el: '.swiper-scrollbar',
},
navigation: {
nextEl: '.b46 .button-next',
prevEl: '.b46 .button-prev',
},
breakpoints: {
581: {
spaceBetween: 16,
slidesPerView: 'auto',
},
0: {
spaceBetween: 4,
slidesPerView: 3,
},
},
});
cotizar_swiper.on('click', function (e) {
const clickedSlideImg = e.clickedSlide.querySelector('img').src;
document.querySelector('.b46__galeria__main').src = clickedSlideImg;
});
}
// cambia y quita los campos base a tipo de usuario a llenar formulario
const empresa = document.querySelector('#empresa');
const natural = document.querySelector('#natural');
const empresaGroup = document.getElementById('empresaGroup');
const personaGroup = document.getElementById('personaGroup');
empresa.addEventListener('change', adjustableHeightCheck);
natural.addEventListener('change', adjustableHeightCheck);
$('#form_machine_docType').removeClass('validate[required]');
$('#form_machine_docNum').removeClass('validate[required, maxSize[15]]');
function adjustableHeightCheck() {
if (!!document.getElementById('empresa').checked) {
$('#empresaGroup').css({'display' : 'flex'});
$('#personaGroup').css({'display' : 'none'});
$('#form_machine_ruc').addClass('validate[required, maxSize[15]]');
$('#form_machine_factory').addClass('validate[required, maxSize[125]]');
$('#form_machine_docType').removeClass('validate[required]');
$('#form_machine_docNum').removeClass('validate[required, maxSize[15]]');
$('#form_machine_isPerson').prop("checked", false);
} else {
$('#empresaGroup').css({'display' : 'none'});
$('#personaGroup').css({'display' : 'flex'});
$('#form_machine_ruc').removeClass('validate[required, maxSize[15]]');
$('#form_machine_factory').removeClass('validate[required, maxSize[125]]');
$('#form_machine_docType').addClass('validate[required]');
$('#form_machine_docNum').addClass('validate[required, maxSize[15]]');
$('#form_machine_isPerson').prop("checked", true);
}
}
// cambia y quita los campos base a tipo de usuario a llenar formulario
WidthChange(1024, () => {
const camion_swiper = new Swiper('.otros .swiper', {
loop: false,
slidesPerView: '2',
spaceBetween: 0,
navigation: {
nextEl: '.otros .button-next',
prevEl: '.otros .button-prev',
},
});
});
WidthChange(580, () => {
if (document.querySelector('.b46__galeria')) {
document
.querySelector('.b46 .b46__galeria')
.insertBefore(
document.querySelector('.b45 h4'),
document.querySelector('.b46 .b46__galeria').firstChild
);
}
const tableList = document.querySelectorAll('.especs_list li');
tableList.forEach((item, index) => {
item.appendChild(document.querySelector(`.especs__table-list div[data-id="${index + 1}"]`));
});
// tuve que usar jquery aqui, perdon dios
$('.especs_list li').click(function (e) {
$(this).children('div').slideToggle(100);
});
$('.especs_list li')[0].click();
});
// cotizar
$(() => {
$('form').validationEngine('attach', {
promptPosition: 'bottomLeft',
autoHidePrompt: true,
autoPositionUpdate: false,
autoHideDelay: 3000,
addFailureCssClassToField: 'inputError',
binded: false,
scroll: false,
validateNonVisibleFields: true,
showOneMessage: false,
});
});
$('#sendFormMachine').on('click', function(event) {
event.preventDefault();
let btn = $(this);
let form = btn.closest('form');
btn.prop('disabled', true);
var valid = form.validationEngine('validate');
if (valid && validarRecaptcha()){
document.querySelector('.general_form').classList.add('submit_form')
form.submit();
} else {
btn.prop('disabled', false);
return false;
}
});
</script>
{% endblock %}