Skip to content
  1. Компоненты
  2. MiniShop3
  3. Системные настройки

Системные настройки ​

Настройки MiniShop3 лежат в System → System Settings, пространство имён minishop3. Все имена начинаются с префикса ms3_.

Основные настройки ​

НастройкаПо умолчаниюОписание
ms3_services_config(не в transport)Путь к ms3.services.php. Без этого ключа ServiceRegistry ищет файл в {core_path}config/ms3.services.php. Файл возвращает массив [service_id => ClassName] и переопределяет классы по умолчанию
ms3_services_addons_dir(не в transport)Папка с фрагментами регистрации сервисов, по умолчанию {core_path}config/ms3.services.d/. Файлы *.php загружаются в алфавитном порядке после основного конфига
ms3_assets_url(не в transport)Переопределяет базовый URL assets компонента. По умолчанию {assets_url}components/minishop3/
ms3_action_url(не в transport)Переопределяет базовый URL Web API. По умолчанию {ms3_assets_url}api.php
ms3_core_path(не в transport)Переопределяет путь к core-директории компонента. По умолчанию {core_path}components/minishop3/
ms3_version(пусто)Версия установленного пакета. Заполняется автоматически при установке и обновлении, править вручную не нужно. Отдаётся в /health и сравнивается с версией файлов на диске
ms3_chunks_categoriesID категорий через запятую для списка чанков. При установке сюда подставляется категория MiniShop3
ms3_use_schedulerfalseИспользовать компонент Scheduler для фоновых задач

Расхождение версии и файлов

Если ms3_version новее версии файлов на диске, в админке появляется предупреждение: файлы скопировались не полностью. Такое бывает, когда обновление оборвалось на середине. Лечится повторной установкой пакета.

Категория товаров ​

НастройкаПо умолчаниюОписание
ms3_template_category_defaultШаблон по умолчанию для новых категорий
ms3_category_show_nested_productstrueПоказывать вложенные товары из подкатегорий
ms3_category_show_optionsfalseПоказывать опции товаров в таблице категории
ms3_category_id_as_aliasfalseИспользовать ID категории как псевдоним URL
ms3_category_content_default(не в transport)Содержимое для новых категорий (вызов сниппета). Читается JS панели категории при создании ресурса. Создайте ключ вручную, если нужен автоматически заполненный content
ms3_category_products_default_rows20 (значение в коде)Строк на странице в таблице товаров категории. Ключа нет в transport: пока он не создан, действует 20
mgr_tree_icon_mscategoryicon icon-barcodeCSS-класс иконки категории в дереве ресурсов

Товар ​

Основные поля ​

НастройкаПо умолчаниюОписание
ms3_template_product_defaultШаблон по умолчанию для новых товаров
ms3_product_main_fieldspagetitle,longtitle,description,introtext,contentОсновные поля на панели товара
ms3_product_extra_fieldsprice,old_price,article,weight,color,size,vendor_id,made_in,tags,new,popular,favoriteДополнительные поля товара
ms3_product_show_in_tree_defaultfalseПоказывать новые товары в дереве ресурсов
ms3_product_id_as_aliasfalseИспользовать ID товара как псевдоним URL
ms3_product_remember_tabstrueЗапоминать активную вкладку панели товара
mgr_tree_icon_msproducticon icon-tagCSS-класс иконки товара в дереве ресурсов

Вкладки товара ​

НастройкаПо умолчаниюОписание
ms3_product_tab_extratrueПоказывать вкладку свойств товара
ms3_product_tab_optionstrueПоказывать вкладку опций
ms3_product_tab_categoriestrueПоказывать вкладку категорий

Галерея ​

НастройкаПо умолчаниюОписание
ms3_product_source_default0ID источника файлов для галереи по умолчанию
ms3_product_thumbnail_default{assets_url}components/minishop3/img/mgr/ms3_small.pngПуть к изображению-заглушке
ms3_product_thumbnail_sizesmallРазмер превью по умолчанию

Форматирование цен и веса ​

НастройкаПо умолчаниюОписание
ms3_price_format[2, ".", " "]Формат цены: [знаки после запятой, разделитель дробной части, разделитель тысяч]
ms3_weight_format[3, ".", " "]Формат веса: [знаки после запятой, разделитель дробной части, разделитель тысяч]
ms3_price_format_no_zerostrueУбирать лишние нули в ценах (15.00 → 15)
ms3_weight_format_no_zerostrueУбирать лишние нули в весе
ms3_price_snippetУстаревшая. Любое непустое значение включает пересчёт цены при выборке товаров. Само значение не используется
ms3_weight_snippetУстаревшая. То же для веса
ms3_currency_symbol₽Символ валюты (₽, $, €, £, ₴, ¥, ₸)
ms3_currency_positionafterПозиция символа: before ($ 100) или after (100 ₽)
ms3_weight_unitkgЕдиница измерения веса (например kg, г, lbs, oz). Используется в *_formatted плейсхолдерах

