Как вы генерируете навигацию по сайту? - PullRequest
8 голосов
/ 07 декабря 2009

Меня интересует, как другие люди справляются с навигацией на сайте. Не часть стиля или удобства использования, а часть поколения. Большинство веб-сайтов имеют своего рода «дерево навигации», которое отображается в форме одного или нескольких уровней меню - в какой форме вы сохраняете и обрабатываете это дерево? Самое простое решение - статический шаблон меню, примерно такой:

<ul id="menu">
   <li><a href="…">One</a></li>
   <li><a href="…">Two</a></li>
   <li><a href="…">Three</a></li>
</ul>

Но это не очень гибко. Вы не можете просто отметить текущую страницу в меню, и нет простого способа показать или скрыть часть дерева меню в зависимости от текущей страницы. (Или это?)

Я придумал дерево навигации, что-то вроде этого:

    - title: Fruits
      nodes:
        - title: Apples
        - title: Oranges
        - title: Bananas
    - title: Music and Stuff
      url: music
      nodes:
        - title: Classical
        - title: Jazz

Это дерево загружается специальным классом Navigation, который может обслуживать части навигации в зависимости от текущего пути запроса. Кажется, это работает немного лучше, но мне все же очень любопытны решения других людей.

Ответы [ 8 ]

6 голосов
/ 07 декабря 2009

В MySQL есть статья под названием "Управление иерархическими данными в MySQL" , которую я ранее счел весьма неоценимой. В нем рассматриваются два распространенных метода хранения динамической навигации и их ограничения.

5 голосов
/ 07 декабря 2009

Если вам нравится ASP.NET, Sitemaps отлично работают

4 голосов
/ 07 декабря 2009

Вам может пригодиться один из моих модулей: CatalystX :: Меню :: Suckerfish

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

Атрибутами метода являются произвольные строки MenuPath и MenuTitle, которые задают разделенный косой чертой путь для пункта меню в дереве и строку, которая используется в качестве метки пункта меню и атрибута заголовка html, где это применимо.

3 голосов
/ 07 декабря 2009

Мы используем подход, аналогичный вашему, с иерархией меню, хранящейся в базе данных. Было бы неплохо автоматически сгенерировать структуру меню на основе методов диспетчеризации, но есть и другие преимущества в подходе к БД. Например, мы можем изменять / ограничивать доступ, не перестраивая приложение, и мы можем создавать пункты меню, которые не отображаются в дереве отправки, такие как внешние ссылки. Мы также можем предоставить произвольные подробные метки, которые не обязательно отображаются на пути отправки, чтобы облегчить жизнь людям.

Основной недостаток (помимо необходимости дублировать дерево диспетчеризации) заключается в том, что на самом деле управление иерархическими данными в MySQL немного неудобно. См. ответ cballou для хорошего ресурса по этой теме.

2 голосов
/ 08 декабря 2009

Когда дело доходит до отображения и скрытия частей дерева, CSS - ваш друг.

Например, ваше подменю фруктов может быть

id="fruitmenu"

Вы установили все подменю на

display:none;

вверху таблицы стилей.

Затем вы используете идентификатор в теге body каждой страницы, чтобы сделать их видимыми в соответствии с более конкретным правилом.

Так, например, на вашей странице фруктов, которая имеет

<body id="fruitpage">

фруктовое подменю видно, потому что оно подчиняется правилу вроде

#fruitpage #fruitmenu {display:block;}

1 голос
/ 07 декабря 2009

SQL Server 2008 имеет отличный новый тип данных с именем «HierarchyID», который устраняет лот головной боли при работе с иерархическими данными.

0 голосов
/ 25 декабря 2009
0 голосов
/ 07 декабря 2009

Инструменты Google для веб-мастеров предоставляют полезные идеи и поддержку для создания и управления картами сайта:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...