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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос