Skip to content
  1. Extras
  2. MiniShop3
  3. System settings

System settings

All MiniShop3 system settings use the ms3_ prefix and live in the minishop3 namespace.

To view settings, go to System → System Settings and select the minishop3 namespace.

General settings

SettingDefaultDescription
ms3_services_config(not in transport)Optional system setting: path to ms3.services.php. If unset, ServiceRegistry looks for {core_path}config/ms3.services.php. The file returns [service_id => ClassName] and overrides default classes
ms3_services_addons_dir(not in transport)Optional system setting: folder with service registration fragments. Default {core_path}config/ms3.services.d/. *.php files load in alphabetical order after the main config
ms3_chunks_categoriesComma-separated category IDs for the chunk list
ms3_use_schedulerfalseUse Scheduler for background tasks

Product category

SettingDefaultDescription
ms3_template_category_defaultDefault template for new categories
ms3_category_show_nested_productstrueShow nested products from subcategories
ms3_category_show_optionsfalseShow product options in the category table
ms3_category_id_as_aliasfalseUse category ID as URL alias
ms3_category_content_default(not in transport)Default content for new categories (snippet call). Read by the category panel JS on create. Add the key manually if you need auto-filled content
ms3_category_products_default_rows20 (code fallback)Rows per page in the category product table. Not in transport, but category/update reads it via getOption(..., 20)
mgr_tree_icon_mscategoryicon icon-barcodeCSS class for the category icon in the resource tree

Product

Main fields

SettingDefaultDescription
ms3_template_product_defaultDefault template for new products
ms3_product_main_fieldspagetitle,longtitle,description,introtext,contentMain fields on the product panel
ms3_product_extra_fieldsprice,old_price,article,weight,color,size,vendor_id,made_in,tags,new,popular,favoriteExtra product fields
ms3_product_show_in_tree_defaultfalseShow new products in the resource tree
ms3_product_id_as_aliasfalseUse product ID as URL alias
ms3_product_remember_tabstrueRemember the active product panel tab
mgr_tree_icon_msproducticon icon-tagCSS class for the product icon in the resource tree

Product tabs

SettingDefaultDescription
ms3_product_tab_extratrueShow the product properties tab
ms3_product_tab_gallerytrueShow the gallery tab
ms3_product_tab_linkstrueShow the product links tab
ms3_product_tab_optionstrueShow the options tab
ms3_product_tab_categoriestrueShow the categories tab
SettingDefaultDescription
ms3_product_source_default0Default media source ID for the gallery
ms3_product_thumbnail_default{assets_url}components/minishop3/img/mgr/ms3_small.pngPlaceholder image path
ms3_product_thumbnail_sizesmallDefault thumbnail size

Price and weight formatting

SettingDefaultDescription
ms3_price_format[2, ".", " "]Price format: [decimal places, decimal separator, thousands separator]
ms3_weight_format[3, ".", " "]Weight format: [decimal places, decimal separator, thousands separator]
ms3_price_format_no_zerostrueStrip trailing zeros in prices (15.00 → 15)
ms3_weight_format_no_zerostrueStrip trailing zeros in weight
ms3_price_snippetPrice modifier snippet name
ms3_weight_snippetWeight modifier snippet name
ms3_currency_symbolCurrency symbol (₽, $, €, £, ₴, ¥, ₸)
ms3_currency_positionafterSymbol position: before ($ 100) or after (100 ₽)
ms3_weight_unitkgWeight unit (e.g. kg, г, lbs, oz). Used in *_formatted placeholders

Cart

SettingDefaultDescription
ms3_cart_contextfalseUse a single cart across all contexts
ms3_cart_max_count1000Maximum number of items in the cart
ms3_cart_page_id0Cart page ID. Used for “Go to cart” in the mini cart and JS redirects
ms3_order_page_id0Checkout page ID. Used for the “Checkout” link from the cart

Orders

General settings

SettingDefaultDescription
ms3_order_format_numymOrder number format (date() format)
ms3_order_format_num_separator/Separator in the order number
ms3_date_formatd.m.y H:MDate format in the Manager
ms3_order_user_groupsGroups for customer registration (comma-separated)
ms3_order_show_draftsfalseShow drafts in the Manager order list
ms3_order_redirect_thanks_id1ID of the "Thank you for your order" page
ms3_order_success_page_id0ID of the successful payment page
ms3_order_register_user_on_submitfalseCreate modUser on checkout
ms3_email_managerManager email addresses for notifications (comma-separated)
ms3_delete_drafts_afterDelete old drafts (strtotime format: -1 year, -2 weeks)
ms3_order_log_actionsstatus,products,field,addressLogged order actions

Manager fields

Order, address, and product table fields

These used to be configured via ms3_order_grid_fields, ms3_order_address_fields, ms3_order_product_fields, and ms3_order_product_options. They are now managed in Utilities → Model fields (tables ms3_model_fields and ms3_model_field_sections, models msOrder / msOrderAddress) and Utilities → Grid settings (ms3_grid_fields). The system settings are no longer read and are removed from the documentation.

Order statuses

SettingDefaultDescription
ms3_status_draft1ID of the “Draft” status
ms3_status_new2ID of the new order status after submit
ms3_status_paid3ID of the paid order status
ms3_status_canceled5ID of the canceled order status
ms3_status_for_stat2,3Status IDs for completed order statistics

Statuses after install

The seed_order_statuses migration creates five rows in ms3_order_statuses (ids 1–5: draft, new, paid, sent, canceled) and updates ms3_status_new, ms3_status_paid, and ms3_status_canceled to match. If you changed or deleted statuses manually, verify ids under Settings → Statuses against these keys.

Customers

Account pages and registration behavior. Storefront: Login and registration.

login_page_id / register_page_id set URLs in links. Forms are rendered by default via msCustomer and unauthorizedTpl. The package has no separate “login only” chunks.

Customer account pages

SettingDefaultDescription
ms3_customer_login_page_id0Login page ID
ms3_customer_register_page_id0Registration page ID
ms3_customer_profile_page_id0Profile page ID
ms3_customer_addresses_page_id0Addresses page ID
ms3_customer_orders_page_id0Order history page ID
ms3_customer_redirect_after_login0Page ID to redirect to after login (0 = stay)

Authentication and registration

auto_register_on_order / auto_login_on_order: on submit a guest can become an msCustomer without the account form. Turn them off if you create accounts only manually.

require_email_verification: email with a link to GET /api/v1/customer/email/verify. Until the email is confirmed, some account flows may require a resend.

SettingDefaultDescription
ms3_customer_auto_register_on_ordertrueAutomatically register the customer on checkout
ms3_customer_auto_login_on_ordertrueAutomatically log in after checkout
ms3_customer_auto_login_after_registertrueAutomatically log in after registration
ms3_customer_require_email_verificationfalseRequire email verification
ms3_customer_send_welcome_emailtrueSend welcome email
ms3_customer_require_privacy_consenttrueRequire data processing consent (GDPR)

Order cancellation

SettingDefaultDescription
ms3_customer_cancel_allowed_statuses2,3Status IDs where the customer can cancel an order (comma-separated). Default: new and paid

Order cancellation settings

The customer sees the "Cancel order" button only for orders with a status from this list. On cancel, the order moves to ms3_status_canceled.

To disable customer cancellation, leave this setting empty.

modUser sync

Off by default. The account runs on msCustomer and the MS3 token. Enable sync if you need MODX groups, ACL, or shared sessions with other components.

SettingDefaultDescription
ms3_customer_sync_enabledfalseEnable msCustomer ↔ modUser sync
ms3_customer_sync_create_moduserfalseCreate modUser when msCustomer registers
ms3_customer_sync_delete_with_userfalse (not in transport)Delete msCustomer when modUser is deleted. Read by the minishop3.php plugin; create the key manually if needed
ms3_customer_sync_user_group0Group ID for new modUser accounts
ms3_customer_duplicate_fields["email", "phone"]JSON array of fields for duplicate checks

Security

Tokens

SettingDefaultDescription
ms3_customer_token_ttl86400Customer token lifetime (seconds, 24 hours)
ms3_customer_api_token_ttl86400API token lifetime (seconds, 24 hours)
ms3_password_reset_token_ttl3600Password reset token lifetime (seconds, 1 hour)
ms3_email_verification_token_ttl86400Email verification token lifetime (seconds, 24 hours)
ms3_email_verification_urlCustom URL for the verification email. If empty, the link points to Web API api.php?route=…/email/verify&token=…&html=1
ms3_email_verification_success_urlURL to redirect to after successful email verification. If empty, returns to the site with ?ms3_email_verified=1
ms3_snippet_token_secret(auto-generated)Secret key for snippet tokens
ms3_snippet_cache_ttl3600Snippet parameter cache lifetime (seconds)
ms3_payment_secretSecret key for payment notifications
ms3_payment_link_statuses(empty → ms3_status_new)CSV status IDs for which PaymentLinkResolver returns the payment URL in emails and msGetOrder

