Jak rozwiązać nawigację „niestrukturalną” w PHP?

Mam duży, oparty na PHP CMS, który zarządza stronami internetowymi. Wszystkie elementy są zorganizowane w strukturę drzewa. Kiedy edytuję przedmiot, przycisk „powrót” zazwyczaj wskazuje na jego element nadrzędny. Tak więc zwykły przepływ pracy odbywa się przez drzewo.

Od czasu do czasu pojawia się potrzeba przepływu pracy, który „przeskakuje” do innych elementów bez względu na strukturę.

Na przykład, gdy użytkownik edytuje stronę internetową, może chcieć otworzyć szablon, do którego jest dołączona strona (inny element w zupełnie innej gałęzi), wprowadzić tam zmiany, a po kliknięciu „zapisz” spodziewaj się powrotu do stronę, którą edytowali.

W tej chwili rozwiązuję ten problem

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

gdzie zmienna „od” określa docelowe adresy URL przycisków „zapisz” i „anuluj”.

Działa to do pewnego momentu, gdy ścieżka staje się zbyt długa i skomplikowana. Na przykład, co jeśli użytkownik

edytuje stronęotwiera załączony szablonwyświetla podgląd tego szablonu w widoku z przodua następnie oczekuje, że zostanie płynnie przeniesiony na stronę, którą edytował?

W tej chwili „historia” kończy się na ostatnim elemencie, więc gdy użytkownik wraca z widoku front-end, link do oryginalnej strony jest tracony i muszą go przeszukiwać ręcznie.

Kolejnym problemem, który może się szybko zdarzyć, jest to, że URL GET zawierający wszystkie wartości „z” staje się zbyt długi lub całkowicie chaotyczny:

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

(dostajesz dryf)

Rozwiązałem to elegancko, otwierając w przeszłości oddzielne okna, ale naprawdę chcę zaimplementować jednolity przepływ pracy w jednym oknie, który działa powszechnie, głównie dlatego, że wiele okien myli użytkowników.

Jak to rozwiązać?

Czy zaimplementowałeś solidną nawigację „nieustrukturyzowaną”, która działa dobrze z wieloma otwartymi oknami (= jeden użytkownik robi wiele różnych rzeczy z różnymi ścieżkami nawigacji)?

Jak to zrobić po stronie interfejsu użytkownika?

Najlepsze podejście, jakie myślę, to przekazanie wartości „z”, która wskazuje na tymczasowy rekord w bazie danych lub sesji. Ten rekord zawiera wszystkie informacje o bieżącej ścieżce i dlatego może zawsze zapewniać odpowiednią wartość „powrót do strony x”.

Najbardziej chciałbym usłyszeć doświadczenia ludzi, którzy z powodzeniem wdrożyli to i jak to zrobili.

questionAnswers(3)

yourAnswerToTheQuestion