Корзина ​

НастройкаПо умолчаниюОписание
ms3_cart_contextfalseИспользовать единую корзину для всех контекстов
ms3_cart_max_count1000Максимальное количество товаров в корзине
ms3_cart_page_id0ID страницы корзины. Ссылка «Перейти в корзину» в блоке корзины и переадресация из JS
ms3_order_page_id0ID страницы оформления. Ссылка «Оформить заказ» из корзины

Заказы ​

Общие настройки ​

НастройкаПо умолчаниюОписание
ms3_order_format_numymФормат нумерации заказов (формат date())
ms3_order_format_num_separator/Разделитель в номере заказа
ms3_date_formatd.m.y H:MФормат дат в админке
ms3_order_user_groupsГруппы для регистрации покупателей (через запятую)
ms3_order_show_draftsfalseПоказывать черновики в списке заказов в админке
ms3_order_redirect_thanks_id1ID страницы «Спасибо за заказ»
ms3_order_success_page_id0ID страницы успешной оплаты
ms3_order_register_user_on_submitfalseСоздавать modUser при оформлении заказа
ms3_email_managerEmail-адреса менеджеров для уведомлений (через запятую)
ms3_delete_drafts_afterУдалять старые черновики (формат strtotime: -1 year, -2 weeks)
ms3_order_log_actionsstatus,products,field,addressЛогируемые действия с заказом
ms3_payment_on_failed_status0ID статуса заказа при неуспешной или отменённой оплате. 0 — не менять статус
ms3_payment_on_refunded_status5ID статуса заказа при полном возврате. 0 — не менять статус. Частичный возврат статус не меняет

Неуспешная оплата и складской резерв

Значение 0 у ms3_payment_on_failed_status оставляет заказ в прежнем статусе, чтобы покупатель мог повторить оплату. Но если включён складской учёт, резерв остатка остаётся за этим заказом до его отмены. Чтобы остаток освобождался сам, укажите здесь ID статуса отмены.

До версии 1.14 здесь стояло 5. При обновлении значение меняется на 0 только у тех, кто настройку не трогал: изменённую вручную миграция не переписывает.

Поля в админке ​

Поля заказа, адреса и таблицы товаров

Раньше настраивались ключами ms3_order_grid_fields, ms3_order_address_fields, ms3_order_product_fields, ms3_order_product_options. Теперь управление идёт через Утилиты → Поля моделей (таблицы ms3_model_fields и ms3_model_field_sections, модели msOrder / msOrderAddress) и Утилиты → Настройки гридов (ms3_grid_fields). Прежние системные настройки больше не читаются.

Статусы заказов ​

НастройкаПо умолчаниюОписание
ms3_status_draft1ID статуса «Черновик»
ms3_status_new2ID статуса нового заказа после оформления
ms3_status_paid3ID статуса оплаченного заказа
ms3_status_sent4ID статуса «Отправлен». В него переводит отгрузка, когда получает состояние «отправлено»
ms3_status_canceled5ID статуса отменённого заказа
ms3_status_for_stat2,3ID статусов для статистики выполненных заказов
ms3_order_status_transitions(пусто)Разрешённые переходы между статусами. Пусто — переходы ограничены только метками «конечный» и «фиксированный» у самих статусов

Статусы после установки

Миграция seed_order_statuses создаёт пять записей в ms3_order_statuses (id 1–5: черновик, новый, оплачен, отправлен, отменён) и обновляет ms3_status_new, ms3_status_paid, ms3_status_canceled по фактическим id. Если вы меняли или удаляли статусы вручную, сверьте id в Настройки → Статусы с этими ключами.

ms3_status_sent миграция не обновляет — он остаётся равным 4. Если статус «Отправлен» получил другой id, впишите его сюда сами.

Разрешённые переходы ​

По умолчанию заказ можно перевести в любой статус, кроме двух случаев: из статуса с меткой «конечный» уйти нельзя, а из статуса с меткой «фиксированный» нельзя вернуться назад по порядку.

Настройка ms3_order_status_transitions задаёт точный маршрут заказа поверх этих правил. Формат — пары «откуда:куда» через запятую:

