Мультидоменность контекстами

В сообществе часто проскакивают вопросы про мультидоменность на одной копии MODX. А у меня, как раз, сайты демо версий компонентов реализованы таким образом. Думаю, информация будет полезной!
На самом деле, сделать это контекстами достаточно просто. Буквально в три шага.
Шаг 1
Создаем плагин switchContextDomain на событие OnMODXInit:if ($modx->event->name != 'OnMODXInit' || $modx->context->key == 'mgr') {
return;
}
if ($host = str_replace('www.', '', $_SERVER['HTTP_HOST'] ?: $_SERVER['SERVER_NAME'])) {
// Выбираем контексты с настройкой http_host
$q = $modx->newQuery('modContextSetting', array('key' => 'http_host', 'value:!=' => ''));
$q->select('context_key as ctx, value as host');
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
// Учитываем наш запрос в БД
$modx->queryTime += microtime(true) - $tstart;
$modx->executedQueries++;
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
// Если нашли нужный контекст - переключаем на него
if ($row['host'] == $host) {
$modx->switchContext($row['ctx']);
break;
}
}
}
} Шаг 2
Назначаем контексту web настройки:http_host = domain1.ru
site_start = ID главного ресурса в текущем контексте
site_url = http://domain1.ru/ Шаг 3
Назначаем контексту domain2 настройки:http_host = domain2.ru
site_name = Название второго сайта
site_start = ID главного ресурса в текущем контексте
site_url = http://domain2.ru/ Итого
Как видите, все довольно просто, что называется, до безобразия!
Комментарии: 26
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
При мультидоменности в админку можно зайти по любому из доменов. И вот, если мы открыли сайт domain2.ru, зашли в его админку, что-то отредактировали и хотим перейти на сам сайт, выбираем «Содержимое» -> «Перейти на сайт».
В этом случае, если у контекста web есть настройка site_url, открывается сайт domain1.ru. Если же у контекста web настройки site_url нет, то мы перейдём на тот домен, по которому мы открыли админку.
Спасибо за информацию!
Раз уж тема про мультидоменность контекстами, можно вопрос задам.
Если у нас поддомены отвечают за города, типа:
moscow.site.ru, spb.site.ru,…
С помощью какого дополнения или скрипта можно реализовать автоматическое перенаправление на поддомен с нужным городом, с основного сайта site.ru.
Кто как реализовывал определение геолокации из браузера и перенаправление? Поделитесь опытом.
отвечает за то, чтобы вырезать из домена www и никаких алиасов вписывать не нужно.
1. Физически поддомен создавать не нужно?
2. Как быть с https, ведь бесплатные сертификаты типа LEt's Encrypt не обеспечивают безопастность поддомена, а значит, нужно создавать поддомен и к нему делать сертификат. А при наличии физически созщданного поддомена у меня просто отображает страницу поддомена, без работы плагина. Как тут выкрутиться?
Создал контекст web2, ввел настройки — работает.
Создал контекст web3, ввел для него настройки — Не работает.
При переходе по домену контекста — ошибка 503. страница недоступна.
Главная контекста — опубликована
Первое что пришло на ум, это создать настройку в контексте — номер счетчика, и подставлять его в коде метрики.