2009-11-25 1 views
5

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

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

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

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

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

, где «от» переменных определяют целевые URL-кнопка «сохранить» и «отменить».

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

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

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

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

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

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

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

Как вы это решаете?

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

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

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

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

+0

Вы можете посмотреть, как большие CMS, такие как Drupal, Wordpress и Joomla, решили это. Вероятно, они сделали некоторые исследования по этому вопросу и (надеюсь) приняли хорошее решение. –

+0

Возможно, вы могли бы попытаться сжать свои переменные GET? – jkndrkn

ответ

2

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

Предварительный просмотр Проблема: просмотр в IFRAME, поэтому история doean't заблудиться?

Беспорядок проблемы 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 
+0

Идея пути очень хорошая. Думаю, я пойду с этим. –

0

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

+0

Может быть/будет несколько обратных шагов и поместить всю цепочку в переменные GET быстрее, чем разрешенные 1024 байта. –

2

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

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

Смежные вопросы