templates/application/calc/decor.html.twig line 1

Open in your IDE?
  1. {% extends 'application/layout.html.twig' %}
  2. {% block content %}
  3.     <main class="main">
  4.         <div class="breadcrumb">
  5.             <div class="container">
  6.                 <ol class="breadcrumb__list">
  7.                     <li class="breadcrumb__item"><a href="{{ path('home') }}" class="breadcrumb__link">Главная</a></li>
  8.                     <li class="breadcrumb__item active" aria-current="page">{% if page is defined %}{{ page.name(app.request.locale) }}{% else %}Калькулятор лепного декора / плинтусов{% endif %}</li>
  9.                 </ol>
  10.             </div>
  11.         </div>
  12.         <div class="page calc-info-page">
  13.             <div class="container">
  14.                 {% if decorCategories|length %}
  15.                     <div class="page__header">
  16.                         <h1 class="page__title">Калькулятор плинтусов</h1>
  17.                     </div>
  18.                     <div class="calculator-info">
  19.                         <div class="calculator-info__text">
  20.                             <h3 class="calculator-info__title">
  21.                                 Как рассчитать количество плинтуса 
  22.                             </h3>
  23.                             <ul class="calculator-info__list">
  24.                                 <li>1. Замерьте общую длину всех стен комнаты (периметр) (L)</li>
  25.                                 <li>2. Измерьте ширину всех дверных проемов и суммируйте их (B)</li>
  26.                                 <li>3. Введите результаты измерений в форму ниже и получите расчёт!</li>
  27.                                 <li>Внимание! Все данные вводятся в метрах!</li>
  28.                             </ul>
  29.                         </div>
  30.                         <div class="calculator-info__image">
  31.                             <img src="/img/calc-pic.png" alt="Калькулятор плинтусов">
  32.                         </div>
  33.                     </div>
  34.                     <div class="calculator calculator--addition" id="calcDecor">
  35.                         <div class="calculator__column">
  36.                             <div class="box box--outline">
  37.                                 <h3>Выберите изделие</h3>
  38.                                 <form class="form calculator__form">
  39.                                     <div class="form__group">
  40.                                         <div class="form__label">Категория</div>
  41.                                         <select id="decorCategories" class="form__control w-md">
  42.                                             <option></option>
  43.                                             {% for category in decorCategories %}
  44.                                                 <option value="{{ category.id }}">{{ category.name(app.request.locale) }}</option>
  45.                                             {% endfor %}
  46.                                         </select>
  47.                                     </div>
  48.                                     <div class="form__group">
  49.                                         <div class="form__label">Товар</div>
  50.                                         <select class="select-by-name form__control w-md">
  51.                                         </select>
  52.                                     </div>
  53.                                     <div class="form__btn">
  54.                                         <button class="btn a-calc">Добавить в расчет</button>
  55.                                     </div>
  56.                                 </form>
  57.                             </div>
  58.                         </div>
  59.                         <div class="calculator__column calculator__column--params">
  60.                             <div class="box">
  61.                                 <h3>Уточните параметры</h3>
  62.                                 <div class="calculator-tbl calculator__list">
  63.                                     {{ include('application/calc/decor-products.html.twig') }}
  64.                                 </div>
  65.                             </div>
  66.                         </div>
  67.                         <div class="calculator__column">
  68.                             <div class="box box--outline">
  69.                                 <h3>Вам потребуется</h3>
  70.                                 <div class="glue-product">
  71.                                     {{ include('application/calc/decor-glue-product.html.twig') }}
  72.                                 </div>
  73.                             </div>
  74.                         </div>
  75.                     </div>
  76.                 {% endif %}
  77.             </div>
  78.         </div>
  79.     </main>
  80. {% endblock %}
  81. {% block scripts %}
  82.     <script>
  83.         let busy = false;
  84.         $('.a-calc').on('click', function() {
  85.             if (busy) {
  86.                 return false;
  87.             }
  88.             let calcParent = $(this).closest('.calculator');
  89.             let id = calcParent.find('.select-by-name').val();
  90.             if (!id) {
  91.                 alertPopup('Выберите товар');
  92.                 return false;
  93.             }
  94.             busy = true;
  95.             $.ajax({
  96.                 type: "POST",
  97.                 url: '{{ path('calc-add-ajax') }}',
  98.                 data: {
  99.                     id: id,
  100.                     decor: 1
  101.                 },
  102.                 success: function (data) {
  103.                     let block = $(data.html);
  104.                     calcParent.find('.calculator__list').html(block);
  105.                     prepareProductBlockCount(block);
  106.                     initCartItems();
  107.                     updateGlueInfo(data, calcParent);
  108.                 }
  109.             }).fail(function() {
  110.                 alertPopup('Ошибка');
  111.             }).always(function() {
  112.                 busy = false;
  113.             });
  114.             return false;
  115.         });
  116.         $('.calculator__list, .calculator__list--result')
  117.             .on('click', '.remove__link', function(e) {
  118.                 if (busy) {
  119.                     return false;
  120.                 }
  121.                 let calcParent = $(this).closest('.calculator');
  122.                 let calcProduct = $(this).closest('.calculator-tbl__item'),
  123.                     id = calcProduct.attr('data-id');
  124.                 busy = true;
  125.                 $.ajax({
  126.                     type: "POST",
  127.                     url: '{{ path('calc-remove-ajax') }}',
  128.                     data: {
  129.                         id: id,
  130.                         decor: 1
  131.                     },
  132.                     success: function (data) {
  133.                         let block = $(data.html);
  134.                         calcParent.find('.calculator__list').html(block);
  135.                         prepareProductBlockCount(block);
  136.                         initCartItems();
  137.                         updateGlueInfo(data, calcParent);
  138.                     }
  139.                 }).fail(function() {
  140.                     alertPopup('Ошибка');
  141.                 }).always(function() {
  142.                     busy = false;
  143.                 });
  144.                 return false;
  145.             });
  146.         function initCartItems() {
  147.             $('.cart-quantity').change(function () {
  148.                 let calcParent = $(this).closest('.calculator');
  149.                 let calcProduct = $(this).closest('.calculator-tbl__item'),
  150.                     id = calcProduct.attr('data-id');
  151.                 let count = $(this).val();
  152.                 $.ajax({
  153.                     type: "POST",
  154.                     url: '{{ path('calc-put-ajax') }}',
  155.                     data: {
  156.                         id: id,
  157.                         count: count,
  158.                         decor: 1
  159.                     },
  160.                     success: function (data) {
  161.                         updateGlueInfo(data, calcParent);
  162.                     }
  163.                 }).fail(function() {
  164.                     alertPopup('Ошибка');
  165.                 })
  166.             });
  167.             $('#openingWidth,#perimeter').change(function () {
  168.                 $.ajax({
  169.                     type: "POST",
  170.                     url: '{{ path('calc-set-ajax') }}',
  171.                     data: {
  172.                         type: $(this).attr('id'),
  173.                         value: $(this).val()
  174.                     },
  175.                     success: function (data) {
  176.                         updateGlueInfo(data, $('#calcDecor'));
  177.                     }
  178.                 }).fail(function() {
  179.                     alertPopup('Ошибка');
  180.                 })
  181.             });
  182.         }
  183.         function updateGlueInfo(data, calcParent) {
  184.             calcParent.find('.glue-product').html(data.glueHtml);
  185.             initAddDecorButton();
  186.         }
  187.         function initAddDecorButton() {
  188.             $('#addDecorButton').click(function () {
  189.                 let button = $(this);
  190.                 if (button.hasClass('btn--success')) {
  191.                     location.href = '{{ path('cart') }}';
  192.                     return false;
  193.                 }
  194.                 button.attr('disabled', 'disabled');
  195.                 $.ajax({
  196.                     type: "POST",
  197.                     url: '{{ path('calc-add-to-cart-ajax') }}',
  198.                     data: {
  199.                         id: button.attr('data-id'),
  200.                     },
  201.                     success: function (data) {
  202.                         $('#cartDiv').html(data.cartHtml);
  203.                         button.addClass('btn--success');
  204.                         button.html('В корзине');
  205.                     }
  206.                 }).fail(function() {
  207.                     alertPopup('Ошибка');
  208.                 }).always(function() {
  209.                     button.removeAttr('disabled');
  210.                 });
  211.                 return false;
  212.             });
  213.         }
  214.         initCartItems();
  215.         initAddDecorButton();
  216.         $('#decorCategories').change(function () {
  217.             let select = $(this);
  218.             $.ajax({
  219.                 type: "GET",
  220.                 url: '{{ path('calc-get-products') }}',
  221.                 data: {
  222.                     id: select.val(),
  223.                 },
  224.                 success: function (data) {
  225.                     let form = select.closest('form');
  226.                     form.find('.select-by-name').html(data.productsByNameHtml);
  227.                 }
  228.             }).fail(function() {
  229.                 alertPopup('Калькулятор для этой категории сейчас не доступен, выберите другую');
  230.             });
  231.         });
  232.     </script>
  233. {% endblock %}