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 в строке берётся из самого MiniShop3 (TV old_price), а discount плагин не добавляет.

Простой бейдж собирается из полей MS3 и строки:

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

Для бейджа с названием акции, процентом и таймером подключите ms3discountsGetDiscount как prepareSnippet — сниппет сам разбирает вложенный ключ row и добавляет в строку name, percent, price, base_price, discount, sale_discount, remains, date_end и sale_id:

fenom
{'!msProducts' | snippet : [
  'parents' => 0,
  'prepareSnippet' => 'ms3discountsGetDiscount',
  'tpl' => '@FILE chunks/ms3d-row.tpl'
]}

Подготовка строки или вызов в чанке

Режим prepareSnippet включается, когда в строке есть id и pagetitle, — именно их передаёт msProducts. Если полей нет, сниппет считает, что это обычный вызов, и ждёт параметр id в корне. Второй способ — вызвать сниппет прямо в чанке строки:

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

Именно так сделано в ms3discountsBuyNow: он подставляет prepareSnippet=ms3discountsGetDiscount по умолчанию.

Режим подготовки строки отбирает правила по флагу «Показывать в каталоге», а отдельный вызов на карточке — по «Показывать на товаре». Правило с выключенным «В каталоге» в строке msProducts бейджа не даст.