2:3,3:4,2:5

Из статуса 2 можно уйти в 3 или 5, из 3 — только в 4. Всё, чего нет в списке, запрещено. Тот же список принимается в виде JSON: [[2,3],[3,4],[2,5]].

Ошибка в формате запрещает все переходы

Разбор строки не прощает опечаток. Если значение не удалось разобрать, ни один заказ не сменит статус, а в ответе будет сообщение о недопустимом переходе — не о неверной настройке. Проверяйте формат сразу после правки.

Складской учёт ​

НастройкаПо умолчаниюОписание
ms3_inventory_enabledfalseУчитывать остатки при оформлении заказа

Пока настройка выключена, корзина и оформление работают без оглядки на остатки. После включения остаток резервируется при переходе в статус «Новый», списывается на «Оплачен» и возвращается на «Отменён», если заказ ещё не был оплачен.

Перед включением заполните остатки

Пустой остаток (NULL в поле stock) читается как ноль, а списание идёт по условию «остаток не меньше требуемого». Включение учёта на незаполненном складе сделает все такие товары недоступными для заказа.

Остаток один на товар. Строки заказа с одним и тем же товаром, включая варианты с разными опциями, списываются с общего количества.

Отгрузки ​

НастройкаПо умолчаниюОписание
ms3_shipment_enabledfalseМенять статус заказа вслед за состоянием отгрузки
ms3_shipment_on_delivered_status0ID статуса заказа при состоянии «доставлено». 0 — не менять
ms3_shipment_on_in_transit_status0ID статуса заказа при состоянии «в пути». 0 — не менять

Отгрузка хранит трек-номер и состояние доставки. Создать её и вписать трек-номер можно и при выключенной настройке — выключается только автоматическая смена статуса заказа.

У отгрузки семь состояний, и заказ реагирует не на все:

Состояние отгрузкиЧто происходит с заказом
ОтправленоПереходит в ms3_status_sent
Отменено, ОшибкаПереходят в ms3_status_canceled
В пути, ДоставленоБерут статус из своей настройки, при 0 не меняют
Подготовка, ВозвратНе меняют статус: настроек под них в поставке нет

Почему «доставлено» по умолчанию ничего не меняет

Статус «Отправлен» в поставке помечен как конечный, а из конечного статуса уйти нельзя. Значение, отличное от 0, имеет смысл, только если вы сняли с «Отправлен» метку конечного или используете свой статус.

Клиенты ​

Настройки личного кабинета. Как это выглядит на фронтенде — Вход и регистрация.

ms3_customer_login_page_id и ms3_customer_register_page_id задают только адреса в ссылках. Сами формы выводит msCustomer через unauthorizedTpl; отдельного чанка только для входа в пакете нет.

Страницы личного кабинета ​

НастройкаПо умолчаниюОписание
ms3_customer_login_page_id0ID страницы входа
ms3_customer_register_page_id0ID страницы регистрации
ms3_customer_profile_page_id0ID страницы профиля
ms3_customer_addresses_page_id0ID страницы адресов
ms3_customer_orders_page_id0ID страницы истории заказов
ms3_customer_redirect_after_login0ID страницы, куда перенаправить после входа (0 — остаться)

Авторизация и регистрация ​

При включённых ms3_customer_auto_register_on_order и ms3_customer_auto_login_on_order гость становится msCustomer прямо при оформлении заказа, без формы кабинета. Выключите их, если аккаунты создаёте только вручную.

ms3_customer_require_email_verification отправляет письмо со ссылкой на GET /api/v1/customer/email/verify. Пока адрес не подтверждён, часть сценариев кабинета может потребовать повторной отправки письма.

НастройкаПо умолчаниюОписание
ms3_customer_auto_register_on_ordertrueАвтоматически регистрировать клиента при заказе
ms3_customer_auto_login_on_ordertrueАвтоматически авторизовать после заказа
ms3_customer_auto_login_after_registertrueАвтоматически авторизовать после регистрации
ms3_customer_require_email_verificationfalseТребовать подтверждение email
ms3_customer_send_welcome_emailtrueОтправлять приветственное письмо

Отмена заказов ​

НастройкаПо умолчаниюОписание
ms3_customer_cancel_allowed_statuses2,3ID статусов, при которых покупатель может отменить заказ (через запятую). По умолчанию: новый и оплаченный

Настройка отмены заказов

Покупатель видит кнопку «Отменить заказ» только для заказов со статусом из этого списка. При отмене заказ переводится в статус ms3_status_canceled.

Чтобы запретить отмену заказов покупателями, укажите 0.

