3

在我的一个项目中,允许用户编辑同一个文件。这是小组工作,组中的最大用户数为 4。他们很少会同时编辑,但有可能。我正在使用显示内容的ckeditor。如何在编辑内容时锁定内容?对于上述情况,如果一个用户打开内容进行编辑,然后从不保存并保持窗口打开,会发生什么情况。是否可以保存内容,释放锁定以供其他用户编辑?如果第一个用户回到办公桌,他们应该会看到“内容已更改,请刷新”的消息。

我正在使用php,mysql。

谢谢

4

1 回答 1

11

你需要三个部分来完成这项工作。

  1. 您需要在数据库中添加一个字段以指示文件何时被编辑。创建一个名为“LastUsed”之类的字段,并记录打开文件进行编辑的时间戳。当有人试图打开文件时,检查时间戳,如果时间戳是最近的(比如最后 5 分钟),则不允许第二个用户打开它。

  2. 在允许编辑文件的页面上,每隔几分钟就会运行一次 ajax 请求。它所需要做的就是将正在编辑的文件的时间戳更新为当前日期和时间。

  3. 然后,您可以运行一个计时器,一旦达到某个点,ajax 请求就会停止,这样数据库中的时间戳就会过期。但是,每次用户采取行动时都要重置该计时器。这样只要用户在做某事,定时器就会被重置,并且允许ajax请求继续更新数据库中的时间戳。如果用户在给定的时间内没有做某事,则计时器运行,ajax 请求停止,时间戳过期,其他人可以打开它进行编辑。您还可以使用相同的计时器来显示您的消息,即编辑会话已过期或其他任何内容。

它基本上是这样工作的:

  • 当用户编辑文件时,ajax 请求会不断更新“LastUsed”时间戳。

  • 只要打开该页面以编辑文件,ajax 请求就会使数据库中的时间戳保持最新。

  • 如果该人保持页面打开但没有做任何事情,计时器将运行并停止 ajax 请求,这将允许其他人编辑文件。

  • 一旦该人离开页面,ajax 请求将无法再更新时间戳。这样,如果一个人离开该页面,其他人将能够编辑该文件。

  • 因此,当第二个用户尝试编辑文件时,如果“LastUsed”时间戳在最后 5 分钟内,您就知道其他人正在编辑该文件。如果时间戳大于 5 分钟,则您知道当前没有人打开文件进行编辑,因此第二个用户可以编辑它。

于 2012-04-13T06:08:53.407 回答