templates/application/calc/index.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">{{ page.name(app.request.locale) }}</li>
  9.                 </ol>
  10.             </div>
  11.         </div>
  12.         <div class="page">
  13.             <div class="container">
  14.                     {% if glueCategories|length %}
  15.                         <div class="page__header">
  16.                             <h1 class="page__title">Калькулятор расхода клея</h1>                        
  17.                         </div>
  18.                         <div class="calculator" id="calcGlue">
  19.                             <div class="calculator__column">
  20.                                 <div class="box box--outline">
  21.                                     <h3>Выберите изделие</h3>
  22.                                     <form class="form calculator__form">
  23.                                         <div class="form__group">
  24.                                             <div class="form__label">Категория</div>
  25.                                             <select id="glueCategories" class="form__control w-md">
  26.                                                 <option></option>
  27.                                                 {% for category in glueCategories %}
  28.                                                     <option value="{{ category.id }}">{{ category.name(app.request.locale) }}</option>
  29.                                                 {% endfor %}
  30.                                             </select>
  31.                                         </div>
  32.                                         <div class="form__group">
  33.                                             <div class="form__label">Товар</div>
  34.                                             <select class="select-by-name form__control w-md">
  35.                                             </select>
  36.                                         </div>
  37.                                         <div class="form__btn">
  38.                                             <button class="btn a-calc">Добавить в расчет</button>
  39.                                         </div>
  40.                                     </form>
  41.                                 </div>
  42.                             </div>
  43.                             <div class="calculator__column">
  44.                                 <div class="box">
  45.                                     <h3>Уточните количество</h3>
  46.                                     <div class="calculator-tbl calculator__list">
  47.                                         {{ include('application/calc/products.html.twig') }}
  48.                                     </div>
  49.                                 </div>
  50.                             </div>
  51.                             <div class="calculator__column">
  52.                                 <div class="box box--outline">
  53.                                     <h3>Вам потребуется</h3>
  54.                                     <div class="glue-product">
  55.                                         {{ include('application/calc/glue-product.html.twig') }}
  56.                                     </div>
  57.                                 </div>
  58.                             </div>
  59.                         </div>
  60.                     {% endif %}
  61.             </div>
  62.         </div>
  63.     </main>
  64. {% endblock %}
  65. {% block scripts %}
  66.     <script>
  67.         let busy = false;
  68.         $('.a-calc').on('click', function() {
  69.             if (busy) {
  70.                 return  false;
  71.             }
  72.             let calcParent = $(this).closest('.calculator');
  73.             let id = calcParent.find('.select-by-name').val();
  74.             if (!id) {
  75.                 alertPopup('Выберите товар');
  76.                 return false;
  77.             }
  78.             busy = true;
  79.             $.ajax({
  80.                 type: "POST",
  81.                 url: '{{ path('calc-add-ajax') }}',
  82.                 data: {
  83.                     id:  id,
  84.                     decor: ''
  85.                 },
  86.                 success: function (data) {
  87.                     let block = $(data.html);
  88.                     calcParent.find('.calculator__list').html(block);
  89.                     prepareProductBlockCount(block);
  90.                     initCartItems();
  91.                     updateGlueInfo(data, calcParent);
  92.                 }
  93.             }).fail(function() {
  94.                 alertPopup('Ошибка');
  95.             }).always(function() {
  96.                 busy = false;
  97.             });
  98.             return false;
  99.         });
  100.         $('.calculator__list, .calculator__list--result')
  101.             .on('click', '.remove__link', function(e) {
  102.                 if (busy) {
  103.                     return  false;
  104.                 }
  105.                 let calcParent = $(this).closest('.calculator');
  106.                 let calcProduct = $(this).closest('.calculator-tbl__item'),
  107.                     id = calcProduct.attr('data-id');
  108.                 busy = true;
  109.                 $.ajax({
  110.                     type: "POST",
  111.                     url: '{{ path('calc-remove-ajax') }}',
  112.                     data: {
  113.                         id:  id,
  114.                         decor: ''
  115.                     },
  116.                     success: function (data) {
  117.                         let block = $(data.html);
  118.                         calcParent.find('.calculator__list').html(block);
  119.                         prepareProductBlockCount(block);
  120.                         initCartItems();
  121.                         updateGlueInfo(data, calcParent);
  122.                     }
  123.                 }).fail(function() {
  124.                     alertPopup('Ошибка');
  125.                 }).always(function() {
  126.                     busy = false;
  127.                 });
  128.                 return false;
  129.             });
  130.         function initCartItems() {
  131.             $('.cart-quantity').change(function () {
  132.                 let calcParent = $(this).closest('.calculator');
  133.                 let calcProduct = $(this).closest('.calculator-tbl__item'),
  134.                     id = calcProduct.attr('data-id');
  135.                 let count = $(this).val();
  136.                 $.ajax({
  137.                     type: "POST",
  138.                     url: '{{ path('calc-put-ajax') }}',
  139.                     data: {
  140.                         id: id,
  141.                         count: count,
  142.                         decor: ''
  143.                     },
  144.                     success: function (data) {
  145.                         updateGlueInfo(data, calcParent);
  146.                     }
  147.                 }).fail(function() {
  148.                     alertPopup('Ошибка');
  149.                 })
  150.             });
  151.         }
  152.         function updateGlueInfo(data, calcParent) {
  153.             calcParent.find('.glue-product').html(data.glueHtml);
  154.             initAddGlueButton();
  155.         }
  156.         function initAddGlueButton() {
  157.             $('#addGlueButton').click(function () {
  158.                 let button = $(this);
  159.                 if (button.hasClass('btn--success')) {
  160.                     location.href = '{{ path('cart') }}';
  161.                     return false;
  162.                 }
  163.                 button.attr('disabled', 'disabled');
  164.                 $.ajax({
  165.                     type: "POST",
  166.                     url: '{{ path('cart-add-ajax') }}',
  167.                     data: {
  168.                         id: button.attr('data-id'),
  169.                         count: $('#glueCount').val()
  170.                     },
  171.                     success: function (data) {
  172.                         $('#cartDiv').html(data.cartHtml);
  173.                         button.addClass('btn--success');
  174.                         button.html('В корзине');
  175.                     }
  176.                 }).fail(function() {
  177.                     alertPopup('Ошибка');
  178.                 }).always(function() {
  179.                     button.removeAttr('disabled');
  180.                 });
  181.                 return false;
  182.             });
  183.         }
  184.         initCartItems();
  185.         initAddGlueButton();
  186.         $('#glueCategories').change(function () {
  187.             let select = $(this);
  188.             $.ajax({
  189.                 type: "GET",
  190.                 url: '{{ path('calc-get-products') }}',
  191.                 data: {
  192.                     id: select.val(),
  193.                 },
  194.                 success: function (data) {
  195.                     let form = select.closest('form');
  196.                     form.find('.select-by-name').html(data.productsByNameHtml);
  197.                 }
  198.             }).fail(function() {
  199.                 alertPopup('Калькулятор для этой категории сейчас не доступен, выберите другую');
  200.             });
  201.         });
  202.     </script>
  203. {% endblock %}