Пустое значение отмену не запрещает

Очистка настройки не выключает отмену, а возвращает список к статусам из ms3_status_new и ms3_status_paid — то есть к тем же «Новый» и «Оплачен». Покупатель по-прежнему сможет отменить оплаченный заказ.

Синхронизация с modUser ​

По умолчанию выключена: кабинет работает на msCustomer и токене MS3. Включайте синхронизацию, если нужны группы MODX, ACL или общие сессии с другими компонентами.

НастройкаПо умолчаниюОписание
ms3_customer_sync_enabledfalseВключить синхронизацию msCustomer ↔ modUser
ms3_customer_sync_create_moduserfalseСоздавать modUser при регистрации msCustomer
ms3_customer_sync_delete_with_userfalse (не в transport)Удалять msCustomer при удалении modUser. Ключ читается плагином minishop3.php, при необходимости создайте вручную
ms3_customer_sync_user_group0ID группы для новых modUser
ms3_customer_duplicate_fields["email", "phone"]JSON-массив полей для проверки дубликатов

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

Токены ​

НастройкаПо умолчаниюОписание
ms3_customer_token_ttl86400Время жизни токена клиента (секунды, 24 часа)
ms3_customer_api_token_ttl86400Время жизни API токена (секунды, 24 часа)
ms3_password_reset_token_ttl3600Время жизни токена сброса пароля (секунды, 1 час)
ms3_email_verification_token_ttl86400Время жизни токена верификации email (секунды, 24 часа)
ms3_email_verification_urlСвой URL для письма подтверждения email. Если пусто — ссылка ведёт на Web API api.php?route=…/email/verify&token=…&html=1
ms3_email_verification_success_urlURL, на который редиректит после успешного подтверждения email. Если пусто — возвращается на сайт с ?ms3_email_verified=1
ms3_snippet_token_secret(автогенерация)Секретный ключ для токенов сниппетов
ms3_snippet_cache_ttl3600Время кеширования параметров сниппетов (секунды)
ms3_payment_secretСекретный ключ для платёжных уведомлений

Защита от брутфорса ​

НастройкаПо умолчаниюОписание
ms3_customer_max_login_attempts5Максимум неудачных попыток входа
ms3_customer_block_duration300Длительность блокировки (секунды, 5 минут)

Требования к паролю ​

НастройкаПо умолчаниюОписание
ms3_password_min_length8Минимальная длина пароля
ms3_password_require_uppercasefalseТребовать заглавные буквы
ms3_password_require_numberfalseТребовать цифры
ms3_password_require_specialfalseТребовать спецсимволы

API ​

Настройки Web API (api.php). Список методов — REST API.

ms3_cors_allowed_origins по умолчанию пусто: запросы принимаются только с того же домена. Значение * разрешает любой origin, но без передачи учётных данных; чтобы токен из cookie работал с другого домена, перечислите точные origin через запятую.

