Счетчик товаров в корзине

Тема в разделе "Ошибки и их решения", создана пользователем evgenylebedevv, 11 май 2023.

  1. evgenylebedevv

    evgenylebedevv Новичок

    Сообщения:
    9
    Симпатии:
    0
    Привет!
    Прикручиваю счетчик товаров в корзине, который должен обновляться при клике на эту кнопку:
    PHP:
    <button onclick="addToCart('<?php echo $product['product_id']; ?>');" class="btn btn-shopping-cart btn-outline-inverse">В корзину&nbsp;<i class="fa fa-shopping-cart"></i>
     </button>
    Все работает с таймером, а со слушателем не хочет, в чем может быть причина?:
    PHP:
    // Спан выводит количество товаров
    <span class="hidden-lg hidden-md hidden-sm" id="product-count" style="color:#FFFFFF; background-color: #282c34; border-radius: 50%; padding: 2px 5px; margin-left: -10px;">
    <?php echo $product_count?>
    </span>

    <script>
    function updateProductCount() {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', window.location.href, true);
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
                let productCountElement = document.getElementById('product-count');
                productCountElement.innerHTML = xhr.responseText.match(/id="product-count"[^>]*>([\s\S]*?)<\/span>/)[1];
            }
        }
    }

    // С таймером все работает
    // setInterval(updateProductCount, 5000);

    // С этим кодом не работает
    let updateButtons = document.querySelectorAll('.btn.btn-shopping-cart.btn-outline-inverse');
    for (let i = 0; i < updateButtons.length; i++) {
        updateButtons[i].onclick = function() {
            updateProductCount();
        };
    }

    </script>
    Opencart 1.5.6.4, PHP 5.4.16
    Может быть это из-за старой версии php?
     
    Последнее редактирование: 11 май 2023
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Вы бы пример привели, а то как-то абстрактно и ещё не совсем понятно, что у вас там возвращается в данных
     
  3. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Пример это сайт и действия. Версия php вообще тут ни при чем.
     
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.884
    Симпатии:
    1.065
    А мне не понятно, зачем слушать, когда можно сразу в addToCart добавить
     
  5. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Вообще, ещё раз взглянул в код, там вообще расчёт только на один товар "let productCountElement = document.getElementById('product-count');".
    Без сайта, банально не посмотреть.
     
  6. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Ну и разница скорее всего в задержке по времени, хотя и код кривой (потому что если несколько товаров, то как-то странно). Добавление если происходит через js-скрипт, то некорректно пытаться сразу загрузить туже страницу и вытащить оттуда количество, так как страница в updateProductCount может прийти раньше, чем товар добавится в корзину.
     
  7. evgenylebedevv

    evgenylebedevv Новичок

    Сообщения:
    9
    Симпатии:
    0
    А как можно сделать?
    Есть код счетчика в header.tpl:
    PHP:
    <?php
    $product_count 
    0;
    $products $this->cart->getProducts();
    foreach (
    $products as $product) {
        
    $product_count += $product['quantity'];
    }
    ?>

    <span id="product-count">
    <?php echo $product_count?>
    </span>
    Пробую запихнуть это в common.js в функцию addToCart, которая на кнопке висит:
    PHP:
    $('#product-count').html(json['$product_count']);
    Но естественно ничё не работает)
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.884
    Симпатии:
    1.065
    Если в json нет product_count то не заработает. И зачем переменную php в common.js ? Конечно работать не будет.
    Есть же пример в коде json['total']
     
  9. evgenylebedevv

    evgenylebedevv Новичок

    Сообщения:
    9
    Симпатии:
    0
    json['total'] выводит строку, длинное предложение, а мне нужно одно число.
     
  10. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Так сделайте по аналогии.
     
  11. evgenylebedevv

    evgenylebedevv Новичок

    Сообщения:
    9
    Симпатии:
    0
    Так сделал, писал же выше)
     
  12. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Посмотрите ещё php код ;)
     
  13. evgenylebedevv

    evgenylebedevv Новичок

    Сообщения:
    9
    Симпатии:
    0
    Понятно короче, не знает никто. :)
     
  14. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Эмммм... Вы приводите код, вам советуют чего посмотреть и где нюансы...