Руки, наконец, добрались до создания структуры сайта, прикручиванию темы... Почти тут же появился вопрос из разряда "как сделать?", два дня раздумий особых результатов не дали и поиск особо не помог.
Задача: на сайте расположены 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’а старое значение ... Подскажите пожалуйста как это можно реализовать (с помощью чего?) или мб данный вопрос на вашей памяти обсуждался, буду признательна линкам, мой поиск результатов не принес.
Очень длинное сообщение, тяжело вникать...
А по делу:
А что вообще должно отображаться в верхней части дополнительного меню при переходе на страницу общаяСтраница1? Если ничего не должно отображаться, то нужно данное условие отразить в шаблоне. Самый простой вариант – назначить нужным страницам другие шаблоны, в которых нет вызова меню. Также можно сделать сниппет, который вызывает меню только во вложенных страницах. Еще, наверное, можно воспользоваться PHx. Можно в первом Wayfinder использовать параметр &excludeDocs, чтобы не вызывать в нем общие страницы. Еще можно попытаться все сделать в одном вызове Wayfinder с параметрами $includeDocs – то есть вызвать общие страницы в первом меню. Вариантов много, но как лучше сделать – нужно думать.
Quote from: Serenity at Apr 02, 2008, 11:59 PM
При обращении к общимСтраницам, во втором дополнительном меню должны отображаться линки на подразделы раздела из которого было совершено обращение к общимСтраницам.
А откуда вообще можно такую информацию получить? История открытия страниц нигде не хранится, а открывающаяся страница никак не связана с предыдущей. И если как-то в принципе можно узнать предыдущую страницу, то что делать, если после общаяСтраница1 открылась общаяСтраница2? Получается, нужно хранить всю историю путешествия по сайту?
Кроме того, фактически страница с одним и тем же адресом должна иметь разное содержимое в зависимости от того, каким путем на нее попали. Мне кажется это концептуально неверным. Кстати, а если просто сразу в браузере ввести адрес страницы общаяСтраница1, что в меню должно отображаться?
Повторю – а если такой случай: последовательно открылись раздел 3 – общая 1 – общая 2 – общая 1 – общая 2. В итоге, по логике, нужно в меню показывать страницы раздела 3, хотя последние страницы не связаны с конкретным разделом. При этом необходимо хранить последний из открытых разделов, даже если он был открыт несколько страниц назад, чтобы реализовать эту идею.
Никакие TV или что-то подобное тут не подойдут – хранить нужно информацию действиях каждого посетителя. Для этого следует использовать cookie и написать сниппет, который запоминает раздел в случае необходимости и читает его, чтобы сформировать меню, вызвав нужный вариант Wayfinder. Правда, если в браузере cookie отключены, ничего не получится. Также можно использовать сессии, и, наверное, именно этот вариант будет наиболее правильным, но писать программу все равно придется.
Меню – часть веб-страницы, и разные меню для одной страницы в зависимости от входа как раз концептуально неверны. Дело не в том, чтобы дублировать в каждый раздел одинаковые страницы, а в том, чтобы на общих страницах не показывать вложенное меню раздела. На то страница и общая, чтобы она не зависела от раздела и на ней не показывалось конкретное меню. Правда, это все только теория, на практике может все нужно иначе делать.
Хотя...
Только что пришло в совершенно другое решение задачи: а именно в каждом разделе создать общие страницы, а информацию на них выводить с помощью чанков, таким образом, будут дублироваться только сами документы, но не информация, что в принципе и требуется. AKots, как Вы думаете, какой из методов более правильный?
Ничего не нужно в базе для сессий хранить. Просто при заходе в раздел нужно присвоить значение чему-то вроде $_SESSION[’lastsection’], а при формировании меню смотреть, что в этой переменной. Если же переменная пуста, присваивать значение по умолчанию.
Подробнее о сессиях:
http://lv.php.net/manual/ru/ref.session.php
При этом следует помнить, что MODx автоматически открывает сессии.
А по вопросу чанка – все зависит от того, сколько разделов и сколько общих страниц. Если их много, проще написать универсальное решение, а если мало – можно и размножением страниц со ссылками на чанки заняться.
огромное спасибо за помощь.