Александр Марков
29 сент. 2015 г., 11:47

Проблема при переключении контекста

Добрый день Делаю сайт для одной конторы и ее филиалов. Сайты филиалов сидят на поддоменах и отличаются от основного сайта несколькими страничками. Настроил контенты, сделал плагин для их переключения. При заходе на сайт филиала (например, kz.daigo.ru) все странички отображаются как надо, берутся из нужного места, но есть проблема — ссылки генерируются на основной сайт. Пробовал и [[~id]], и {link id="..."} — результат один. Посмотрел в исходном html загруженной страницы — там абсолютные ссылки.
<a href="https://daigo.ru/dostavka-i-oplata">Доставка и оплата</a>
Так как большинство документов лежат в контексте web, то, как я понимаю, его настройки и используются при генерации url.
Можно ли как-то настроить, чтобы при использовании [[~id]] выдавались относительные ссылки? Или как-то сделать так, чтобы при генерации url использовался текущий контекст, а не тот, в котором лежат документы?
Добрый день! Попробуйте сделать символические ссылки из ресурса одного контекста на другой (вкладка «настройка» в панели редактирования ресурсов и тип документа — сим.ссылка).
У меня основной сайт содержит несколько сотен страниц (пока), а сайты филиалов должны отличатся только страничкой новостей, контактов, и еще несколькими. И этот вариант не подходит.
Конечно, я могу залезть в makeURL, но не хочется этого делать. Надеюсь, есть какой-то более правильный путь.
А как Вы формируете ссылки в контекстах филиалов? Можете пример вызова показать?
[[~82]]
Как я уже говорил, большинство страниц одни и те же для всех сайтов. И поэтому должен использоваться один и тот же механизм.
есть настройка link_tag_scheme. Значение "-1" задает относительный путь от base_url.
так и стоит. Но дело в том, что большинство документов в другом контексте. Я подозреваю, что из-за этого MODX генерирует абсолютный адрес. Только пока не могу найти, где :( Так-то я готов уже в ядро залезть, раз по другому никак :)
Саш, не надо в ядро лезть. Утопия это.
Со ссылками эти действительно проблема (которые в других контекстах находятся), и пути генерирует не совсем сам MODx (имею ввиду именно класс MODx), а modContext. В итоге, чтобы влезть в эту логику, я раньше использовал собственный класс парсера ShopmodxParser. В последних версиях пакета я его исключил за ненадобностью, но в прошлых коммитах откопать можно. Смотри, там собственный класс линк-тега ShopmodxLinkTag, и он вызывается как раз на обработку линков. К сожалению, modParser написан далеко не идеально, и расширять его крайне не удобно. То есть чтобы вот просто логику обработку тегов изменить, приходится полпарсера копипастить.
Как подключить свой парсер, смотри метод MODx::getParser(). Просто указываешь системную настройку parser_class и все. В нашем случае это classes.ShopmodxParser
Спасибо Коля! буду разбираться
Все заработало, только пришлось закомментировать условие:
class ShopmodxLinkTag extends modLinkTag{ public function process($properties= null, $content= null) { parent :: process($properties, $content); // if (!$this->_processed) { if (is_numeric($this->_content)) { $this->_output = $this->modx->shopModx->makeUrl($this->_content); } if (!empty($this->_output)) { $this->filterOutput(); $this->cache(); $this->_processed= true; } // } /* finally, return the processed element content */ return $this->_output; } }
Иначе парсер не отрабатывал как надо
Ну таки да, это же под другую задачу было, то есть подправить под себя надо.

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