2011-05-28 31 views
1

這個問題是關於一個後臺數據列表,用樣訂貨變量,頁面排名,過濾器等。傳遞變量列出

我使用GET傳遞頁面之間的變量,但是我遇到了很多麻煩,並且改變爲在會話中存儲這些變量。我不介意書籤問題,因爲它是一個後臺工具。一切都很好,直到今天:我正在查看一個列表,我更換了一個過濾器,然後我想回到以前的結果。我的自然姿態是按下瀏覽器「返回」按鈕。當然,我沒有被拿到以前的結果,因爲我已經覆蓋了會議。

那麼,這是最好的方法來做到這一點?不僅要記住用戶的使用體驗,還要編碼設施和避免錯誤。

麻煩我發現,當我通過URL傳遞的變量,特別是在兩個或三個層次列表:

  • 有許多變數,許多 地方,我必須把它們:鏈接 到的編輯工作項目,表單的動作, 反向鏈接,頁面導航鏈接...
  • 某些變量可以具有相同的名稱(即每個級別將有一個 頁數)。這很容易造成 錯誤,特別是當您的 必須在 以前的腳本中編寫新內容時。
  • 我不能只使用 查詢字符串,因爲有 案件中,我必須要改變一些 VAR的值(即,在尋呼 導航鏈接,我已經改變 number_of_pag變量)。

我想最好的解決方案不是「嘿,如果你多加註意,你不會犯這些錯誤」。有沒有我沒有發現的系統?偉大的人如何做到這一點?

也許實現方法來自動呈現鏈接?

謝謝。

回答

1

這些類型的變量的地方是查詢字符串。不僅需要書籤,而且還需要導航至給定內容,正如您使用後退按鈕發現的那樣。但是,如果您確實想要縮寫查詢字符串,請考慮使用標記或標識。

也就是說,在會議上,考慮使用的系統是這樣的:

// this represents the query data for one page request 
$_SESSION['queryid']['38hghfd85423lk'] = array(
    'all' => array('the => 'query', 'data'), 
    'is' => array('stored', 'like', 'this) 
); 

// this represents the query data for another page request 
$_SESSION['queryid']['432423jkgrfsd9'] = array(
    // .... other data .... 
); 

現在您的查詢字符串像這樣:

http://www.example.com/index.php?queryid=38hghfd85423lk 

或者這樣:

http://www.example.com/index.php?queryid=432423jkgrfsd9 

當然,您可以使用GET數據中給出的queryid來標識要使用的查詢數據$_SESSION。現在,瀏覽器後退按鈕將起作用。

一個問題可能是,在長時間的會話之後,$_SESSION中的查詢緩存將變得相當大。爲了緩解這種情況,您可以限制緩存的長度,比如說最後100頁。如果用戶試圖導航超過100頁,您會注意到他們的queryid不再存在,並且能夠通知他們頁面已過期。

如果您想支持書籤,可以將queryids和數據保存到數據庫。當然,你可能仍然需要考慮修剪方法 - 比如說,一個月內沒有使用的queryids被清除。然而,這可能令用戶感到沮喪。