Tilda · 6 мин чтения

Скидка на группу товаров в Тильде: как настроить в корзине

Скидка на группу товаров в Тильде не входит в стандартный набор настроек корзины: там можно задать скидку на весь заказ или собрать промокод, а привязать процент только к товарам категории «Аксессуары» или к позициям с определённым артикулом без доработки не получится. За последние года три я делал такие скрипты для интернет-магазинов на Тильде больше десятка раз, и запрос обычно звучит одинаково: нужна скидка 10-20% на конкретную категорию, а остальной каталог продаётся по полной цене. Разберу, что умеет Тильда из коробки, почему группового discounта там нет и как я обычно закрываю эту задачу через кастомный скрипт в корзине.

Какие скидки умеет Тильда без доработок

В настройках интернет-магазина Тильды («Магазин» -> «Оплата и заказ») есть два инструмента. Первый - скидка на заказ целиком, в процентах или фиксированной суммой, срабатывает от суммы корзины или количества товаров. Второй - промокоды: можно создать код на скидку в процентах или рублях, ограничить срок действия и число активаций. Оба варианта считают скидку от общей суммы корзины и не различают, из чего она состоит - три товара из категории «Обувь» или один ноутбук за 80 000 ₽ дадут одинаковый процент.

Есть ещё вариант в лоб - выставить сниженную цену прямо в карточке товара и показать зачёркнутую старую цену через поле «Цена по акции». Это честная скidka на конкретный товар, но она статична: если акция должна включаться только при определённых условиях корзины (например, скидка на аксессуары действует только при покупке основного товара), таким способом это не сделать.

Почему скидка на группу товаров не настраивается в панели

Корзина Тильды считает сумму заказа построчно: цена товара умножается на количество, строки суммируются, к итогу применяется скидка на заказ или промокод, если он введён. Категория товара - это атрибут карточки в каталоге, а не поле корзины, и в объекте товара, который попадает в JS-корзину (tcart), категории по умолчанию нет вообще. Есть артикул, название, цена, количество и опции. Поэтому логика «если товар из категории X - скidka Y%» физически негде включить без кода: панель просто не оперирует категориями на уровне расчёта корзины.

Логика кастомного скрипта для скидки на категорию

Я обычно решаю это так: завожу список артикулов (SKU) товаров, входящих в акционную группу, и вешаю обработчик на события корзины Тильды - добавление товара, изменение количества, удаление. При каждом пересчёте скрипт проходит по tcart.products, сравнивает артикул каждой позиции со списком, и если совпадение есть, пересчитывает сумму по этой строке с учётом скидки. Итоговая скидка суммируется по всем подходящим позициям и вычитается из общей суммы заказа, а в интерфейсе корзины дописывается пояснение, сколько именно сэкономил покупатель.

Важный момент, который часто упускают: артикулы для группы нельзя брать «на глаз» из названия, лучше синхронизировать список с реальными SKU из экспортированного XML каталога Тильды, иначе после переноса позиции в другую категорию скидка тихо перестанет применяться.

Код: скидка 15% на группу товаров в корзине

Вот упрощённый вариант скрипта, который я адаптирую под конкретный проект. Он подписывается на обновление корзины и пересчитывает итог для товаров из заданного списка артикулов.

var discountGroup = ['A100', 'A101', 'A102']; // артикулы товаров со скидкой
var discountPercent = 15;

function applyGroupDiscount() {
  if (!window.tcart || !tcart.products || !tcart.products.length) return;

  var totalDiscount = 0;

  tcart.products.forEach(function (product) {
    if (discountGroup.indexOf(product.sku) !== -1) {
      var lineAmount = product.price * product.quantity;
      totalDiscount += lineAmount * (discountPercent / 100);
    }
  });

  if (totalDiscount > 0) {
    var newTotal = tcart.amount - totalDiscount;
    var totalNode = document.querySelector('.t706__cartwin-totalamount-sum');
    if (totalNode) {
      totalNode.innerHTML = newTotal.toFixed(2) + ' ₽ (скидка ' + totalDiscount.toFixed(2) + ' ₽)';
    }
  }
}

document.addEventListener('tcart:updated', applyGroupDiscount);
window.tcart__addProductToCartCallback = applyGroupDiscount;
window.tcart__reCalcAmountAllCallback = applyGroupDiscount;

Этот вариант меняет только визуальное отображение суммы. Для реальной оплаты скидку нужно передавать дальше - в оплату через эквайринг и в вебхук, который уходит в CRM, иначе клиент увидит одну сумму в корзине, а спишется другая.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как совместить скидку по группе с промокодами и оплатой

