3

私のプロジェクトの 1 つで、ユーザーは同じファイルを編集できます。グループワークですので、グループの最大人数は4名です。同時に編集することは稀ですが、可能性はあります。コンテンツを表示する ckeditor を使用しています。編集中にコンテンツをロックするにはどうすればよいですか? 上記の場合、1 人のユーザーが編集のためにコンテンツを開き、保存せずにウィンドウを開いたままにするとどうなりますか。コンテンツを保存し、ロックを解除して別のユーザーが編集できるようにすることはできますか? 最初のユーザーがデスクに戻ると、「コンテンツが変更されました。更新してください」というメッセージが表示されます。

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

ありがとう

4

1 に答える 1

11

これを機能させるには、3 つのパーツが必要です。

  1. ファイルがいつ編集されているかを示すために、データベースにフィールドを追加する必要があります。「LastUsed」などのフィールドを作成し、編集のためにファイルを開いたときのタイムスタンプを記録します。誰かがファイルを開こうとしたときは、タイムスタンプを確認してください。タイムスタンプが最近のもの (過去 5 分間など) の場合は、別のユーザーがファイルを開くことを許可しないでください。

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

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

基本的には次のように機能します。

  • ユーザーがファイルを編集しているとき、ajax リクエストは「LastUsed」タイムスタンプを継続的に更新しています。

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

  • ユーザーがページを開いたまま何もしていない場合、タイマーが作動して ajax リクエストを停止し、他のユーザーがファイルを編集できるようにします。

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

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

于 2012-04-13T06:08:53.407 に答える