Brute-force protection

SettingDefaultDescription
ms3_customer_max_login_attempts5Maximum failed login attempts
ms3_customer_block_duration300Block duration (seconds, 5 minutes)

Password requirements

SettingDefaultDescription
ms3_password_min_length8Minimum password length
ms3_password_require_uppercasefalseRequire uppercase letters
ms3_password_require_numberfalseRequire numbers
ms3_password_require_specialfalseRequire special characters

API

Web API (api.php): CORS, rate limit, debug. Endpoint map: REST API.

ms3_cors_allowed_origins: * or a comma-separated origin list. For a cookie token from another domain set exact origins, not *.

Rate limit applies to all /api/v1/*. Counter store: ms3_rate_limit_store = file | redis | memcached (if those keys exist in your build). On a single server file is enough.

SettingDefaultDescription
ms3_api_debugfalseAPI debug mode (extended logging)
ms3_cors_allowed_origins*Allowed CORS domains (comma-separated or *)
ms3_rate_limit_max_attempts60Maximum requests per period
ms3_rate_limit_decay_seconds60Rate limit period (seconds)
ms3_rate_limit_storefileCounter store: file, redis, memcached
ms3_rate_limit_storage_path-Directory for file (empty = system temp)
ms3_rate_limit_redis_dsn-Redis DSN (overrides host/port when set)
ms3_rate_limit_redis_host127.0.0.1Redis host
ms3_rate_limit_redis_port6379Redis port
ms3_rate_limit_redis_password-Redis password
ms3_rate_limit_redis_database0Redis DB index
ms3_rate_limit_memcached_servers-Memcached server list

Site (Frontend)

SettingDefaultDescription
ms3_token_namems3_tokenToken name for visitor identification
ms3_register_global_configtrueRegister ms3Config in the DOM
ms3_frontend_assetsJSON arrayStorefront CSS/JS list (hooks.js, CartAPI.js, CartUI.js, ms3.js, etc.)

order-addresses.js is not in the default list. Include it separately if checkout needs the saved-address UI.

Path placeholders

In ms3_frontend_assets, these placeholders are available:

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

Import

SettingDefaultDescription
ms3_utility_import_fieldspagetitle,parent,price,articleFields for import
ms3_utility_import_fields_delimiter;CSV column delimiter
ms3_import_sync_limit300Synchronous import limit (rows)
ms3_import_preview_rows5Preview row count
ms3_import_upload_pathassets/import/Upload path for import files

Notifications

Email

SettingDefaultDescription
ms3_email_managerManager email addresses for notifications (comma-separated)

Telegram

SettingDefaultDescription
ms3_telegram_bot_tokenTelegram bot token (get from @BotFather)
ms3_telegram_managerCSV manager chat IDs for status-change notifications. Read by OrderStatusService alongside Utilities → Notifications

Telegram bot setup

  1. Create a bot via @BotFather and get the token
  2. Set the token in ms3_telegram_bot_token
  3. Configure recipients either way:
    • Utilities → Notifications — Telegram channel, recipient_value = chat ID (recommended since 1.11+)
    • ms3_telegram_manager — CSV chat IDs for legacy status-change delivery

Get your chat ID from @userinfobot.

Usage examples

Getting a setting in PHP

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

Getting a setting in Fenom

fenom
{* Currency symbol *}
{'ms3_currency_symbol' | option}

{* Customer profile page ID *}
{'ms3_customer_profile_page_id' | option}

Price format

The ms3_price_format setting accepts a JSON array:

json
[2, ".", " "]
  • 2 — decimal places
  • "." — decimal separator
  • " " — thousands separator

Result: 1 234.56

Price modifier

Create a snippet for dynamic price changes:

php
<?php
// Snippet: myPriceModifier
// Parameters: $product (msProductData)

$price = $product->get('price');

// Apply 10% discount for a specific category
if ($product->get('parent') == 5) {
    $price = $price * 0.9;
}

return $price;

Set the snippet name in ms3_price_snippet:

myPriceModifier