Налаштування контекстів MODX для мультисайтовості
Контексти MODX дозволяють керувати кількома сайтами з однієї установки або розділити сайт за мовами, поддоменами, протоколами. Кожен контекст має свої налаштування, кореневі ресурси та ключі для перемикання.
Сценарії використання контекстів
Мультисайтовість: ru.company.com та en.company.com — два контексти з різними кореневими ресурсами.
Мультиязичність: один домен, різні URL-префікси /ru/ та /en/.
Мобільна версія: m.company.com — окремий контекст зі спрощеними шаблонами.
Admin vs Public: контекст mgr (вбудований) — менеджер. Контекст web — публічний сайт.
Створення нового контексту
Система → Контексти → Створити → ключ en (тільки латиниця, стислий).
Після створення налаштуйте параметри контексту:
Ключ: en
Ім'я: English Version
Налаштування (Settings):
base_url: /en/
site_url: https://yourdomain.com/en/
site_start: 55 (ID кореневого ресурсу для англійської версії)
error_page: 56 (ID сторінки 404 для цього контексту)
default_template: 3 (шаблон за замовчуванням)
cultureKey: en
locale: en_US.UTF-8
Плагін для перемикання контекстів
// Плагін: ContextSwitcher
// Подія: OnHandleRequest
$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
// За доменом
$contextMap = [
'ru.company.com' => 'ru',
'en.company.com' => 'en',
'by.company.com' => 'by',
];
if (isset($contextMap[$host])) {
$contextKey = $contextMap[$host];
if ($modx->context->key !== $contextKey) {
$modx->switchContext($contextKey);
}
return;
}
// За URL-префіксом (один домен)
$prefixMap = ['/ru/' => 'ru', '/en/' => 'en', '/uk/' => 'uk'];
foreach ($prefixMap as $prefix => $contextKey) {
if (strpos($uri, $prefix) === 0) {
if ($modx->context->key !== $contextKey) {
$modx->switchContext($contextKey);
}
return;
}
}
Конфігурація Nginx для поддоменів
server {
listen 443 ssl http2;
server_name ru.company.com en.company.com by.company.com;
root /var/www/company.com;
# Один MODX, різні контексти за хостом
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_HOST $host; # передамо хост у PHP
include fastcgi_params;
}
}
Ресурси у контексті
Кожен ресурс створюється в певному контексті. При створенні ресурсу: вкладка «Налаштування документа» → Контекст → вибрати потрібний.
// Програмне створення ресурсу в конкретному контексті
$resource = $modx->newObject('modDocument');
$resource->set('pagetitle', 'About Us');
$resource->set('alias', 'about-us');
$resource->set('context_key', 'en'); // прив'язка до контексту
$resource->set('template', 3);
$resource->set('parent', 55); // кореневий ресурс контексту
$resource->save();
Крос-контекстні посилання
[[- Посилання на ресурс в іншому контексті ]]
[[~42? &context=`en`]]
[[- Перемикач мов у чанку ]]
[[- (через сніпет LangSwitch або вручну) ]]
Синхронізація налаштувань між контекстами
Системні налаштування MODX мають пріоритети: Global > Context > Namespace. Контекстні налаштування переопределяють глобальні для конкретного контексту.
// Отримати налаштування з урахуванням поточного контексту
$siteUrl = $modx->getOption('site_url'); // повернеме налаштування поточного контексту
Терміни
Налаштування двох контекстів (ru/en) з мультиязичною структурою ресурсів і перемикачем мов — 2–3 дні.







