Александр Марков
26 авг. 2015 г., 14:11

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

Добрый день. Прошу о подсказке — может, сталкивался кто? Думаю, тема интересна не только мне.
Требуется сделать сайт, доступный по нескольким адресам — к примеру, site.ru, sd1.site.ru, sd2.site.ru т.е. есть основной сайт организации и сайты ее дилеров. Причем фактически нужен один сайт, у которого некоторые странички (контакты, новости и т.п.) должны отличаться на разных поддоменах. Создал дополнительные контексты, настроил переключатель контекстов. Так как в дочерних сайтах нужны только некоторые документы, на событие onPageNotFound повесил плагин, чтобы остальные подгружать из основного контекста (web), заменив условие поиска:
$modx->resource = $modx->getObject('modResource', ['uri'=>$q]);
Вроде все работает, но проблема в том, что формирование ссылок происходит только в контексте того документа, который выводится. Например, в меню ссылка на контакты ВСЕГДА указывает на контакты из контекста web.
Может, кто подскажет, как решить эту задачу? Возможно, я не в ту сторону вообще смотрю? Спасибо.
Например, в меню ссылка на контакты ВСЕГДА указывает на контакты из контекста 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.
Привет, Коля! У меня так и сделано. я только процессорами и пользуюсь. Структура примерно такая:
контекст 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 не дает создать
modx не дает создать два одинаковых alias
modx не дает создать два одинаковых alias
С этим разобрался, надо в настройках отключить проверку дублирования во всех контентах.
А с генерацией ссылок — засада. Была идея — передавать в процессор ключ приоритетного контекста и при формировании списка проверять, нет ли в том контексте такого документа… Но че-то мне кажется, слишком криво и неповоротливо это будет
А где у тебя инициализация контекста sd? В index.php или на уровне плагина какого-нибудь? Пришли мне доступ к админке на почту.
Вопрос разрешился довольно просто: достаточно просто отключить в системных настройках отслеживание дублирования uri в разных контентах и замещающим страницам давать одинаковые алиасы (ну и uri соответственно).

Добавить комментарий