PHP / JS: Как реализовать динамические хлебные крошки? (совместимость с несколькими окнами / вкладками) - PullRequest
2 голосов
/ 31 января 2010

Я работаю над сайтом, где нам нужно «динамическое» генерирование хлебных крошек.

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

I could have the following breadcrumbs-like lists: (updated)
* inbox > message > user profile
* search results > user profile
* search results > user profile > new message

(К вашему сведению; будет несколько выделенных родительских страниц, которые сбросят весь стек. Также будет проверка, предотвращающая рекурсию.)

Итак ... Для этого мне нужно вспомнить, где был пользователь и в каком порядке. Я считаю, что самый элегантный и надежный способ сделать это - написать механизм, который запоминает историю пользователя в сеансе.

Если я сделаю это, все произойдет, когда пользователь откроет новое окно или вкладку браузера.

Чтобы исправить это, я мог бы сохранить эти данные в строке запроса. Хотя разные браузеры / прокси имеют разные пределы данных, которые могут быть переданы таким образом. Так что, однажды, это, вероятно, тоже сломается.

У кого-нибудь есть идеи, как это реализовать?

Или,

Кто-нибудь знает, как надежно идентифицировать различные окна браузеров?

(Я бы предпочел не полагаться на javascript для этого, если только это не мой единственный работающий вариант. Я использую инструментарий dojo для внешнего интерфейса)

заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 31 января 2010

В браузерах, совместимых с HTML5, я бы сохранял их в локальном хранилище.

Вы можете обнаружить новую открытую вкладку следующим образом:

  • при загрузке страницы установите cookie от javascript
  • используйте событие onbeforeunload, чтобы очистить cookie

Когда посетитель откроет ваш сайт, он установит файл cookie, например session=1. Если он щелкнет по новой ссылке на вашем сайте, когда он покинет сайт, файл cookie будет, например, session=0, но как только Приходите снова на ваш сайт, это будет session=1. Когда посетитель откроет новую вкладку, он встретит session=1, поэтому, вероятно, сделает это session=2. Вы поняли?

2 голосов
/ 31 января 2010

window.name сохраняется новый документ загрузки. Таким образом, вы можете записать строку истории в window.name, а затем прочитать ее со следующей страницы или использовать сгенерированное имя в качестве ключа для хранения файлов cookie / сессий для конкретного окна.

Я не думаю, что это хорошая идея. «Хлебные крошки» традиционно являются иерархическим навигационным устройством, а не списком истории. Браузер уже предоставляет очень хороший список истории на кнопках назад / вперед, который бесполезно воспроизводить на странице; Представление списка истории на странице, особенно в формате, который обычно является иерархическим маркером места, с большей вероятностью запутает пользователей, чем поможет.

1 голос
/ 31 января 2010

Я задал аналогичный вопрос несколько месяцев назад. Верхний ответ - который я планирую использовать - предложил построить путь и проанализировать его, используя комбинацию mod_rewrite и PHP:

www.mysite.com/inbox/message/user_profile/12345/new_message

До определенного момента (URL запроса никогда не должен превышать 1024 байта), это может быть хорошим решением. Дополнительным преимуществом является то, что путь крошки может даже пережить сеансы и работает в ссылках, пересылаемых другим (если это желательно в вашем сценарии).

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

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