Налаштування контекстів 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 дні.