> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Количество/счетчик на значке корзины не обновляется

> В этой статье описано, как исправить количество на значке корзины, если оно не обновляется в Upcart.

<div id="overview">
  # Обзор
</div>

Некоторые темы не обновляют значок автоматически, и это руководство покажет вам, как исправить это с помощью небольшого фрагмента пользовательского кода. Выполните шаги ниже, чтобы все синхронизировалось корректно.

**Вот пример того, как выглядит это несоответствие:**

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-drawer-vs-theme-icon.gif?s=2b4c08af3555b89b66d7926793bc3833" alt="Drawer Upcart показывает Cart 2, в то время как пузырек значка корзины темы все еще отображает 1" width="2560" height="1080" data-path="images/upcart/cart-counter-drawer-vs-theme-icon.gif" />

***

<div id="important-steps-before-you-start">
  # Важные шаги перед началом!
</div>

Чтобы исправить проблему со значком корзины, вам нужно определить имя класса вашего значка корзины. Каждая тема отличается, и этот шаг гарантирует, что код будет работать именно для вашего магазина.

<div id="1-use-chrome-developer-tools">
  ### **1. Используйте Chrome Developer Tools**
</div>

Каждая тема отличается, поэтому вам понадобятся Chrome Developer Tools (Inspect), чтобы определить имя класса вашего значка корзины.

