2012-04-13 12 views
3

私のプロジェクトの1つでは、ユーザーは同じファイルを編集することができます。それはグループ作業であり、グループ内の最大ユーザー数は4です。同時に編集することはまれですが、可能性はあります。私はコンテンツを表示するckeditorを使用しています。コンテンツを編集中にロックする方法は? 上記のケースでは、1人のユーザーが編集のためにコンテンツを開いてから、ウィンドウを開いたり保存したりしないとどうなりますか?コンテンツを保存し、他のユーザーが編集するためにロックを解除することは可能ですか?最初のユーザーが机に戻ると、「内容が変更されました。リフレッシュしてください」というメッセージが表示されます。ブラウザで編集中にファイル/コンテンツをロックします。

私はphp、mysqlを使用しています。

おかげ

+0

良い質問です。これを行うつもりです。+1 –

答えて

9

あなたは、ソートのこの作品を作るために3つの部品が必要です。

  1. ファイルをいつ編集するのかを示すフィールドをデータベースに追加する必要があります。 "LastUsed"のようなフィールドを作成し、編集のためにファイルを開いたときのタイムスタンプを記録します。誰かがファイルを開こうとすると、タイムスタンプをチェックします。タイムスタンプが最近のもの(最後の5分)であれば、それを第2のユーザーが開くことはできません。

  2. ファイルを編集できるページで、数分ごとにajaxリクエストが実行されます。必要なのは、編集中のファイルのタイムスタンプを現在の日付と時刻に更新することだけです。

  3. その後、ajaxリクエストが停止してデータベース内のタイムスタンプが期限切れになる特定のポイントに達すると、タイマーが実行される可能性があります。ただし、ユーザーが操作を行うたびに、そのタイマーがリセットされます。ユーザーが何かをしている限り、タイマーはリセットされ、ajaxリクエストはデータベース内のタイムスタンプの更新を継続できます。ユーザーが一定の時間内に何かをしないと、タイマーが起動し、Ajaxリクエストが停止し、タイムスタンプが期限切れになり、他の誰かが編集用に開くことができます。また、同じタイマーを使用して、編集セッションの期限切れなどのメッセージを表示することもできます。

それは基本的に次のように機能します。ユーザーは、AJAXリクエストが継続的に「LASTUSED」タイムスタンプを更新しているファイルを編集しているとき

  • ファイルを編集するためにそのページが開いている限り、ajaxリクエストはデータベースのタイムスタンプを最新の状態に保ちます。

  • 人がページを開いたままで何もしていない場合は、タイマーが起動してajaxリクエストを停止します。これにより、誰かがファイルを編集できるようになります。

  • 人がページを離れると、ajaxリクエストはもはやタイムスタンプを更新できなくなります。そうすれば、ある人がページを離れるだけで、他の人がファイルを編集することができます。

  • したがって、「LastUsed」タイムスタンプが最後の5分以内に2番目のユーザーがファイルを編集しようとすると、ほかの誰かがファイルを編集していることがわかります。タイムスタンプが5分より大きい場合は、現在誰も編集用にファイルを開いていないことを知っているので、2人目のユーザーが編集できます。

+1

ありがとうございます。私はどのように進めるのか考えました。問題に直面したら元に戻ってきます。 – codescope

+0

問題ありません。これがあなたの質問に答えられたと思うなら、それを受け入れられた答えとしてマークしてください。 –

+0

私にとっても便利です。 +1 –

関連する問題