Частично мультидоменный сайт

Добрый день. Прошу о подсказке — может, сталкивался кто? Думаю, тема интересна не только мне.

Требуется сделать сайт, доступный по нескольким адресам — к примеру, site.ru, sd1.site.ru, sd2.site.ru т.е. есть основной сайт организации и сайты ее дилеров. Причем фактически нужен один сайт, у которого некоторые странички (контакты, новости и т.п.) должны отличаться на разных поддоменах. Создал дополнительные контексты, настроил переключатель контекстов. Так как в дочерних сайтах нужны только некоторые документы, на событие onPageNotFound повесил плагин, чтобы остальные подгружать из основного контекста (web), заменив условие поиска:

$modx->resource = $modx->getObject('modResource', ['uri'=>$q]);

Вроде все работает, но проблема в том, что формирование ссылок происходит только в контексте того документа, который выводится. Например, в меню ссылка на контакты ВСЕГДА указывает на контакты из контекста web.

Может, кто подскажет, как решить эту задачу? Возможно, я не в ту сторону вообще смотрю? Спасибо.

Comments

Например, в меню ссылка на контакты ВСЕГДА указывает на контакты из контекста web.

Это особенность метода modx−>makeUr().Попробуйвконсолиневконтекстеwebвыполнитьprintmodx->makeUr(). Попробуй в консоли не в контексте web выполнить print modx->makeUrl(id),гдеid), где id — id документа из контекста web и не равен 1. Получишь что-то типа такого:

[2015-08-26 19:31:30] (WARN @ /manager/components/console/connectors/console.php)
`5` was requested but no alias was located.
http://*********/news/

Это же будет в случае вывода тегов [[~id]], использования сниппета Wayfinder и т.п. По этой причине я в таких случаях использовал menu-процессор и выводил $object->uri.

Привет, Коля! У меня так и сделано. Я только процессорами и пользуюсь. Структура примерно такая:

контекст web (хост site.ru) id=1 Главная (uri= / ) id=2 Каталог (uri= /catalog ) id=2 Контакты (uri= /contacts ) … контекст sd (хост sd.site.ru) id=47 Контакты (uri= /contacts1) — modx не дает создать

При обращении по адресу sd.site.ru я переключаю контекст на 'sd', в котором нет странички с таким uri, генерируется onPageNotFound — и там я использовал твой код, как указал выше. MODX находит эту страничку, выводит ее. Но при генерации меню контекст используется web (только в нем есть все документы), и getmenu собирает ссылки из этого контекста. Вот я и ломаю голову — как что где допилить :)

modx не дает создать два одинаковых alias

С этим разобрался, надо в настройках отключить проверку дублирования во всех контентах.

А с генерацией ссылок — засада. Была идея — передавать в процессор ключ приоритетного контекста и при формировании списка проверять, нет ли в том контексте такого документа… Но че-то мне кажется, слишком криво и неповоротливо это будет

А где у тебя инициализация контекста sd? В index.php или на уровне плагина какого-нибудь? Пришли мне доступ к админке на почту.

Вопрос разрешился довольно просто: достаточно просто отключить в системных настройках отслеживание дублирования uri в разных контентах и замещающим страницам давать одинаковые алиасы (ну и uri соответственно).