* Щелкните правой кнопкой мыши по значку корзины на витрине и выберите **Inspect** в Google Chrome.
* Найдите HTML-элемент вашего значка корзины (например, **`<span class="cart-count-bubble">`**).
* **Нужна помощь с Chrome Developer Tools?** Ознакомьтесь с [этим руководством](https://developer.chrome.com/docs/devtools/overview/) с пошаговыми инструкциями.

<div id="2-reach-out-for-help-optional">
  ### **2. Обратитесь за помощью (необязательно)**
</div>

Если вы не можете найти класс своего значка корзины или зашли в тупик, не переживайте! У вас есть варианты:

* **Свяжитесь с разработчиком вашей темы:** они лучше всех знают вашу тему и могут помочь найти правильный класс.
* **Наймите эксперта Shopify:** если вам нужна дополнительная поддержка, у Shopify есть каталог проверенных экспертов, которые могут помочь. [Найдите эксперта Shopify здесь](https://experts.shopify.com/).

<div id="custom-code-disclaimer">
  ## 🚧 **Отказ от ответственности за пользовательский код**
</div>

Приведенный ниже пример кода — это лишь шаблон, **он не будет работать, если вы скопируете и вставите его напрямую**. Вы должны заменить имя класса-заполнителя (например, **`.cart-count-bubble > span`**) на конкретное имя класса вашего значка корзины.

***

<div id="step-by-step-fix">
  # Пошаговое исправление
</div>

Мы разбили этот процесс на три уровня исправлений, начиная с самого простого решения (уровень 1). Каждый уровень строится на предыдущем; сначала попробуйте уровень 1, а затем переходите к уровню 2 или 3 только при необходимости.

<div id="step-1-add-custom-code-in-upcart">
  ## **Шаг 1: добавьте пользовательский код в Upcart**
</div>

Сначала, поскольку нам понадобится добавить пользовательский HTML-код в редакторе Upcart, подготовим этот раздел:

1. Перейдите в **Upcart Editor > Settings**, затем откройте вкладку **Custom HTML** (находится в **More settings**, если не помещается в ряд вкладок).
2. Установите расположение **Scripts (Before Load)**.
3. Вставьте сюда ваш отредактированный код (мы приведем примеры для каждого уровня ниже).

Вот как это выглядит:

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-custom-html-settings-location.gif?s=d70ce32a4328c99bf2d0b9d18efcd853" alt="Настройки Custom HTML в Upcart с расположением HTML, установленным на Scripts Before Load" width="1588" height="1080" data-path="images/upcart/cart-counter-custom-html-settings-location.gif" />

***

<div id="step-2-apply-the-fix-by-level">
  # **Шаг 2: примените исправление по уровню**
</div>

<div id="level-1-basic">
  ## Уровень 1 (базовый)
</div>

Когда корзина загружается, этот скрипт суммирует количества по позициям корзины и записывает результат в элемент счетчика внутри пузырька корзины вашей темы. Он подходит для тем, где счетчик находится в простом вложенном элементе (например, `.cart-count-bubble > span`).

**Не забудьте**

* Заменить **`.cart-count-bubble > span`** на класс вашего значка корзины.
* Протестировать на витрине после добавления кода.

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-1-count-bubble-script.gif?s=ef698547d55d921009278b3a006e4a9d" alt="Вставка скрипта счетчика уровня 1 в Custom HTML Upcart с использованием селектора cart-count-bubble" width="1996" height="1080" data-path="images/upcart/cart-counter-level-1-count-bubble-script.gif" />

<div id="example-code-for-level-1">
  ## Пример кода для уровня 1
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
window.upcartSubscribeCartLoaded((event) => {  
    const countEl = document.querySelector('.cart-count-bubble > span');  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    countEl.innerText = itemCount;  
});  
</script>
```

<Note>
  **Примечание об устаревшем API:** колбэки `window.upcartOnCartLoaded` по-прежнему работают, но объявлены устаревшими и выводят предупреждения в консоль. Используйте `upcartSubscribeCartLoaded` для всех новых скриптов. Обратите внимание, что у `event.cart` нет свойства `item_count`; используйте `event.cart.items.reduce((total, item) => total + item.quantity, 0)` для расчета общего количества товаров.
</Note>

***

<div id="level-2-moderate">
  ## Уровень 2 (средний)
</div>

Если уровень 1 не сработал, ваша тема, возможно, заменяет весь HTML значка корзины при изменении счетчика. Эта версия перестраивает разметку значка для состояний пустой и непустой корзины, чтобы счетчик и значок оставались синхронизированными.

**Не забудьте**

* Заменить **`#cart-icon-bubble-custom`** на селектор обертки значка корзины вашей темы.
* Протестировать после сохранения.

<Frame>
  <img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-2-icon-bubble-script.gif?s=7d36ca92c77564a670a1940818b7d86b" alt="Вставка скрипта значка корзины уровня 2 в Custom HTML Upcart с использованием селектора cart-icon-bubble-custom" width="1876" height="1080" data-path="images/upcart/cart-counter-level-2-icon-bubble-script.gif" />
</Frame>

<div id="example-code-for-level-2">
  ### Пример кода для уровня 2
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
;(() => {  
function updateCartCount(itemCount) {  
    const iconWrapperEl = document.querySelector('#cart-icon-bubble-custom');  
    if (itemCount === 0) {  
        iconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span><span class="visually-hidden">Cart</span>`;  
    } else {  
        iconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span><span class="visually-hidden">Cart</span><div class="cart-count-bubble"><span aria-hidden="true">${itemCount}</span><span class="visually-hidden">${itemCount} item</span></div>`;  
    }  
}  
  
window.upcartSubscribeCartLoaded((event) => {  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    updateCartCount(itemCount);  
});  
})();  
</script>
```

<Note>
  **Примечание об устаревшем API:** колбэки `window.upcartOnCartLoaded` по-прежнему работают, но объявлены устаревшими и выводят предупреждения в консоль. Используйте `upcartSubscribeCartLoaded` для всех новых скриптов.

  Обратите внимание, что у `event.cart` **нет** свойства `item_count` — приведенные выше скрипты вычисляют итог с помощью `event.cart.items.reduce((total, item) => total + item.quantity, 0)` и передают его как `itemCount`. Более старые копии этих сниппетов, использующие `cart.item_count`, вызывают `ReferenceError` и незаметно никогда не обновляют значок.
</Note>

***

<div id="level-3-advanced">
  ## Уровень 3 (продвинутый)
</div>

Если ваша тема использует **отдельную** разметку значка корзины для десктопа и мобильных устройств, выполните ту же логику обновления для двух селекторов, чтобы каждое устройство получало правильный HTML и счетчик.

**Не забудьте**

* Заменить **`#cart-icon-bubble-custom-desktop`** и **`#cart-icon-bubble-custom-mobile`** на классы вашей темы.
* Тщательно протестировать как на десктопе, так и на мобильных устройствах.

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-3-desktop-mobile-script.gif?s=36058384ee181aa8fc630e3c7bfc8716" alt="Вставка скрипта уровня 3 в Custom HTML Upcart с отдельными селекторами значка корзины для десктопа и мобильных устройств" width="1996" height="1080" data-path="images/upcart/cart-counter-level-3-desktop-mobile-script.gif" />

<div id="example-code-for-level-3">
  ### Пример кода для уровня 3
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
;(() => {  
function updateCartCount(itemCount) {  
    // Desktop  
    const desktopIconWrapperEl = document.querySelector('#cart-icon-bubble-custom-desktop');  
    if (itemCount === 0) {  
        desktopIconWrapperEl.innerHTML = `<span>Cart</span><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span>`;  
    } else {  
        desktopIconWrapperEl.innerHTML = `<span>Cart (${itemCount})</span><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span>`;  
    }  
  
    // Mobile  
    const mobileIconWrapperEl = document.querySelector('#cart-icon-bubble-custom-mobile');  
    if (itemCount === 0) {  
        mobileIconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span><span class="visually-hidden">Cart</span>`;  
    } else {  
        mobileIconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span><span class="visually-hidden">Cart</span><div class="cart-count-bubble"><span aria-hidden="true">${itemCount}</span><span class="visually-hidden">${itemCount} item</span></div>`;  
    }  
}  
  
window.upcartSubscribeCartLoaded((event) => {  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    updateCartCount(itemCount);  
});  
})();  
</script>
```

<Note>
  **Примечание об устаревшем API:** колбэки `window.upcartOnCartLoaded` по-прежнему работают, но объявлены устаревшими и выводят предупреждения в консоль. Используйте `upcartSubscribeCartLoaded` для всех новых скриптов.

  Обратите внимание, что у `event.cart` **нет** свойства `item_count` — приведенные выше скрипты вычисляют итог с помощью `event.cart.items.reduce((total, item) => total + item.quantity, 0)` и передают его как `itemCount`. Более старые копии этих сниппетов, использующие `cart.item_count`, вызывают `ReferenceError` и незаметно никогда не обновляют значок.
</Note>

***

<div id="still-not-working">
  # Все еще не работает?
</div>

Если ни один из этих уровней не решает проблему, не переживайте — у вас еще есть варианты! Скорее всего, это означает, что ваша тема требует более сложной настройки.

**Вот что можно сделать дальше:**

* Обратитесь за помощью к разработчику вашей темы.
* Наймите [эксперта Shopify](https://www.shopify.com/partners/directory), который сможет создать индивидуальное решение для вашего магазина.
