¿Cómo solucionas la navegación “no estructurada” en PHP?

Tengo un gran CMS basado en PHP que administra las páginas web. Todos los artículos están organizados en una estructura de árbol. Cuando edito un elemento, el botón "atrás" generalmente apunta a su elemento principal. Por lo tanto, el flujo de trabajo habitual es navegar a través del árbol.

Ahora de vez en cuando, surge la necesidad de un flujo de trabajo que "salta" a otros elementos sin tener en cuenta la estructura.

Por ejemplo, cuando un usuario está editando una página web, es posible que desee abrir la plantilla a la que se adjunta la página (otro elemento en una rama completamente diferente), hacer un cambio allí y al hacer clic en "guardar", volverá a La página que estaban editando.

Por el momento, soluciono esto usando

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

donde la variable "desde" determina las URL de destino de los botones "guardar" y "cancelar".

Esto funciona hasta cierto punto cuando el camino se vuelve demasiado largo y complejo. Por ejemplo, ¿qué pasa si el usuario

edita una páginaabre la plantilla adjuntaPrevisualiza esa plantilla en la vista frontal¿Y luego espera volver a la página que estaban editando?

En este momento, el "historial" finaliza en el último elemento, de modo que cuando el usuario regresa de la vista frontal, se pierde el enlace a la página original y tiene que buscarlo manualmente.

Otro problema que puede ocurrir rápidamente es que la URL GET que contiene todos los valores "de" se vuelve demasiado larga o totalmente caótica:

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

(obtienes la deriva)

He resuelto esto con elegancia abriendo ventanas separadas en el pasado, pero realmente quiero implementar un flujo de trabajo de una ventana que funcione de manera universal, principalmente porque las ventanas múltiples tienden a confundir a los usuarios.

¿Cómo resuelves esto?

¿Ha implementado una navegación robusta "no estructurada" que funciona bien con múltiples ventanas abiertas (= un usuario está haciendo varias cosas diferentes con diferentes rutas de navegación)?

¿Cómo se hace esto en el lado de la interfaz de usuario?

El mejor enfoque que se me ocurre es transmitir un valor "desde" que apunta a un registro temporal en una base de datos o sesión. Ese registro contiene toda la información sobre la ruta actual y, por lo tanto, siempre puede proporcionar el valor correcto "volver a la página x".

Lo que más me gustaría escuchar es la experiencia de las personas que lo han implementado con éxito y cómo lo hicieron.

Respuestas a la pregunta(3)

Su respuesta a la pregunta