Как показать один ресурс в разных пунктах меню с одним и тем же 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 и оставить поведение символической ссылки?
weranda
11 августа 2024, 10:45
modx.pro
190
0

Комментарии: 18

Артур Шевченко
11 августа 2024, 18:05
0
Создай в разделе 2 ресурс-ссылку на ресурс Х
    weranda
    11 августа 2024, 18:06
    0
    И тогда будет переадресоввывать в раздел 1 из раздела 2.
      Артур Шевченко
      11 августа 2024, 19:12
      0
      Ты хочешь оставить такой же url, но при этом чтобы не было переадрессации в раздел 1, это вообще как? Либо ты делаешь ссылку на ресурс Х из раздела 1 и тогда у тебя по одному урлу будет доступен 1 ресурс, либо ты создаёшь символическую ссылку на ресурс Х из раздела 1, но тогда у тебя будет два урла, но один ресурс, что плохо для сео.
        weranda
        11 августа 2024, 20:23
        0
        Ты хочешь оставить такой же url, но при этом чтобы не было переадрессации в раздел 1
        Да, именно так. Чтобы не было дубля страницы и ее не пришлось бы закрывать от индексации.

        что плохо для сео
        Именно так.

        Если представить себе эту схему, то есть варианты:
        1. Простой запрос URL, к примеру, вводом в адресную строку браузера — открывается страница, вложенная в первый раздел.
        2. Запрос URL из второго раздела — открывается во втором разделе.

        Т. е. что-то типа приоритезации открытия URL: по умолчанию — в первом разделе, а если из второго раздела — во втором. Давно об этом думал, но толком ничего не придумал. Возможно, это как-то можно обработать программно… Не то что можно, это наверняка возможно, но как… может быть, передачей каких-то дополнительных пареметров в URL через Javascript…
          Артур Шевченко
          11 августа 2024, 20:45
          0
          URL — это адрес ресурса в сети Интернет. У тебя есть URL domain.ru/section-1/resource-x. Ты хочешь чтобы у тебя был URL domain.ru/section-2/resource-x и чтобы при этом это не считалось дублем и не переадресовывало в Раздел 1. Так сделать нельзя.
            weranda
            11 августа 2024, 20:53
            0
            Наверное, плохо объяснил. Попробую еще раз.

            Страница одна с одним и тем же адресом, да.

            Представьте, вбиваете вы в адресную строку site.com/page_x. Вы попадаете на сайт в раздел первый (см. пример в вопросе). Тут, вроде, все штатно, понятно.

            Теперь второй вариант. Изучаете сайт, зашли в раздел №2 (см. пример в вопросе). Нажимаете в этом разделе на ссылку site.com/page_x и открывается эта страница. Но при этом меню раздела №2 остается активным, вы не переходите в раздел первый — остаетесь во втором.

            Получается так, что фактически страница одна в двух вариантах. На озоне, к примеру, есть такая реализация: один товар в нескольких категориях одновременно находится по одному и тому же адресу, но при этом в меню навигации по категориям мы «не прыгаем» между категориями. Как это у них реализовано — я не знаю. Встречал такаое и на других сайтах. И вот такая реализация меня и интересует. Но как — вопрос!
              Артур Шевченко
              11 августа 2024, 21:00
              0
              При открытии раздела записывай его id в сессию в какую-нибудь переменную, а при выводе меню проверяй, какой id в этой переменной лежит такой раздел и делай активным.
                weranda
                11 августа 2024, 21:05
                0
                Воть примерно это и пытаюсь выяснить. Это же где-то что-то надо модифицировать… PDOMenu там или что-то еще. Ведь он же перехватит управление, полагаю. Может быть вы или кто-то сталкивался с таким и есть более или менее готовое решение. Просто перелопачивать этот компонент меню, сам MODX — это мне с моими знаниями его работы недоступно.
                  Артур Шевченко
                  11 августа 2024, 21:11
                  0
                  Сниппет напиши, который запишет id в сессию и вызови его до pdoMenu. Сам pdoMenu вызывай некэшированным. А проверку просто в чанк добавь и не надо ничего переделывать.
                    Алексей Смирнов
                    11 августа 2024, 22:57
                    0
                    сложнА. зачем сессию теребить? )))
                      Артур Шевченко
                      11 августа 2024, 23:06
                      0
                      А как он поймёт из какого раздела пользователь попал в Ресурс Х? Как я понял, суть проблемы не в формировании ссылки, а в том, чтобы возвращать пользователя в тот раздел из которого он пришёл в Ресурс Х, при том, что этот ресурс физически есть только в Разделе 1, а отображается в Разделе 1 и в Разделе 2.
                      Алексей Смирнов
                      11 августа 2024, 23:15
                      0
                      а, если возвращать, его надо, то да, можно и потеребить )))
                    weranda
                    21 августа 2024, 07:55
                    0
                    А можно чуть подробнее? А то не очень понятно.
    Алексей Смирнов
    11 августа 2024, 22:55
    0
    Так и делайте — создаете символическую ссылку как вы и говорите,
    а потом в шаблоне проверяете тип ресурса символической и берите id в поле content и генерите сами нужный url он, как раз будет таким как нужно.
    Если не хотите грузить pdoMenu полем content, можно придумать другое поле для «сбора» ID ресурса.
    и никаких сниппетов и прочее.
      Сергей Карпович
      12 августа 2024, 20:16
      0
      Берите компонент plCustomMenu и стройте любую структур меню, не зависимо от структуры ресурсов
        weranda
        21 августа 2024, 07:54
        0
        Проверил. Как-то оно не так работает: всегда либо раскрытые все вложенные пункты меню во всех ветках, либо закрытые.
          Сергей Карпович
          21 августа 2024, 08:14
          0
          Это уже зависит от ваших скриптов и стилей на фронте
            weranda
            21 августа 2024, 08:20
            0
            Я имел в виду, что оно отлично работает от PDOMenu в контексте использования параметра hideSubMenus. Т. е. если hideSubMenus = 0, то все пункты меню всего меню раскрыты и их можно заделать стилями, в этом нет проблемы. Но когда hideSubMenus = 1, то PDOMenu в этом случае показывает только активную ветку меню, скрывая остальные, а plCustomMenu скрывает вообще все ветки, оставляя только первый уровень. Просто не хотелось бы выводить все огромное меню разом.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        18