2009-11-25 53 views
5

我有一個龐大的基於PHP的CMS管理網頁。 所有項目都以樹結構組織。 當我編輯一個項目時,「後退」按鈕通常指向它的父項目。 所以,通常的工作流程是在樹中導航。如何解決PHP中的「非結構化」導航?

現在,現在需要一種工作流程,「跳轉」到其他項目而不考慮結構。

例如,當用戶正在編輯網頁時,他們可能想要打開頁面所附的模板(另一個完全不同的分支中的項目),在那裏進行更改,並點擊「保存」時回到他們正在編輯的頁面。

此刻,我解決這個使用

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

其中「從」變量確定的「保存」和「取消」按鈕目標URL。

當路徑變得太長和複雜時,這可以工作到某個點。例如,如果有什麼用戶

  • 編輯一個頁面
  • 打開附加模板
  • 預覽,在前端視圖
  • 模板,然後預計無縫帶回網頁,他們正在編輯?

現在,「歷史」結束於最後一項,以便當用戶從前端視圖返回時,原始頁面的鏈接丟失,並且他們必須手動搜索它。

,可以迅速發生的另一個問題是,包含所有的「從」值太長,或完全混亂的GET網址:

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

(你得到的漂移)

我已經解決這優雅地通過打開單獨的窗口在過去,但我真的想要實現一個無縫的單窗口工作流程,普遍工作,主要是因爲多個窗口往往混淆用戶。

你如何解決這個問題?

您是否實現了一個強大的「非結構化」導航,可以在多個窗口打開的情況下正常工作(=一個用戶使用不同的導航路徑執行多種不同的事情)?

如何在用戶界面上進行此操作?

我能想到的最佳方法是傳遞指向數據庫或會話中臨時記錄的「from」值。該記錄包含有關當前路徑的所有信息,因此可以始終提供正確的「返回頁面x」值。

我最想聽到的是那些已經成功實施這個的人的經驗,以及他們是如何做到的。

+0

你可以看看像Drupal,Wordpress和Joomla這樣的大型CMSes如何解決這個問題。他們可能已經對此做了一些研究並(希望)做出了一個很好的決定。 – 2009-11-25 14:24:22

+0

也許你可以嘗試壓縮你的GET變量? – jkndrkn 2009-11-25 15:36:04

回答

2

只是一對夫婦的建議

預覽問題:預覽在IFRAME,所以歷史doean't迷路?

混亂的URL問題:如果您在PATH_INFO有某種每個頁面的關鍵,比URL路徑

(i.e. /frontpage/edit = 952, 
/frontpage/edit&from=/somepage/edit = 763, 
/template/preview = 651, 
template/edit = 612, 
template_preview = 866 etc.) 

你可以把它們串等一起,像這樣:

domain.com/admin/template/edit/952/763/651/612/866 
+0

路徑的想法非常好。我想我會繼續這樣做。 – 2009-12-01 00:06:21

0

只要你只需要到後臺階一次,爲什麼不能在任何你想要的linkback頁編號傳送每當你生產你跳轉到頁面?

+0

可能會有多個backsteps,並且將整個鏈變成GET變量會快速超過允許的1024個字節。 – 2009-11-25 14:54:33

2

你可以在用戶點擊時構建會話的訪問頁面堆棧,每次打開時都會推入一個新頁面,並在點擊時彈出。將其存儲爲會話變量。然後

關鍵是要經常檢查其來源字符串,因爲它們也可以使用他們的瀏覽器的前進和後退按鈕。如果他們的引用字符串不在堆棧頂部,則必須掃描堆棧以查看是否手動備份到前一頁。