-1

Способ добавления товара в корзину очень простой: при клике на кнопке "добавить в корзину", я передаю значения в js, далее все это уходит в функцию и функция делает запись в сессию, там и хранится заказанный товар.

Проблема такая: выбрал товар, далее размер, кликаю "добавить в корзину", товар ушел в корзину, кликаю еще раз и выдает в консоли ошибку, второй раз этот же товар и размер не хочет добавлять, хотя должно добавлять.

Ошибка такая в консоли:

введите сюда описание изображения

Не знаю нужна ли схема отправки, js, php

php, функцию запихал в html, она простая.

jQuery(document).ready(function() {

function sklonenie(a, b, c, s) { var variants = [a, b, c]; var index = s % 100; if (index >= 11 && index <= 14) { index = 0; } else { index = (index %= 10) < 5 ? (index > 2 ? 2 : index) : 0; } return (variants[index]); }

//добавить товар в корзину jQuery(document).on("click", '.faddtov', function() { //клик по кнопке добавит товар var $this = this; price = $($this).parents('.ftovrp').find('.getPrice').data('price'); qty = $($this).parents('.ftovr').find('.fkolvo').val(); item_id = $($this).parents('.ftovr').find('#tovrazmer').val(); //передаем id размера razmer = $($this).parents('.ftovr').find('#tovrazmer').find('option:selected').text(); //получаем название пункта, имя X или XL vestovara = parseFloat($('#vestovara').val()); //передаем вес товара для расчета доставки СДЭК product_id = jQuery($this).data('id');

if (qty &gt; 0) {
    var data = {};
    data.price = price;
    data.qty = qty;
    data.product_id = product_id;
    data.vestovara = vestovara; //передаем вес товара
    data.item_id = item_id; //передаем id размера селекта
    data.razmer = razmer; //передаем имя размера в селекте

    if ($('.js-select2').val() !== '0') { //проверка, если размер не выбран, вылезает ошибка
        jQuery.ajax({
            url: 'https://' + location.host + '/ax/cart/addtov',
            type: 'POST',
            dataType: 'json',
            data: {
                data: data
            },
            success: function(data) {
                if (data.qty &gt; 0) {
                    $("#basket").removeClass("empty");
                }

                totNum = number_format(data.total, 0, '.', ' ');

                var drob = String(Math.round((data.total - Math.floor(data.total)) * 100));
                if (drob.length &lt; 2) {
                    drob = '0' + drob;
                }

                jQuery('.basket').html('&lt;i class="icon-corz"&gt;&lt;/i&gt;&lt;span&gt;' + data.qty + '&lt;/span&gt;');

                window.location.hash = '#win3';
           }
       });
   } else {
       //$('.ax-result').addClass('validerror').html('Выберите размер'); //выводим ошибку по id в диве
       window.location.hash = '#win5';
       $('.select2-container--default').addClass('celectred');
   }
   return false;

} return false; }); });

public function action_addtov()
{
    $total = array('total' => 0, 'totals' => 0, 'qty' => 0);
    $tovary = $this->session->get('tovary');

    if (isset($_POST['data']) and $_POST['data']['product_id'] != '') {
        $data = $_POST['data'];

        if (isset($tovary[$data['product_id']. '_' .$data['item_id']])) {
            $tovary[$data['product_id']]. '_' .$data['item_id']['product_id'] = $data['product_id'];
            $tovary[$data['product_id']]. '_' .$data['item_id']['price'] = $data['price'];
            $tovary[$data['product_id']]. '_' .$data['item_id']['item_id'] = $data['item_id'];
            $tovary[$data['product_id']]. '_' .$data['item_id']['qty'] = $tovary[$data['product_id']. '_' .$data['item_id']]['qty'] + $data['qty'];
        } else {
            $tovary[$data['product_id']. '_' .$data['item_id']] = $data;
        }
    }

    $this->session->set('tovary', $tovary);

    if (isset($tovary) and is_array($tovary) and !empty($tovary)) {

        foreach ($tovary as $tovar) {
            $total['totals'] += $tovar['qty'] * $tovar['price'];
            $total['qty'] += 1;
        }
    }

    $total['total'] = $total['totals'];

    echo json_encode($total);
    die;
}
ws17
  • 167

1 Answers1

0

Тысячу раз смотрел на код и не замечал ошибки.

Вот тут у меня стоит не там скобка, ну там во всех этих полях: $tovary[$data['product_id']]. '_' .$data['item_id']['product_id'] = $data['product_id'];

Надо было так: $tovary[$data['product_id']. '_' .$data['item_id']]['product_id'] = $data['product_id'];

ws17
  • 167