Задача: создание контекстов на поддоменах.
Должно получиться например так: spb.domain.ru и msk.domain.ru
Создаем плагин, который при переходе на главную страница будет переключать контекст, название для плагина указываем любое:
включаем события OnHandleRequest
код плагина:
// Работаем только на фронтенде
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') { return;}
// Определяем запрашиваемый хост
$host = $_SERVER['HTTP_HOST'];
// Выбираем контекст с настройкой base_url
$q = $modx->newQuery('modContextSetting', array('key' => 'http_host', 'value' => $host));
$q->select('context_key');
if ($q->prepare() && $q->stmt->execute()) {
// Получаем ключ контекста
if ($context = $q->stmt->fetch(PDO::FETCH_COLUMN)) {
// Web инициализируется в index.php - на него переключаться не нужно
if ($context != 'web') {
$modx->switchContext($context);
}
}
}
Нужно разрешить переключение между контекстами:
Настройки -> Системные настройки -> ключ allow_forward_across_contexts устанавливаем значение - ДА
Создаем контексты:
Настройки -> Контексты -> Создать новый
Ключ -> spb
Имя -> Санкт-Петербург
Редактировать (правой кнопкой на нужный контекст) -> Настройки контекста -> Создать новый
Создаем необходимые настройки, указываем ключ и значение:
base_url -> /
http_host -> domain.ru
site_name -> Россия
site_start -> 23
site_url -> http://domain.ru/
Должно получиться как то так:
Настройка сервера:
Придется либо создавать каждый домен отдельно и прописывать путь до основного сайта, либо настроить редиректы для всех поддоменов на основной сайт, всё зависит от хостинга. Так же можно настроить редиректы через алиасы сервера.
У каждого поддомена будет создаваться собственная сессия, если требуется объединить сессии всех поддоменов - то укажите это в системной настройке session_cookie_domain