Skip to content
ms3Discounts
Правила скидок для MiniShop3. Без промокодов
  • MODX 3
  • PHP 8.2
  • miniShop3
  • Vue 3
  1. Компоненты
  2. ms3Discounts
  3. Витрина
  4. Сниппет ms3discountsGetDiscount

Сниппет ms3discountsGetDiscount ​

Сниппет рассчитывает лучшую доступную скидку для одного товара и выводит бейдж через чанк.

Если товару подходит сразу несколько акций, сниппет выбирает правило с наибольшей суммой скидки, а при равенстве сумм — с наибольшим процентом. Расчёт учитывает группы авторизованного пользователя и скидки, активированные в текущей сессии через ms3discounts_activator.

Параметры ​

ПараметрПо умолчаниюОписание
idID текущего ресурсаID товара MiniShop3. Доступен алиас product
saleпустоСписок ID акций через запятую. Если не указан, сниппет проверяет плейсхолдер ms3discounts.sale (его автоматически выставляет ms3discountsBuyNow). Если плейсхолдер пуст, проверяются все активные акции
tpltpl.ms3discounts.getИмя чанка для отображения бейджа
returntplФормат возврата: tpl (разметка чанка), data (массив данных), json (строка JSON)
frontend_cssпустоПуть к CSS. Пустая строка использует системную настройку ms3discounts_frontend_css. Значение 0 отключает регистрацию стилей
frontend_jsпустоПуть к JS. Пустая строка использует настройку ms3discounts_frontend_js. Значение 0 отключает регистрацию скрипта

Для точного расчёта без обращения к базе данных можно передать параметры товара вручную: price, category_ids, vendor_id, article, count, options. Если они не переданы, сниппет запрашивает снимок товара из каталога MiniShop3.

Плейсхолдеры чанка ​

ПолеСмысл
sale_discountПроцент скидки (если больше 0), иначе сумма скидки
remainsКоличество секунд до даты окончания акции date_end
priceИтоговая цена товара с учётом скидки
base_priceИсходная цена товара до применения скидки
discountСумма скидки в валюте магазина
percentПроцент скидки
nameНазвание применённого правила скидки
idID применённой акции
date_endДата окончания акции в формате YYYY-MM-DD HH:mm:ss
potentialФлаг наличия условий корзины, которые не могут быть проверены на витрине
idxПорядковый номер строки начиная с 0 (при выводе через чанк)

Примеры вызова ​

Вывод бейджа на карточке товара:

fenom
{'!ms3discountsGetDiscount' | snippet : [
  'id' => $_modx->resource.id,
  'tpl' => 'tpl.ms3discounts.get',
]}
modx
[[!ms3discountsGetDiscount?
  &id=`[[*id]]`
  &tpl=`tpl.ms3discounts.get`
]]

Скидки в каталоге msProducts ​

Цены в списке товаров пересчитываются без дополнительных вызовов: плагин ms3Discounts подписан на событие msOnGetProductPrice, поэтому в чанке строки msProducts поле price уже содержит цену со скидкой, old_price — базовую цену, а discount — готовый процент. Простой бейдж собирается без сниппета:

fenom
{if $discount > 0}
  <span class="badge">−{$discount}%</span>
  <s>{$old_price}</s> {$price}
{/if}

Для бейджа с названием акции и таймером вызовите сниппет в чанке строки с id товара:

fenom
{'!ms3discountsGetDiscount' | snippet : ['id' => $id]}

Не используйте prepareSnippet

Параметр prepareSnippet=ms3discountsGetDiscount у msProducts не обогащает строки: pdoTools передаёт поля товара во вложенном ключе row, а сниппет ожидает их в корне параметров. Вызов завершается молча, поля скидки в строке не появляются.