Tramp1357 29 сентября 2015 1 1
Добрый день
Делаю сайт для одной конторы и ее филиалов. Сайты филиалов сидят на поддоменах и отличаются от основного сайта несколькими страничками.
Настроил контенты, сделал плагин для их переключения. При заходе на сайт филиала (например, kz.daigo.ru) все странички отображаются как надо, берутся из нужного места, но есть проблема — ссылки генерируются на основной сайт.
Пробовал и [[~id]], и {link id="..."} — результат один. Посмотрел в исходном html загруженной страницы — там абсолютные ссылки.
<a href="https://daigo.ru/dostavka-i-oplata">Доставка и оплата</a>

Так как большинство документов лежат в контексте web, то, как я понимаю, его настройки и используются при генерации url.

Можно ли как-то настроить, чтобы при использовании [[~id]] выдавались относительные ссылки?
Или как-то сделать так, чтобы при генерации url использовался текущий контекст, а не тот, в котором лежат документы?
1 комментарий
С
Сергей Зиненко 29 сентября 2015г в 15:00 #
Добрый день!
Попробуйте сделать символические ссылки из ресурса одного контекста на другой (вкладка «настройка» в панели редактирования ресурсов и тип документа — сим.ссылка).
Tramp13571
Tramp1357 29 сентября 2015г в 15:10 #
У меня основной сайт содержит несколько сотен страниц (пока), а сайты филиалов должны отличатся только страничкой новостей, контактов, и еще несколькими. И этот вариант не подходит.

Конечно, я могу залезть в makeURL, но не хочется этого делать. Надеюсь, есть какой-то более правильный путь.
С
Сергей Зиненко 29 сентября 2015г в 15:30 #
А как Вы формируете ссылки в контекстах филиалов? Можете пример вызова показать?
Tramp13571
Tramp1357 29 сентября 2015г в 15:40 #
[[~82]]

Как я уже говорил, большинство страниц одни и те же для всех сайтов. И поэтому должен использоваться один и тот же механизм.
a
and87s 29 сентября 2015г в 23:35 #
есть настройка link_tag_scheme. Значение "-1" задает относительный путь от base_url.
a
and87s 29 сентября 2015г в 23:36 #
от site_url
Tramp13571
Tramp1357 30 сентября 2015г в 01:05 #
так и стоит. Но дело в том, что большинство документов в другом контексте. Я подозреваю, что из-за этого MODX генерирует абсолютный адрес. Только пока не могу найти, где :(
Так-то я готов уже в ядро залезть, раз по другому никак :)
Fi1osof1
Fi1osof 30 сентября 2015г в 09:44 #
Саш, не надо в ядро лезть. Утопия это.

Со ссылками эти действительно проблема (которые в других контекстах находятся), и пути генерирует не совсем сам MODx (имею ввиду именно класс MODx), а modContext. В итоге, чтобы влезть в эту логику, я раньше использовал собственный класс парсера ShopmodxParser. В последних версиях пакета я его исключил за ненадобностью, но в прошлых коммитах откопать можно. Смотри, там собственный класс линк-тега ShopmodxLinkTag, и он вызывается как раз на обработку линков. К сожалению, modParser написан далеко не идеально, и расширять его крайне не удобно. То есть чтобы вот просто логику обработку тегов изменить, приходится полпарсера копипастить.

Как подключить свой парсер, смотри метод MODx::getParser(). Просто указываешь системную настройку parser_class и все. В нашем случае это classes.ShopmodxParser
Tramp13571
Tramp1357 30 сентября 2015г в 10:02 #
Спасибо Коля! буду разбираться
Fi1osof1
Fi1osof 30 сентября 2015г в 10:12 #
Пожалуйста!
Tramp13571
Tramp1357 30 сентября 2015г в 15:55 #
Все заработало, только пришлось закомментировать условие:
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;
    }    
    
}

Иначе парсер не отрабатывал как надо
Fi1osof1
Fi1osof 30 сентября 2015г в 15:56 #
Ну таки да, это же под другую задачу было, то есть подправить под себя надо.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.