We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26704
    • 115 Posts
    Руки, наконец, добрались до создания структуры сайта, прикручиванию темы... Почти тут же появился вопрос из разряда "как сделать?", два дня раздумий особых результатов не дали и поиск особо не помог.
    Задача: на сайте расположены 2 меню. Основное, отображающее главные разделы и доп меню со страницами в разделах.
    Создала примерно такую структуру:
    Общие // id 10
    - Раздел1 // в меню не отображается, отсылает на страницаРаздела1 // id 1
    -- страницаРаздела1
    -- страницаРаздела2
    -- страницаРаздела3
    -- ... итд
    - Раздел2 // в меню не отображается, отсылает на страницаРаздела1 // id 2
    -- страницаРаздела1
    -- страницаРаздела2
    -- страницаРаздела3
    -- ... итд
    - Раздел3 // в меню не отображается, отсылает на страницаРаздела1 // id 3
    -- страницаРаздела1
    -- страницаРаздела2
    -- страницаРаздела3
    -- ... итд
    -общаяСтраница1
    -общаяСтраница2

    Как это должно выглядеть в итоге.
    Меню1 (основное) Раздел1 Раздел2 Раздел3
    Дополнительное меню:
    страницаРаздела1
    страницаРаздела2
    страницаРаздела3
    общаяСтраница1
    общаяСтраница2

    для реализации этого создала такую конструкцию:
    [[Wayfinder? &level=`2` &startId=`[*parent*]`]]
    [[Wayfinder? &level=`1` &startId=`10`]]
    все это прекрасно работает до тех пор пока не переходишь на общаяСтраница1 или на общаяСтраница2, при этом доп меню по понятным мне причинам отображает:
    общаяСтраница1
    общаяСтраница2
    общаяСтраница1
    общаяСтраница2
    Соответственно вопрос: может стоит задать другую "архитектуру" расположения документов внутри сайта? Или же потребуется использовать дополнительные конструкции (честно говоря не знаю какие именно ) для сохранения ID раздела в котором мы были и если новый ID больше 3 то указывать для первого Wayfinder’а старое значение ... Подскажите пожалуйста как это можно реализовать (с помощью чего?) или мб данный вопрос на вашей памяти обсуждался, буду признательна линкам, мой поиск результатов не принес.
      • 785
      • 2,113 Posts
      Очень длинное сообщение, тяжело вникать...
      А по делу:
      А что вообще должно отображаться в верхней части дополнительного меню при переходе на страницу общаяСтраница1? Если ничего не должно отображаться, то нужно данное условие отразить в шаблоне. Самый простой вариант – назначить нужным страницам другие шаблоны, в которых нет вызова меню. Также можно сделать сниппет, который вызывает меню только во вложенных страницах. Еще, наверное, можно воспользоваться PHx. Можно в первом Wayfinder использовать параметр &excludeDocs, чтобы не вызывать в нем общие страницы. Еще можно попытаться все сделать в одном вызове Wayfinder с параметрами $includeDocs – то есть вызвать общие страницы в первом меню. Вариантов много, но как лучше сделать – нужно думать.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 26704
        • 115 Posts
        Quote from: AKots at Apr 02, 2008, 10:14 AM

        А что вообще должно отображаться в верхней части дополнительного меню при переходе на страницу общаяСтраница1?

        При обращении к общимСтраницам, во втором дополнительном меню должны отображаться линки на подразделы раздела из которого было совершено обращение к общимСтраницам.
          • 785
          • 2,113 Posts
          Quote from: Serenity at Apr 02, 2008, 11:59 PM

          При обращении к общимСтраницам, во втором дополнительном меню должны отображаться линки на подразделы раздела из которого было совершено обращение к общимСтраницам.
          А откуда вообще можно такую информацию получить? История открытия страниц нигде не хранится, а открывающаяся страница никак не связана с предыдущей. И если как-то в принципе можно узнать предыдущую страницу, то что делать, если после общаяСтраница1 открылась общаяСтраница2? Получается, нужно хранить всю историю путешествия по сайту?
          Кроме того, фактически страница с одним и тем же адресом должна иметь разное содержимое в зависимости от того, каким путем на нее попали. Мне кажется это концептуально неверным. Кстати, а если просто сразу в браузере ввести адрес страницы общаяСтраница1, что в меню должно отображаться?
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 26704
            • 115 Posts
            Quote from: AKots at Apr 03, 2008, 12:15 AM

            А откуда вообще можно такую информацию получить? История открытия страниц нигде не хранится, а открывающаяся страница никак не связана с предыдущей. И если как-то в принципе можно узнать предыдущую страницу, то что делать, если после общаяСтраница1 открылась общаяСтраница2? Получается, нужно хранить всю историю путешествия по сайту?

            Как я себе это представляю, потребуется ввести доп переменную, которая хранит значение id предыдущего раздела. При переходе в другой раздел, реализуется проверка: если id раздела, куда мы перешли > 3х (только для моего случая) то для первого Wayfinder’а указывается парент id старого раздела, иначе данной переменной присваивается значение id нового раздела. ИМХО тут все крайне просто и логику я описала еще в первом сообщении. Вопрос старый через что это реализовать? (сказывается тот факт, что я до сих пор не могу приспособиться и осознать концепции TV и других объектных элементов)

            Это собственно то что я смогла придумать, возможно вы предложите более "красивую" и правельную идею? wink

            Quote from: AKots at Apr 03, 2008, 12:15 AM

            Кроме того, фактически страница с одним и тем же адресом должна иметь разное содержимое в зависимости от того, каким путем на нее попали. Мне кажется это концептуально неверным.

            Как раз наоборот. ОбщиеСтраницы содержат одинаковую для всех разделов информацию, которая не меняется в зависимости от того каким путем на нее попали. При этом самым легким способом является внесение в каждый раздел данные страницы, тогда собственно второй Wayfinder и не нужен и все прекрасно работает, но дублировать информацию три раза (или даже больше ...) уже мне кажется концептуально не верным.

            Quote from: AKots at Apr 03, 2008, 12:15 AM

            Кстати, а если просто сразу в браузере ввести адрес страницы общаяСтраница1, что в меню должно отображаться?

            По умолчанию на сайте в первую очередь должна открываться страницаРаздела1, те первый раздел. Если пользователь сразу указывает путь к общаяСтраница1 то в доп меню у него должны отображаться страницы первого раздела.
              • 785
              • 2,113 Posts
              Повторю – а если такой случай: последовательно открылись раздел 3 – общая 1 – общая 2 – общая 1 – общая 2. В итоге, по логике, нужно в меню показывать страницы раздела 3, хотя последние страницы не связаны с конкретным разделом. При этом необходимо хранить последний из открытых разделов, даже если он был открыт несколько страниц назад, чтобы реализовать эту идею.
              Никакие TV или что-то подобное тут не подойдут – хранить нужно информацию действиях каждого посетителя. Для этого следует использовать cookie и написать сниппет, который запоминает раздел в случае необходимости и читает его, чтобы сформировать меню, вызвав нужный вариант Wayfinder. Правда, если в браузере cookie отключены, ничего не получится. Также можно использовать сессии, и, наверное, именно этот вариант будет наиболее правильным, но писать программу все равно придется.
              Меню – часть веб-страницы, и разные меню для одной страницы в зависимости от входа как раз концептуально неверны. Дело не в том, чтобы дублировать в каждый раздел одинаковые страницы, а в том, чтобы на общих страницах не показывать вложенное меню раздела. На то страница и общая, чтобы она не зависела от раздела и на ней не показывалось конкретное меню. Правда, это все только теория, на практике может все нужно иначе делать.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 26704
                • 115 Posts
                Quote from: AKots at Apr 03, 2008, 04:33 AM

                Повторю – а если такой случай: последовательно открылись раздел 3 – общая 1 – общая 2 – общая 1 – общая 2. В итоге, по логике, нужно в меню показывать страницы раздела 3, хотя последние страницы не связаны с конкретным разделом. При этом необходимо хранить последний из открытых разделов, даже если он был открыт несколько страниц назад, чтобы реализовать эту идею.

                Похоже, мы друг друга не совсем понимаем. В описанном Вами выше случае все абсолютно нормально, т.к. так называемые общие страницы имеют отношение к каждому разделу, грубо говоря, их можно было бы туда включить. Согласна, что хранить надо, как раз сидела в ожидании вашего сообщения и думала о сессиях.

                То как я это понимаю (вот тут я могу быть N раз не права, очень прошу сразу поправить, если что) потребуется создать таблицу в бд. Я думаю, что потребуется 3 поля:

                ID---UserKey---Section

                первое счетчик,
                второе поле уникальный идентификатор пользователя (вот тут первый вопрос... что может быть идентификатором? IP адрес?),
                в третьем столбце как раз будет храниться информация о предыдущем разделе
                собственно вопросы пока следующие: через какое время или по какому событию удалять запись о пользователе? Правильно ли я вообще поняла идею о сессиях?
                  • 26704
                  • 115 Posts
                  Хотя...
                  Только что пришло в совершенно другое решение задачи: а именно в каждом разделе создать общие страницы, а информацию на них выводить с помощью чанков, таким образом, будут дублироваться только сами документы, но не информация, что в принципе и требуется. AKots, как Вы думаете, какой из методов более правильный?
                    • 785
                    • 2,113 Posts
                    Ничего не нужно в базе для сессий хранить. Просто при заходе в раздел нужно присвоить значение чему-то вроде $_SESSION[’lastsection’], а при формировании меню смотреть, что в этой переменной. Если же переменная пуста, присваивать значение по умолчанию.
                    Подробнее о сессиях: http://lv.php.net/manual/ru/ref.session.php
                    При этом следует помнить, что MODx автоматически открывает сессии.
                    А по вопросу чанка – все зависит от того, сколько разделов и сколько общих страниц. Если их много, проще написать универсальное решение, а если мало – можно и размножением страниц со ссылками на чанки заняться.
                      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                      Статьи о MODx, регулярно новые публикации
                      • 26704
                      • 115 Posts
                      огромное спасибо за помощь.