
msPriceTiers
Оптовые цены по количеству для MiniShop3 — пороги на товаре и категории, шаблоны, корзина, ms3Variants


Вызываются из PriceTierService и процессоров CRUD.
Перед выбором порога и расчётом цены.
$modx->invokeEvent('mspricetiersOnBeforeResolvePrice', [
'product_id' => $productId,
'quantity' => $quantity,
'base_price' => $basePrice,
'options' => $options,
'tiers' => $tiers,
]);Можно изменить массив tiers или отменить применение порога через логику плагина.
После расчёта.
$modx->invokeEvent('mspricetiersOnResolvePrice', [
'product_id' => $productId,
'quantity' => $quantity,
'resolved_price' => $resolvedPrice, // Value object ResolvedPrice
]);| Событие | Когда |
|---|---|
mspricetiersOnBeforeSaveTier | Перед созданием/обновлением порога |
mspricetiersOnSaveTier | После сохранения |
mspricetiersOnBeforeRemoveTier | Перед удалением |
mspricetiersOnRemoveTier | После удаления |
Подключите плагин на нужные события в Элементы → Плагины.
Обрабатываются плагином mspricetiers_events (не переименовывайте без необходимости).
Основное для витрины — msOnGetProductPrice: MS3 запрашивает цену → сервис подставляет tier.
| Событие | Источник | Назначение |
|---|---|---|
ms3variants:selected | ms3Variants | Пересчёт цены при смене варианта |
Слушатель встроен в mspricetiers.js при mspricetiers_integrate_ms3variants = Да.
<?php
switch ($modx->event->name) {
case 'mspricetiersOnResolvePrice':
$rp = $scriptProperties['resolved_price'] ?? null;
if ($rp) {
$modx->log(modX::LOG_LEVEL_INFO, '[msPT] product ' . $scriptProperties['product_id']
. ' qty ' . $scriptProperties['quantity']
. ' price ' . $rp->getPrice());
}
break;
}