Как вы решаете "неструктурированную" навигацию в PHP?


У меня есть большая CMS на основе PHP, которая управляет веб-страницами. Все элементы организованы в виде древовидной структуры. Когда я редактирую элемент, кнопка "назад" обычно указывает на его родительский элемент. Итак, обычный рабочий процесс - это навигация по дереву.

Теперь время от времени возникает необходимость в рабочем процессе, который "перескакивает" на другие элементы без учета структуры.

Например, когда пользователь редактирует веб-страницу, он может захотеть открыть шаблон, к которому прикреплена страница (другой пункт в совершенно другой ветке), внесите там изменения и при нажатии кнопки "сохранить" ожидайте возврата на страницу, которую они редактировали.

На данный момент я решаю эту проблему с помощью

domain.com/admin/template/edit?from=/frontpage/edit

Где переменная "от" определяет целевые URL-адреса кнопок "сохранить" и "отменить".

Это работает до определенного момента, когда путь становится слишком длинным и сложным. Например, что, если пользователь

  • редактирует страницу
  • открывает прикрепленный шаблон
  • предварительный просмотр этого шаблона в интерфейсном представлении
  • а затем ожидает, что его легко вернут на страницу, которую они редактировали?

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

Еще одна проблема, которая может возникнуть быстро, заключается в том, что URL-адрес GET, содержащий все значения "от", становится слишком длинным или полностью хаотичный:

domain.com/admin/template/edit?from=/frontpage/edit&from=/somepage/edit
&from=/template/preview&/from=template/edit&/from=template_preview ...

(вы получаете дрейф)

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

Как вы решаете эту проблему?

Реализовали ли вы надежную "неструктурированную" навигацию, которая хорошо работает при нескольких открытых окнах (=один пользователь выполняет несколько разных действий с разными пути навигации)?

Как вы справляетесь с этим на стороне пользовательского интерфейса?

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

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

Author: Pekka 웃, 2009-11-25

3 answers

Всего пара предложений

Проблема предварительного просмотра: предварительный просмотр в IFRAME, чтобы история не потерялась?

Проблема с загроможденным URL-адресом: Если у вас есть какой-то ключ для каждой страницы, отличный от пути URL-адреса

(i.e. /frontpage/edit = 952,
/frontpage/edit&from=/somepage/edit = 763,
/template/preview = 651,
template/edit = 612,
template_preview = 866 etc.)

Вы могли бы связать их вместе в PATH_INFO следующим образом:

domain.com/admin/template/edit/952/763/651/612/866
 2
Author: Fenugreek Femtosecond, 2009-11-25 17:46:02

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

Тогда хитрость заключается в том, чтобы всегда проверять строку ссылки, поскольку они также могут использовать кнопки "Назад" и "вперед" в своем браузере. Если строка их ссылки не находится в верхней части их стека, вам придется просканировать стек, чтобы узнать, не были ли они вручную скопированы на предыдущую страницу.

 2
Author: keithjgrant, 2009-11-25 18:20:38

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

 0
Author: John, 2009-11-25 14:31:09