Encoderast
@Encoderast
frontend пытается что-то делать в backend

Плюс-минус товаров в корзине. Как сделать удаление?

Всем привет!

Визуально вот такая штука)
5b4ec6a0717c2107417133.jpeg

Есть вывод товаров в модальном окне

<?php foreach($session['cart'] as $id => $item):?>
    <tr>
        <td><?= \yii\helpers\Html::img($item['img'], ['alt' => $item['name'], 'height' => 50]) ?></td>
        <td><?= $item['name']?></td>
        <td>
            <span data-id="<?= $id ?>" type="submit" class="del-n"><span class="button__inc">-</span></span>
            <?= $item['qty']?>
            <span data-id="<?= $id ?>" type="submit" class="add-to-cart"><span class="button__inc">+</span></span></td>
        <td><?= $item['price']?></td>
        <td><span data-id="<?= $id?>" class="glyphicon glyphicon-remove text-danger del-item" aria-hidden="true"></span></td>
    </tr>
<?php endforeach?>


.del-n - должен удалять 1 единицу товара, но не удаляет
.add-to-cart - прибавляет 1 ед. товара, сделал, работает

А это js, контроллеры, модели на удаление, не могу понять что тут надо сделать
Проблема в том, что при удалении он удаляет позицию товара полностью, вне зависимости 4 шт указано или 1

JS
$('#cart .modal-body').on('click', '.del-n', function () {
    var id = $(this).data('id'),
        qty = $(this).prev('.js-qty').val();
    $.ajax({
        url: '/cart/del-pr',
        data: {id: id, qty: qty},
        type: 'GET',
        success: function(res){
            if(!res) alert('Ошибка!');
            showCart(res);
        },
        error: function(){
            alert('Error!');
        }
    });
});

Контроллер
public function actionDelPr(){
        $id = Yii::$app->request->get('id');
        $qty = (int)Yii::$app->request->get('qty');

        $session =Yii::$app->session;
        $session->open();
        $cart = new Cart();
        $cart->recalcp($id, $qty);
        $this->layout = false;
        return $this->render('cart-modal', compact('session'));
    }

Модель
public function recalcp($id){
        if(!isset($_SESSION['cart'][$id])) return false;
        $qtyMinus = $_SESSION['cart'][$id]['qty'] === 1;
        $sumMinus = $_SESSION['cart'][$id]['price'];
        $_SESSION['cart.qty'] -= $qtyMinus;
        $_SESSION['cart.sum'] -= $sumMinus;
        unset($_SESSION['cart'][$id]);
    }

  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
<span type="submit"
Это новое слово в web дизайне?

$(this).prev('.js-qty').val();
вы проверяли что там? Там undefined, потому что нет ничего перед ним на том же уровне. А скорее даже ошибка в консоле.

ПС: Работаете с js - консоль всегда открыта, смотрите что улетает ajax-ом. Тогда бы Вы сразу заметили проблему
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы