
Системные настройки
Настройки 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_categories | ID категорий через запятую для списка чанков. При установке сюда подставляется категория MiniShop3 | |
ms3_use_scheduler | false | Использовать компонент Scheduler для фоновых задач |
Расхождение версии и файлов
Если ms3_version новее версии файлов на диске, в админке появляется предупреждение: файлы скопировались не полностью. Такое бывает, когда обновление оборвалось на середине. Лечится повторной установкой пакета.
Категория товаров
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_template_category_default | Шаблон по умолчанию для новых категорий | |
ms3_category_show_nested_products | true | Показывать вложенные товары из подкатегорий |
ms3_category_show_options | false | Показывать опции товаров в таблице категории |
ms3_category_id_as_alias | false | Использовать ID категории как псевдоним URL |
ms3_category_content_default | (не в transport) | Содержимое для новых категорий (вызов сниппета). Читается JS панели категории при создании ресурса. Создайте ключ вручную, если нужен автоматически заполненный content |
ms3_category_products_default_rows | 20 (значение в коде) | Строк на странице в таблице товаров категории. Ключа нет в transport: пока он не создан, действует 20 |
mgr_tree_icon_mscategory | icon icon-barcode | CSS-класс иконки категории в дереве ресурсов |
Товар
Основные поля
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_template_product_default | Шаблон по умолчанию для новых товаров | |
ms3_product_main_fields | pagetitle,longtitle,description,introtext,content | Основные поля на панели товара |
ms3_product_extra_fields | price,old_price,article,weight,color,size,vendor_id,made_in,tags,new,popular,favorite | Дополнительные поля товара |
ms3_product_show_in_tree_default | false | Показывать новые товары в дереве ресурсов |
ms3_product_id_as_alias | false | Использовать ID товара как псевдоним URL |
ms3_product_remember_tabs | true | Запоминать активную вкладку панели товара |
mgr_tree_icon_msproduct | icon icon-tag | CSS-класс иконки товара в дереве ресурсов |
Вкладки товара
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_product_tab_extra | true | Показывать вкладку свойств товара |
ms3_product_tab_gallery | true | Показывать вкладку галереи |
ms3_product_tab_links | true | Показывать вкладку связей товара |
ms3_product_tab_options | true | Показывать вкладку опций |
ms3_product_tab_categories | true | Показывать вкладку категорий |
Галерея
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_product_source_default | 0 | ID источника файлов для галереи по умолчанию |
ms3_product_thumbnail_default | {assets_url}components/minishop3/img/mgr/ms3_small.png | Путь к изображению-заглушке |
ms3_product_thumbnail_size | small | Размер превью по умолчанию |
Форматирование цен и веса
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_price_format | [2, ".", " "] | Формат цены: [знаки после запятой, разделитель дробной части, разделитель тысяч] |
ms3_weight_format | [3, ".", " "] | Формат веса: [знаки после запятой, разделитель дробной части, разделитель тысяч] |
ms3_price_format_no_zeros | true | Убирать лишние нули в ценах (15.00 → 15) |
ms3_weight_format_no_zeros | true | Убирать лишние нули в весе |
ms3_price_snippet | Устаревшая. Любое непустое значение включает пересчёт цены при выборке товаров. Само значение не используется | |
ms3_weight_snippet | Устаревшая. То же для веса | |
ms3_currency_symbol | ₽ | Символ валюты (₽, $, €, £, ₴, ¥, ₸) |
ms3_currency_position | after | Позиция символа: before ($ 100) или after (100 ₽) |
ms3_weight_unit | kg | Единица измерения веса (например kg, г, lbs, oz). Используется в *_formatted плейсхолдерах |
Корзина
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_cart_context | false | Использовать единую корзину для всех контекстов |
ms3_cart_max_count | 1000 | Максимальное количество товаров в корзине |
ms3_cart_page_id | 0 | ID страницы корзины. Ссылка «Перейти в корзину» в блоке корзины и переадресация из JS |
ms3_order_page_id | 0 | ID страницы оформления. Ссылка «Оформить заказ» из корзины |
Заказы
Общие настройки
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_order_format_num | ym | Формат нумерации заказов (формат date()) |
ms3_order_format_num_separator | / | Разделитель в номере заказа |
ms3_date_format | d.m.y H:M | Формат дат в админке |
ms3_order_user_groups | Группы для регистрации покупателей (через запятую) | |
ms3_order_show_drafts | false | Показывать черновики в списке заказов в админке |
ms3_order_redirect_thanks_id | 1 | ID страницы «Спасибо за заказ» |
ms3_order_success_page_id | 0 | ID страницы успешной оплаты |
ms3_order_register_user_on_submit | false | Создавать modUser при оформлении заказа |
ms3_email_manager | Email-адреса менеджеров для уведомлений (через запятую) | |
ms3_delete_drafts_after | Удалять старые черновики (формат strtotime: -1 year, -2 weeks) | |
ms3_order_log_actions | status,products,field,address | Логируемые действия с заказом |
ms3_payment_on_failed_status | 0 | ID статуса заказа при неуспешной или отменённой оплате. 0 — не менять статус |
ms3_payment_on_refunded_status | 5 | ID статуса заказа при полном возврате. 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_draft | 1 | ID статуса «Черновик» |
ms3_status_new | 2 | ID статуса нового заказа после оформления |
ms3_status_paid | 3 | ID статуса оплаченного заказа |
ms3_status_sent | 4 | ID статуса «Отправлен». В него переводит отгрузка, когда получает состояние «отправлено» |
ms3_status_canceled | 5 | ID статуса отменённого заказа |
ms3_status_for_stat | 2,3 | ID статусов для статистики выполненных заказов |
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_enabled | false | Учитывать остатки при оформлении заказа |
Пока настройка выключена, корзина и оформление работают без оглядки на остатки. После включения остаток резервируется при переходе в статус «Новый», списывается на «Оплачен» и возвращается на «Отменён», если заказ ещё не был оплачен.
Перед включением заполните остатки
Пустой остаток (NULL в поле stock) читается как ноль, а списание идёт по условию «остаток не меньше требуемого». Включение учёта на незаполненном складе сделает все такие товары недоступными для заказа.
Остаток один на товар. Строки заказа с одним и тем же товаром, включая варианты с разными опциями, списываются с общего количества.
Отгрузки
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_shipment_enabled | false | Менять статус заказа вслед за состоянием отгрузки |
ms3_shipment_on_delivered_status | 0 | ID статуса заказа при состоянии «доставлено». 0 — не менять |
ms3_shipment_on_in_transit_status | 0 | ID статуса заказа при состоянии «в пути». 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_id | 0 | ID страницы входа |
ms3_customer_register_page_id | 0 | ID страницы регистрации |
ms3_customer_profile_page_id | 0 | ID страницы профиля |
ms3_customer_addresses_page_id | 0 | ID страницы адресов |
ms3_customer_orders_page_id | 0 | ID страницы истории заказов |
ms3_customer_redirect_after_login | 0 | ID страницы, куда перенаправить после входа (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_order | true | Автоматически регистрировать клиента при заказе |
ms3_customer_auto_login_on_order | true | Автоматически авторизовать после заказа |
ms3_customer_auto_login_after_register | true | Автоматически авторизовать после регистрации |
ms3_customer_require_email_verification | false | Требовать подтверждение email |
ms3_customer_send_welcome_email | true | Отправлять приветственное письмо |
ms3_customer_require_privacy_consent | true | Требовать согласие на обработку данных (GDPR) |
Отмена заказов
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_customer_cancel_allowed_statuses | 2,3 | ID статусов, при которых покупатель может отменить заказ (через запятую). По умолчанию: новый и оплаченный |
Настройка отмены заказов
Покупатель видит кнопку «Отменить заказ» только для заказов со статусом из этого списка. При отмене заказ переводится в статус ms3_status_canceled.
Чтобы запретить отмену заказов покупателями, укажите 0.
Пустое значение отмену не запрещает
Очистка настройки не выключает отмену, а возвращает список к статусам из ms3_status_new и ms3_status_paid — то есть к тем же «Новый» и «Оплачен». Покупатель по-прежнему сможет отменить оплаченный заказ.
Синхронизация с modUser
По умолчанию выключена: кабинет работает на msCustomer и токене MS3. Включайте синхронизацию, если нужны группы MODX, ACL или общие сессии с другими компонентами.
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_customer_sync_enabled | false | Включить синхронизацию msCustomer ↔ modUser |
ms3_customer_sync_create_moduser | false | Создавать modUser при регистрации msCustomer |
ms3_customer_sync_delete_with_user | false (не в transport) | Удалять msCustomer при удалении modUser. Ключ читается плагином minishop3.php, при необходимости создайте вручную |
ms3_customer_sync_user_group | 0 | ID группы для новых modUser |
ms3_customer_duplicate_fields | ["email", "phone"] | JSON-массив полей для проверки дубликатов |
Безопасность
Токены
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_customer_token_ttl | 86400 | Время жизни токена клиента (секунды, 24 часа) |
ms3_customer_api_token_ttl | 86400 | Время жизни API токена (секунды, 24 часа) |
ms3_password_reset_token_ttl | 3600 | Время жизни токена сброса пароля (секунды, 1 час) |
ms3_email_verification_token_ttl | 86400 | Время жизни токена верификации email (секунды, 24 часа) |
ms3_email_verification_url | Свой URL для письма подтверждения email. Если пусто — ссылка ведёт на Web API api.php?route=…/email/verify&token=…&html=1 | |
ms3_email_verification_success_url | URL, на который редиректит после успешного подтверждения email. Если пусто — возвращается на сайт с ?ms3_email_verified=1 | |
ms3_snippet_token_secret | (автогенерация) | Секретный ключ для токенов сниппетов |
ms3_snippet_cache_ttl | 3600 | Время кеширования параметров сниппетов (секунды) |
ms3_payment_secret | Секретный ключ для платёжных уведомлений | |
ms3_payment_link_statuses | (пусто → ms3_status_new) | CSV ID статусов, при которых PaymentLinkResolver отдаёт URL оплаты в письмах и msGetOrder |
Защита от брутфорса
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_customer_max_login_attempts | 5 | Максимум неудачных попыток входа |
ms3_customer_block_duration | 300 | Длительность блокировки (секунды, 5 минут) |
Требования к паролю
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_password_min_length | 8 | Минимальная длина пароля |
ms3_password_require_uppercase | false | Требовать заглавные буквы |
ms3_password_require_number | false | Требовать цифры |
ms3_password_require_special | false | Требовать спецсимволы |
API
Настройки Web API (api.php). Список методов — REST API.
ms3_cors_allowed_origins по умолчанию пусто: запросы принимаются только с того же домена. Значение * разрешает любой origin, но без передачи учётных данных; чтобы токен из cookie работал с другого домена, перечислите точные origin через запятую.
Ограничение частоты запросов действует на все /api/v1/*. На одном сервере хватает хранилища счётчиков file.
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_api_debug | false | Режим отладки API (расширенное логирование) |
ms3_cors_allowed_origins | - | Разрешённые origin для CORS: пусто = только свой домен, * = любой (без учётных данных), либо список через запятую |
ms3_rate_limit_max_attempts | 60 | Максимум запросов за период |
ms3_rate_limit_decay_seconds | 60 | Период лимита запросов (секунды) |
ms3_rate_limit_store | file | Хранилище счётчиков: file, redis, memcached |
ms3_rate_limit_storage_path | - | Каталог для file (пусто = системный temp) |
ms3_rate_limit_redis_dsn | - | DSN Redis (если задан, перекрывает host/port) |
ms3_rate_limit_redis_host | 127.0.0.1 | Хост Redis |
ms3_rate_limit_redis_port | 6379 | Порт Redis |
ms3_rate_limit_redis_password | - | Пароль Redis |
ms3_rate_limit_redis_database | 0 | Номер БД Redis |
ms3_rate_limit_memcached_servers | 127.0.0.1:11211 | Список серверов Memcached |
ms3_web_catalog_respect_resource_groups | true | Скрывать из каталога товары и категории, закрытые группами ресурсов 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.:
{"title": "tv.seo_title", "robots": "tv.robots"}Применяется к карточке товара и категории, а в списках и дереве — при include_seo=1.
Неверный JSON игнорируется молча
Ошибка в формате не вызывает сообщения: настройка просто не применяется, и SEO-блок возвращает значения по умолчанию. Если подмена не сработала, первым делом проверьте JSON.
Фронтенд
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_token_name | ms3_token | Имя токена для идентификации посетителя |
ms3_register_global_config | true | Регистрировать ms3Config в DOM |
ms3_frontend_assets | JSON-массив | Подключаемые на фронтенде 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_fields | pagetitle,parent,price,article | Поля для импорта |
ms3_utility_import_fields_delimiter | ; | Разделитель колонок CSV |
ms3_import_sync_limit | 300 | Лимит синхронного импорта (строк) |
ms3_import_preview_rows | 5 | Строк для предпросмотра |
ms3_import_upload_path | assets/import/ | Путь для загрузки файлов импорта |
Уведомления
Email
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_email_manager | Email-адреса менеджеров для уведомлений (через запятую) |
Telegram
| Настройка | По умолчанию | Описание |
|---|---|---|
ms3_telegram_bot_token | Токен Telegram бота (получить у @BotFather) | |
ms3_telegram_manager | CSV chat ID менеджеров для уведомлений о смене статуса. OrderStatusService читает его параллельно с Утилиты → Уведомления |
Настройка Telegram бота
- Создайте бота через @BotFather и получите токен
- Укажите токен в
ms3_telegram_bot_token - Получателей задайте одним из способов:
- Утилиты → Уведомления — канал Telegram,
recipient_value= chat ID (рекомендуется с 1.11+) ms3_telegram_manager— CSV chat ID для прежней рассылки при смене статуса
- Утилиты → Уведомления — канал Telegram,
Chat ID можно узнать через @userinfobot.
Примеры использования
Получение настройки в PHP
$priceFormat = $modx->getOption('ms3_price_format');
$currencySymbol = $modx->getOption('ms3_currency_symbol');Получение настройки в Fenom
{* Символ валюты *}
{'ms3_currency_symbol' | option}
{* ID страницы профиля клиента *}
{'ms3_customer_profile_page_id' | option}Формат цены
ms3_price_format принимает JSON-массив из трёх значений — знаки после запятой, разделитель дробной части, разделитель тысяч:
[2, ".", " "]Результат: 1 234.56
Изменение цены и веса
Цену и вес товара меняют плагины на событиях msOnGetProductPrice и msOnGetProductWeight. Плагин достаточно повесить на событие — ничего включать в настройках не нужно.
<?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;Параметры событий и порядок их вызова — в разделе События товара.
