Como você resolve a navegação “não estruturada” em PHP?

Eu tenho um grande CMS baseado em PHP que gerencia páginas da web. Todos os itens são organizados em uma estrutura de árvore. Quando eu edito um item, o botão "voltar" geralmente aponta para seu item pai. Então, o fluxo de trabalho normal está navegando pela árvore.

Agora, de vez em quando, surge a necessidade de um fluxo de trabalho que "salta" para outros itens sem considerar a estrutura.

Por exemplo, quando um usuário está editando uma página da Web, ele pode querer abrir o modelo ao qual a página está anexada (outro item em uma ramificação completamente diferente), fazer uma alteração e clicar em "salvar" a página que eles estavam editando.

No momento, eu resolvo isso usando

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

onde a variável "from" determina os URLs de destino dos botões "save" e "cancel".

Isso funciona até um certo ponto quando o caminho se torna muito longo e complexo. Por exemplo, e se o usuário

edita uma páginaabre o modelo anexadovisualiza esse modelo na visualização de front-ende depois espera ser levado de volta para a página que eles estavam editando?

Neste momento, o "histórico" termina no último item para que, quando o usuário retornar da visualização de front-end, o link para a página original seja perdido e eles precisem procurá-lo manualmente.

Outro problema que pode acontecer rapidamente é que o URL GET contendo todos os valores "de" se torna muito longo ou totalmente caótico:

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

(você começa a deriva)

Eu resolvi isso elegantemente abrindo janelas separadas no passado, mas eu realmente quero implementar um fluxo de trabalho de janela única que funcione universalmente, principalmente porque várias janelas tendem a confundir os usuários.

Como voce resolve isso?

Você implementou uma navegação "não estruturada" robusta que funciona bem com várias janelas abertas (= um usuário fazendo várias coisas diferentes com diferentes caminhos de navegação)?

Como você faz isso no lado da interface do usuário?

A melhor abordagem que posso imaginar é passar um valor "de" que aponte para um registro temporário em um banco de dados ou sessão. Esse registro contém todas as informações sobre o caminho atual e pode, portanto, sempre fornecer o valor "voltar à página x" correto.

O que eu mais gostaria de ouvir são as experiências de pessoas que implementaram isso com sucesso e como fizeram isso.

questionAnswers(3)

yourAnswerToTheQuestion