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

Требуется сделать сайт, доступный по нескольким адресам — к примеру, site.ru, sd1.site.ru, sd2.site.ru
т.е. есть основной сайт организации и сайты ее дилеров. Причем фактически нужен один сайт, у которого некоторые странички (контакты, новости и т.п.) должны отличаться на разных поддоменах.
Создал дополнительные контексты, настроил переключатель контекстов.
Так как в дочерних сайтах нужны только некоторые документы, на событие onPageNotFound повесил плагин, чтобы остальные подгружать из основного контекста (web), заменив условие поиска:
$modx->resource = $modx->getObject('modResource', ['uri'=>$q]);

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

Может, кто подскажет, как решить эту задачу? Возможно, я не в ту сторону вообще смотрю?
Спасибо.
0 комментариев
Fi1osof1
Fi1osof 26 августа 2015г в 18:35 #
Например, в меню ссылка на контакты ВСЕГДА указывает на контакты из контекста web.
Это особенность метода $modx->makeUr(). Попробуй в консоли не в контексте web выполнить print $modx->makeUrl($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.
Tramp13571
Tramp1357 26 августа 2015г в 18:53 #
Привет, Коля!
У меня так и сделано. я только процессорами и пользуюсь. Структура примерно такая:

контекст 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 собирает ссылки из этого контекста.

Вот я и ломаю голову — как что где допилить :)
Fi1osof1
Fi1osof 26 августа 2015г в 18:59 #
А где у тебя инициализация контекста sd? В index.php или на уровне плагина какого-нибудь? Пришли мне доступ к админке на почту.
Tramp13571
Tramp1357 26 августа 2015г в 18:54 #
modx не дает создать
modx не дает создать два одинаковых alias
Tramp13571
Tramp1357 26 августа 2015г в 18:58 #
modx не дает создать два одинаковых alias
С этим разобрался, надо в настройках отключить проверку дублирования во всех контентах.

А с генерацией ссылок — засада. Была идея — передавать в процессор ключ приоритетного контекста и при формировании списка проверять, нет ли в том контексте такого документа… Но че-то мне кажется, слишком криво и неповоротливо это будет
Tramp13571
Tramp1357 26 августа 2015г в 20:04 #
Вопрос разрешился довольно просто: достаточно просто отключить в системных настройках отслеживание дублирования uri в разных контентах и замещающим страницам давать одинаковые алиасы (ну и uri соответственно).
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.