Задача: создание контекстов на поддоменах.
Должно получиться например так: 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
Вывод контекстов с помощью fenom
{ 'pdoResources' | snippet : [
'class' => 'modContext',
'return' => 'data',
'parents' => '0',
'sortby' => 'rank',
'where' => '{ "key:!=":"mgr"} ',
] | print_r}