Ограничение частоты запросов действует на все /api/v1/*. На одном сервере хватает хранилища счётчиков file.

НастройкаПо умолчаниюОписание
ms3_api_debugfalseРежим отладки API (расширенное логирование)
ms3_cors_allowed_origins-Разрешённые origin для CORS: пусто = только свой домен, * = любой (без учётных данных), либо список через запятую
ms3_rate_limit_max_attempts60Максимум запросов за период
ms3_rate_limit_decay_seconds60Период лимита запросов (секунды)
ms3_rate_limit_storefileХранилище счётчиков: file, redis, memcached
ms3_rate_limit_storage_path-Каталог для file (пусто = системный temp)
ms3_rate_limit_redis_dsn-DSN Redis (если задан, перекрывает host/port)
ms3_rate_limit_redis_host127.0.0.1Хост Redis
ms3_rate_limit_redis_port6379Порт Redis
ms3_rate_limit_redis_password-Пароль Redis
ms3_rate_limit_redis_database0Номер БД Redis
ms3_rate_limit_memcached_servers127.0.0.1:11211Список серверов Memcached
ms3_web_catalog_respect_resource_groupstrueСкрывать из каталога товары и категории, закрытые группами ресурсов MODX
ms3_public_seo_tv_map(пусто)Подмена значений SEO-блока своими TV. JSON вида {"title":"tv.seo_title"}

Закрытые разделы каталога ​

ms3_web_catalog_respect_resource_groups включена по умолчанию: товары и категории из закрытой группы ресурсов MODX не показываются посторонним ни в Web API, ни в сниппетах, ни в корзине. Вошедший покупатель, чья группа покупателей привязана к группе пользователей MODX, видит закрытый раздел.

Работает только вместе с системной настройкой MODX access_resource_group_enabled.

На кэшируемой странице закрытый каталог не работает

MODX отдаёт готовый HTML раньше, чем выполнятся сниппеты. Первый же гость запишет в кэш свой сокращённый список, и вошедший покупатель увидит именно его. Вызывайте сниппеты некэшированно: [[!ms3_products]], [[!ms3_gallery]].

Подмена SEO своими TV ​

Формат ms3_public_seo_tv_map — JSON: слева ключ из допустимого набора (title, description, canonical, robots, og.title, og.description, og.image, og.type), справа имя TV с префиксом tv.:

json
{"title": "tv.seo_title", "robots": "tv.robots"}

Применяется к карточке товара и категории, а в списках и дереве — при include_seo=1.

Неверный JSON игнорируется молча

Ошибка в формате не вызывает сообщения: настройка просто не применяется, и SEO-блок возвращает значения по умолчанию. Если подмена не сработала, первым делом проверьте JSON.

Фронтенд ​

НастройкаПо умолчаниюОписание
ms3_token_namems3_tokenИмя токена для идентификации посетителя
ms3_register_global_configtrueРегистрировать ms3Config в DOM
ms3_frontend_assetsJSON-массивПодключаемые на фронтенде CSS и JS (hooks.js, CartAPI.js, CartUI.js, ms3.js и др.)

order-addresses.js в список по умолчанию не входит. Подключайте его отдельно, если на оформлении нужен блок сохранённых адресов клиента.

Плейсхолдеры в ms3_frontend_assets ​

  • [[+assetsUrl]] — assets/components/minishop3/
  • [[+jsUrl]] — assets/components/minishop3/js/
  • [[+cssUrl]] — assets/components/minishop3/css/

Импорт ​

НастройкаПо умолчаниюОписание
ms3_utility_import_fieldspagetitle,parent,price,articleПоля для импорта
ms3_utility_import_fields_delimiter;Разделитель колонок CSV
ms3_import_sync_limit300Лимит синхронного импорта (строк)
ms3_import_preview_rows5Строк для предпросмотра
ms3_import_upload_pathassets/import/Путь для загрузки файлов импорта

Уведомления ​

Email ​

НастройкаПо умолчаниюОписание
ms3_email_managerEmail-адреса менеджеров для уведомлений (через запятую)

Telegram ​

НастройкаПо умолчаниюОписание
ms3_telegram_bot_tokenТокен Telegram бота (получить у @BotFather)
ms3_telegram_managerCSV chat ID менеджеров для уведомлений о смене статуса. OrderStatusService читает его параллельно с Утилиты → Уведомления

Настройка Telegram бота

  1. Создайте бота через @BotFather и получите токен
  2. Укажите токен в ms3_telegram_bot_token
  3. Получателей задайте одним из способов:
    • Утилиты → Уведомления — канал Telegram, recipient_value = chat ID (рекомендуется с 1.11+)
    • ms3_telegram_manager — CSV chat ID для прежней рассылки при смене статуса

Chat ID можно узнать через @userinfobot.

Примеры использования ​

Получение настройки в PHP ​

php
$priceFormat = $modx->getOption('ms3_price_format');
$currencySymbol = $modx->getOption('ms3_currency_symbol');

Получение настройки в Fenom ​

fenom
{* Символ валюты *}
{'ms3_currency_symbol' | option}

{* ID страницы профиля клиента *}
{'ms3_customer_profile_page_id' | option}

Формат цены ​

ms3_price_format принимает JSON-массив из трёх значений — знаки после запятой, разделитель дробной части, разделитель тысяч:

json
[2, ".", " "]

Результат: 1 234.56

Изменение цены и веса ​

Цену и вес товара меняют плагины на событиях msOnGetProductPrice и msOnGetProductWeight. Плагин достаточно повесить на событие — ничего включать в настройках не нужно.

php
<?php
// Плагин на событие msOnGetProductPrice
// Цену берём из eventData: её мог изменить предыдущий плагин
$price = $modx->eventData['msOnGetProductPrice']['price'] ?? $scriptProperties['price'];
$data = $scriptProperties['data'];

// Скидка 10% для товаров из категории 5
if ((int) ($data['parent'] ?? 0) === 5) {
    $price = $price * 0.9;
}

// Возвращаем через eventData, чтобы следующий плагин получил изменённую цену
$modx->eventData['msOnGetProductPrice']['price'] = $price;

Параметры событий и порядок их вызова — в разделе События товара.