VirtualPage разные контексты (жесткая ссылка?)
Здравствуйте!
Дано:
2 контекста, web и en
Маршрут:
По ссылке: sitename.ru/en/item/55/ обработчик почему-то берет контекст `web`.
Пытался сделать иначе:
1. Маршрут:
То есть по ссылке sitename.ru/en/item/55/ берется контекст web
Каким образом возможно поменять контекст?
Быть может указав в маршруте жесткую ссылку?
Как-то так: //sitename.ru/item/{item_id:[0-9]+}/?
Однако, так не работает. Может быть я что-то упустил?
Дано:
2 контекста, web и en
Маршрут:
/item/{item_id:[0-9]+}/Обработчик: [[!$router?
&context=`[[*context_key]]`
&item_id=`[[+vp.item_id]]`
]]По ссылке: sitename.ru/item/55/ отрабатывает как положено.По ссылке: sitename.ru/en/item/55/ обработчик почему-то берет контекст `web`.
Пытался сделать иначе:
1. Маршрут:
/item/{item_id:[0-9]+}/1. Обработчик: [[!$router?
&context=`web`
&item_id=`[[+vp.item_id]]`
]]2. Маршрут:/en/item/{item_id:[0-9]+}/2. Обработчик: [[!$router?
&context=`en`
&item_id=`[[+vp.item_id]]`
]]Однако, в любом случае обрабатывается только первый маршрут. То есть по ссылке sitename.ru/en/item/55/ берется контекст web
Каким образом возможно поменять контекст?
Быть может указав в маршруте жесткую ссылку?
Как-то так: //sitename.ru/item/{item_id:[0-9]+}/?
Однако, так не работает. Может быть я что-то упустил?
Комментарии: 22
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
и что у вас в чанке router? И блин в чанкеее…
Конечно ничего не будет работать…
Похоже, что самый простой вариант, добавить маршрут:
/item/{item_id:[0-9]+}/en/
И привязать к обработчику:
Так — работает.
Правда ссылка будет:
sitename.ru/en/item/1267/en/
Хотя будет прекрасно работать и с:
sitename.ru/item/1267/en/ Только это ни к чему.
Впрочем, костыль готов. :)
и в обработчике
Допустим, ссылка:
sitename.ru/en/item/1267/
получаем ошибку 404 (у меня 503 т.к. не задал страницу в данном контексте)
Если добавим еще один /en/:
sitename.ru/en/en/item/1267/
То все работает.
Получается, что нужно что-то мудрить с base_url?
base_url для en = /en/
Согласно инструкции.
И каша в голове. Похоже, единственное что работает, это костыль. :\
Что у вас тут — wiki-router?
вам по сути надо всего то перегрузить контекст…
что то типа
Ищет предмет в базе по id.
Спасибо за код, я делал так:
Что по сути только меняло переменную, чтобы можно было вытащить английское название.
Теперь, благодаря вам, так:
Однако, по прежнему, VP не понимает ссылку:
sitename.ru/en/item/4/
В контексте /en/ работает только так:
sitename.ru/en/en/item/4/
1. Боюсь, что поменяв в настройках контекста site_url либо base_url, появятся проблемы с мультиязычностью.
2. Появляется еще одна проблема, VP не знает что контекст изменился, поэтому в меню генерируются ссылки вида:
sitename.ru/index.html
вместо:
sitename.ru/en/index.html
Меню собирается при помощи pdoMenu
Слышал, что Modx лучше работает на nginx
:facepalm:
[[*context_key]] ведь возвращается такой, в каком контексте расположена страница? Получается, что VirtualPage как виртуальный не может находиться где-либо, и берется значение прописанное в скриптах VirtualPage по умолчанию?
item_id — id строки игрового предмета из общей базы. Из которой я беру столбцы name_web, name_en и так далее, в зависимости от ключа контекста, и вывожу данные о предмете.
Судя по всему, в контексте en, по ссылке sitename.ru/en/item/123123/ vp анализирует только то, что находится после sitename.ru/en/. Это становится ясно, включая/выключая маршрут /item/{item_id:[0-9]+}/.
Когда последний отключен, modx выдает 404, когда включен, обработчик срабатывает.
Поэтому, создал свой ключ в каждом из контекстов, в котором прописано значение, которое нужно для корректной выборки из базы.
Маршрут остался первоначальным:
Обработчик тоже почти не изменился:
[[!mysnippet?
&context=`[[++myname]]`
&item_id=`[[+vp.item_id]]`
]]
Правда пришлось отключить кеширование.
Про настройки pdoMenu спасибо, надо поковырять.
Как и говорили выше.
Странно все это.
Ссылки внутри чанка сами собой с /en/, в то время как ссылки вне чанка без /en/.
Быть может нужно как-то отследить событие инициализации VP, что бы это событие можно было повесить на плагин мультиязычности?
И повесил ресурсы с каждого из контекстов на них обработчиками. Все работает.
\virtualpage\model\virtualpage\virtualpage.class.php
строка 361 заменить на
Тогда можно маршруты прописывать полным адресом, включая поддомены. Привязка будет жесткой