Skip to content
msPriceTiers
msPriceTiers
Оптовые цены по количеству для MiniShop3 — пороги на товаре и категории, сумма корзины, шаблоны, массовые операции, ms3Variants
  1. Компоненты
  2. msPriceTiers
  3. Для разработчика

AJAX API и PHP

Web connector

URL: assets/components/mspricetiers/js/web/connector.phpМетод: только POST.

action: price

Расчёт цены с учётом порогов.

ПараметрОбязательныйОписание
actionдаprice
product_idдаID товара
quantityдаКоличество
variant_idнетID варианта ms3Variants

Пример ответа:

json
{
  "success": true,
  "object": {
    "price": 900,
    "price_formatted": "900.00 ₽",
    "old_price": 1000,
    "old_price_formatted": "1000.00 ₽",
    "tier_id": 5,
    "has_tier": true,
    "quantity": 10,
    "product_id": 123
  }
}

Используется из msPriceTiers.fetchPrice() — см. Подключение на сайте.

action: sections

HTML-секции для обновления блоков без перезагрузки страницы.

ПараметрОбязательныйОписание
actionдаsections
product_idдаID товара (контекст рендера)
quantityнетКоличество (по умолчанию 1)
variant_idнетID варианта
cart_items / cartItemsнетJSON позиций [{product_id, quantity}, …]
cart_subtotal / subtotalнетСумма корзины для прогресса по сумме заказа
current_time / currentTimeнетСимуляция времени (QA)

Ключи object.sections:

КлючСодержимое
tablemsPriceTiers + mspricetiers.table
detailedРасширенная таблица
badgeБейдж «Оптовые цены»
placeholderЗаглушка
progress_productПрогресс на странице товара
progress_popupКомпактный прогресс
progress_cartПрогресс по количеству в корзине
progress_cart_sumПрогресс по сумме корзины
theme_badge / theme_progressДемо-варианты темы

Ответ также содержит quantity_dependent_keys — список ключей, зависящих от количества.

Безопасность

  • Проверка mspricetiers_allowed_origins для cross-origin.
  • Rate limiting (WebRateLimiter) на price и sections.

Сервис MODX

php
if ($modx->services->has('mspricetiers')) {
    $service = $modx->services->get('mspricetiers');
}

resolveForProduct

php
$resolved = $service->resolveForProduct(
    productIdentifier: 123,
    quantity: 10,
    options: ['variant_id' => 5],
    incomingPrice: 1000.0
);

$resolved->getPrice();
$resolved->getOldPrice();
$resolved->getTierIdentifier();

Списки порогов

php
$tiers = $service->getTiersForProduct(123);
$effective = $service->getEffectiveTiersForProduct(123); // товар → категория
$byProducts = $service->getTiersForMultipleProducts([123, 456]);

Кэш

php
$service->invalidateCache(123);
$service->invalidateAllCache();

Теги: mspricetiers, product_{id}.

Интеграция с MiniShop3

Плагин mspricetiers_events обрабатывает:

СобытиеНазначение
msOnGetProductPriceЦена товара с учётом количества (приоритет 15)
msOnProductsLoadМассовая подготовка каталога
msOnProductPrepareПлейсхолдеры товара
msOnBeforeAddToCart / msOnAddToCartЦена при добавлении
msOnBeforeChangeInCart / msOnChangeInCartИзменение количества в корзине
msOnBeforeGetCart / msOnGetCartПересчёт корзины: пороги по количеству, затем по сумме заказа

Приоритет msOnGetProductPrice = 15 (после ms3Variants).

Manager connector

URL: assets/components/mspricetiers/js/mgr/connector.php

NamespaceНазначение
mgr/tier/*CRUD порогов товара
mgr/categorytier/*Пороги категории
mgr/carttier/*Пороги по сумме корзины (админка)
mgr/template/*Шаблоны, apply
mgr/tier/bulk/*Массовые операции: импорт CSV, копирование, поиск и замена

Требуются права MS3 и CSRF менеджера.

mgr/template/apply

ПараметрОписание
template_idID шаблона
target_typeproduct или category
target_idID товара или категории
apply_modemerge или replace

Архитектура (слои)

MsPriceTiers\
  Domain\          TierResolver, ResolvedPrice
  Repository\      TierRepository, CategoryTierRepository, CartTierRepository
  Service\         PriceTierService, CartSumTierService
  Cart\            CartItemPriceUpdater
  Integration\     Ms3VariantsBridge

См. также