Скидка на группу товаров и промокод Тильды - разные механизмы, и по умолчанию они не мешают друг другу: промокод считается от итоговой суммы заказа, а groupовую скидку я применяю до него, так что можно давать и то, и другое одновременно, если это осознанный выбор владельца магазина. Если нужно наоборот - запретить промокод при наличии товаров из акционной группы, - проверка делается тем же скриптом: перед применением промокода смотрю, есть ли в корзине артикулы из списка, и если да, блокирую поле промокода или показываю предупреждение.

Отдельно нужно синхронизировать скидку с оплатой. Если магазин принимает платежи через Т‑Банк или другой эквайринг, сумма к оплате формируется из tcart.amount или отдельного скрытого поля в форме заказа - его тоже нужно перезаписывать скриптом, иначе на стороне банка уйдёт сумма без скидки. Та же история с доставкой СДЭК: если скидка не должна распространяться на стоимость доставки, важно вычитать её строго из суммы товаров, а не из итога заказа целиком, иначе задваивается расчёт при пересчёте стоимости доставки по весу и габаритам.

Сравнение способов сделать скидку в Тильде

Способ Где настраивается Что охватывает Ограничения
Скидка на заказ Панель Тильды, без кода Весь заказ целиком Нельзя выделить категорию или конкретные SKU
Промокод Панель Тильды, без кода Весь заказ или процент/сумма по условию корзины Не различает состав корзины по категориям
Цена по акции в карточке Карточка товара Один конкретный товар Статична, не реагирует на условия в корзине
Кастomный скрипт на группу товаров Код в корзине (T706) Любая группа по артикулам, тегам, цене Нужна разработка и синхронизация с оплатой и CRM

На практике для простой акции «минус 10% на одну категорию до конца месяца» хватает скрипта уровня простой доработки. Если скидка завязана на CRM, эквайринг и статус клиента (например, скидка только для оптовиков из Bitrix24), это уже комплексная интеграция, и такие задачи я оцениваю отдельно - подробнее про разработку кастомных скриптов для Тильды у меня в услугах.

Частые ошибки при внедрении групповых скидок

Самая частая ошибка - вешать обработчик только на добавление товара в корзину и забывать про изменение количества. Покупатель добавил один товар со скидкой, всё отработало, потом увеличил количество до трёх прямо в окне корзины - и пересчёт не сработал, потому что событие изменения количества не было закрыто скриптом.

Вторая ошибка - округление. Если скидка считается по каждой строке отдельно и потом суммируется, итог может на копейку-две отличаться от скидки, посчитанной от общей суммы группы. Для интернет-магазина это мелочь, но при сверке с эквайрингом расхождение в оплаченной и отображённой сумме иногда становится поводом для обращения в поддержку от самого клиента.

Третья история - скидка «переживает» саму акцию. Если список артикулов зашит прямо в код блока T706 на сайте, после окончания акции его нужно руками убирать или закомментировать, иначе через полгода кто-то из отдела продаж напишет, что на сайте до сих пор действует давно закрытая скidka.

Когда стандартных блоков не хватает

Кастомный скрипт

от 3 000 ₽

Подробнее →

Частые вопросы

Можно ли сделать скидку на категорию через стандартные настройки Тильды?

Нет, стандартная скидка на заказ и промокоды в Тильде считаются от суммы всей корзины и не различают категории товаров. Единственный встроенный вариант - зачёркнутая цена по акции в карточке конкретного товара, но она не реагирует на состав корзины и не суммируется по группе позиций автоматически.

Как скидка на группу товаров скажется на оплате через эквайринг?

Если скидка меняет только текст в окне корзины, а сумма к оплате формируется из исходного значения, банк спишет сумму без скидки. Скрипт должен переписывать значение, которое уходит в форму оплаты, до момента редиректа на страницу Т‑Банка или другого эквайринга, иначе расхождение всплывёт уже на этапе списания денег.

Совместима ли скидка на группу с промокодами?

По умолчанию да, они считаются независимо: групповая скидка уменьшает сумму товаров из списка, промокод применяется к итогу после этого. Если нужно ограничить одновременное использование, проверка добавляется тем же скриптом - смотрим состав корзины перед активацией промокода.

Сколько стоит внедрить скидку на группу товаров в корзине Тильды?

Простая доработка с фиксированным списком артикулов и процентом скидки стоит от 3 000 ₽. Если скидка завязана на CRM, статус клиента, эквайринг и доставку СДЭК одновременно, это комплексная интеграция от 40 000 ₽, срок зависит от количества систем, с которыми нужно связать логику.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно