2012-04-13 86 views
3

在我的一個項目中,用戶可以編輯同一個文件。它是小組工作,組中的最大用戶數爲4.他們將同時編輯的情況很少,但有可能。我正在使用顯示內容的ckeditor。如何在編輯內容時鎖定內容? 對於上述情況,如果一個用戶打開內容進行編輯,然後從不保存並將窗口打開,會發生什麼情況。是否可以保存內容,釋放鎖以供其他用戶編輯?如果第一位用戶回到辦公室,他們應該看到「內容已更改,請刷新」的消息。在瀏覽器中編輯時鎖定文件/內容。

我正在使用php,mysql。

謝謝

+0

好問題。我打算在這方面做些工作。+1 – 2016-11-25 12:39:52

回答

9

你需要三個部分才能完成這項工作。

  1. 您需要向數據庫中添加一個字段以指示文件何時被編輯。創建一個名爲「LastUsed」的字段並記錄該文件何時打開進行編輯的時間戳。當有人試圖打開文件時,檢查時間戳,如果時間戳是最近的(比如說最近5分鐘),不允許第二個用戶打開它。

  2. 在允許編輯文件的頁面上,每隔幾分鐘就會運行一次ajax請求。它所需要做的就是將正在編輯的文件的時間戳更新爲當前的日期和時間。

  3. 然後,您可以運行一個計時器,一旦它達到某個點,ajax請求就會停止,因此數據庫中的時間戳可能會過期。但是,每當用戶採取行動時都要重置定時器。這樣,只要用戶在做某事,定時器就會重置,並且允許ajax請求繼續更新數據庫中的時間戳。如果用戶在給定時間內沒有執行任何操作,定時器運行,Ajax請求停止,時間戳到期,其他人可以打開它進行編輯。您也可以使用相同的計時器顯示您的消息,即編輯會話已過期或其他任何內容。

它基本上是這樣工作的:

  • 當用戶正在編輯一個文件一個Ajax請求不斷更新「LASTUSED」時間戳。

  • 只要該頁面打開以編輯文件,ajax請求將使數據庫中的時間戳保持最新狀態。

  • 如果此人離開頁面但未做任何事情,計時器將運行並停止ajax請求,這將允許其他人編輯文件。

  • 一旦人離開頁面,ajax請求將不能再更新時間戳。這樣,如果一個人剛離開該頁面,其他人將能夠編輯該文件。

  • 因此,如果第二個用戶試圖編輯文件,如果「LastUsed」時間戳在最後5分鐘內,則您知道有其他人正在編輯該文件。如果時間戳大於5分鐘,那麼您知道當前沒有人打開該文件進行編輯,因此第二個用戶可以對其進行編輯。

+1

謝謝。我知道如何繼續。如果遇到任何問題,都會回來。 – codescope 2012-04-16 05:45:32

+0

沒問題。如果您認爲這回答了您的問題,請隨時將其標記爲已接受的答案。 – 2012-04-16 06:40:27

+0

對我也有用。 +1 – 2016-11-25 12:39:10