Настройка контекстов MODX для мультисайтовости

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка контекстов MODX для мультисайтовости
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка контекстов 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 дня.