Как показать один ресурс в разных пунктах меню с одним и тем же URL?
Приветствую.
Есть MODX REVO, есть структура меню (общая схема):
При открытии ресурса Х вид меню такой:
При переходе в раздел 2 меню имеет такой вид:
Хочу сделать так, чтобы ресурс Х был доступен в меню раздела 2, и при нажатии на него пункт меню становился активным именно в разделе 2, т. е. не менял свой вид, раздел 2 был бы раскрытым.
Как я понял, это достигается использованием типом ресурса «символической ссылки». Но есть одна маленькая проблемка — URL другой у созданной символической. Как сделать такой же URL и оставить поведение символической ссылки?
Есть MODX REVO, есть структура меню (общая схема):
раздел 1
ресурс 3
ресурс Х (оформленный ресурс, url=/cat_1/res_х/)
ресурс 5
раздел 2
ресурс 6
показать здесь ресурс Х
ресурс 7
При открытии ресурса Х вид меню такой:
раздел 1
ресурс 3
ресурс Х <
ресурс 5
раздел 2
При переходе в раздел 2 меню имеет такой вид:
раздел 1
раздел 2
ресурс 6
показать здесь ресурс Х
ресурс 7
Хочу сделать так, чтобы ресурс Х был доступен в меню раздела 2, и при нажатии на него пункт меню становился активным именно в разделе 2, т. е. не менял свой вид, раздел 2 был бы раскрытым.
Как я понял, это достигается использованием типом ресурса «символической ссылки». Но есть одна маленькая проблемка — URL другой у созданной символической. Как сделать такой же URL и оставить поведение символической ссылки?
Комментарии: 18
Создай в разделе 2 ресурс-ссылку на ресурс Х
И тогда будет переадресоввывать в раздел 1 из раздела 2.
Ты хочешь оставить такой же url, но при этом чтобы не было переадрессации в раздел 1, это вообще как? Либо ты делаешь ссылку на ресурс Х из раздела 1 и тогда у тебя по одному урлу будет доступен 1 ресурс, либо ты создаёшь символическую ссылку на ресурс Х из раздела 1, но тогда у тебя будет два урла, но один ресурс, что плохо для сео.
Ты хочешь оставить такой же url, но при этом чтобы не было переадрессации в раздел 1Да, именно так. Чтобы не было дубля страницы и ее не пришлось бы закрывать от индексации.
что плохо для сеоИменно так.
Если представить себе эту схему, то есть варианты:
1. Простой запрос URL, к примеру, вводом в адресную строку браузера — открывается страница, вложенная в первый раздел.
2. Запрос URL из второго раздела — открывается во втором разделе.
Т. е. что-то типа приоритезации открытия URL: по умолчанию — в первом разделе, а если из второго раздела — во втором. Давно об этом думал, но толком ничего не придумал. Возможно, это как-то можно обработать программно… Не то что можно, это наверняка возможно, но как… может быть, передачей каких-то дополнительных пареметров в URL через Javascript…
URL — это адрес ресурса в сети Интернет. У тебя есть URL domain.ru/section-1/resource-x. Ты хочешь чтобы у тебя был URL domain.ru/section-2/resource-x и чтобы при этом это не считалось дублем и не переадресовывало в Раздел 1. Так сделать нельзя.
Наверное, плохо объяснил. Попробую еще раз.
Страница одна с одним и тем же адресом, да.
Представьте, вбиваете вы в адресную строку site.com/page_x. Вы попадаете на сайт в раздел первый (см. пример в вопросе). Тут, вроде, все штатно, понятно.
Теперь второй вариант. Изучаете сайт, зашли в раздел №2 (см. пример в вопросе). Нажимаете в этом разделе на ссылку site.com/page_x и открывается эта страница. Но при этом меню раздела №2 остается активным, вы не переходите в раздел первый — остаетесь во втором.
Получается так, что фактически страница одна в двух вариантах. На озоне, к примеру, есть такая реализация: один товар в нескольких категориях одновременно находится по одному и тому же адресу, но при этом в меню навигации по категориям мы «не прыгаем» между категориями. Как это у них реализовано — я не знаю. Встречал такаое и на других сайтах. И вот такая реализация меня и интересует. Но как — вопрос!
Страница одна с одним и тем же адресом, да.
Представьте, вбиваете вы в адресную строку site.com/page_x. Вы попадаете на сайт в раздел первый (см. пример в вопросе). Тут, вроде, все штатно, понятно.
Теперь второй вариант. Изучаете сайт, зашли в раздел №2 (см. пример в вопросе). Нажимаете в этом разделе на ссылку site.com/page_x и открывается эта страница. Но при этом меню раздела №2 остается активным, вы не переходите в раздел первый — остаетесь во втором.
Получается так, что фактически страница одна в двух вариантах. На озоне, к примеру, есть такая реализация: один товар в нескольких категориях одновременно находится по одному и тому же адресу, но при этом в меню навигации по категориям мы «не прыгаем» между категориями. Как это у них реализовано — я не знаю. Встречал такаое и на других сайтах. И вот такая реализация меня и интересует. Но как — вопрос!
При открытии раздела записывай его id в сессию в какую-нибудь переменную, а при выводе меню проверяй, какой id в этой переменной лежит такой раздел и делай активным.
Воть примерно это и пытаюсь выяснить. Это же где-то что-то надо модифицировать… PDOMenu там или что-то еще. Ведь он же перехватит управление, полагаю. Может быть вы или кто-то сталкивался с таким и есть более или менее готовое решение. Просто перелопачивать этот компонент меню, сам MODX — это мне с моими знаниями его работы недоступно.
Сниппет напиши, который запишет id в сессию и вызови его до pdoMenu. Сам pdoMenu вызывай некэшированным. А проверку просто в чанк добавь и не надо ничего переделывать.
сложнА. зачем сессию теребить? )))
А как он поймёт из какого раздела пользователь попал в Ресурс Х? Как я понял, суть проблемы не в формировании ссылки, а в том, чтобы возвращать пользователя в тот раздел из которого он пришёл в Ресурс Х, при том, что этот ресурс физически есть только в Разделе 1, а отображается в Разделе 1 и в Разделе 2.
а, если возвращать, его надо, то да, можно и потеребить )))
А можно чуть подробнее? А то не очень понятно.
Так и делайте — создаете символическую ссылку как вы и говорите,
а потом в шаблоне проверяете тип ресурса символической и берите id в поле content и генерите сами нужный url он, как раз будет таким как нужно.
Если не хотите грузить pdoMenu полем content, можно придумать другое поле для «сбора» ID ресурса.
и никаких сниппетов и прочее.
а потом в шаблоне проверяете тип ресурса символической и берите id в поле content и генерите сами нужный url он, как раз будет таким как нужно.
Если не хотите грузить pdoMenu полем content, можно придумать другое поле для «сбора» ID ресурса.
и никаких сниппетов и прочее.
Берите компонент plCustomMenu и стройте любую структур меню, не зависимо от структуры ресурсов
Проверил. Как-то оно не так работает: всегда либо раскрытые все вложенные пункты меню во всех ветках, либо закрытые.
Это уже зависит от ваших скриптов и стилей на фронте
Я имел в виду, что оно отлично работает от PDOMenu в контексте использования параметра hideSubMenus. Т. е. если hideSubMenus = 0, то все пункты меню всего меню раскрыты и их можно заделать стилями, в этом нет проблемы. Но когда hideSubMenus = 1, то PDOMenu в этом случае показывает только активную ветку меню, скрывая остальные, а plCustomMenu скрывает вообще все ветки, оставляя только первый уровень. Просто не хотелось бы выводить все огромное меню разом.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.