php - 使用时间戳保存 contenteditable 中的更改

标签 php mysql diff contenteditable

我有一个 <div contenteditable="true" />用户可以写入的长度几乎没有限制。
div 中的数据在更改时保存在 MySQL 数据库中并带有时间戳。

现在我的目标是在左侧添加一个小注释,告诉用户文档的每个部分何时创建(分辨率应该以天为单位)。

现在,问题是:我怎样才能最好地保存信息(哪部分发生了变化)?

到目前为止,我考虑了以下似乎都可以改进的选项:

  1. 每次用户访问文档末尾的站点时,我都会插入一个标志(例如,带有类的空跨度和存储编辑开始的数据属性)。当调用保存脚本时,此标志将保存到数据库中。这个选项可以很容易地在侧面显示日期——我只需将它们放在与空跨度相同的高度,跨度就会告诉我日期。缺点是:用户可能会意外删除时间戳跨度,如果用户长时间不关闭窗口,则不会插入新的时间跨度(这可能可以通过每 X 分钟插入新的时间戳跨度来避免,因此删除部分是更相关)
  2. 尝试在每次将数据传递到保存脚本时进行字符串差异比较,并且只保存带有时间戳的差异。然后当页面加载时,将所有部分以正确的顺序放在一起,并在 Javascript 中将日期注释放在正确的位置。这对我来说听起来像是很多开销 + 当更改旧部分时,两个部分可能会变成一个,等等。总而言之,这些选项听起来非常复杂。

非常感谢任何输入/想法/建议!

最佳答案

您要实现的是源代码控制世界中称为“注释”或“责备”的功能(尽管您只想要更新日期而不是日期+作者或只是作者)。

要正确地做到这一点,您需要一种方法来制作差异(php-diff 可能会完成这项工作)并获取文本的版本。 有几种策略:

  • 存储最新版本并仅保留增量(例如统一差异,我的偏好)

  • 存储所有版本并即时计算增量

一旦你有了当前版本和增量列表(如果超过几十个增量,你绝对可以缩短列表,如果真的很重要,让用户询问更多)。您将增量组合在一起,这是注释阶段发生的地方,因为您可以记住每一行来自哪个版本。编写其实很简单(从latest开始,到它的patch中添加的所有行都是从latest开始的,其他需要解释,所以从下一个patch重新开始,直到你要处理的最古老的patch ,其余行来自该版本或最早的版本,因此可以使用一些标志说“在或之前”)。

Google has a diff library for Javascript所以可以在用户机器上完成所有艰苦的工作。他们在这个库中也有补丁部分。我没有找到注释/责备库。

关于php - 使用时间戳保存 contenteditable 中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849515/

相关文章:

php - 在mysql codeigniter中的一个查询中插入和更新

git - GitHub 中的比较工具(比较发行版,或在必要时比较 shas)

macos - 适用于 Mac 的 Diff 工具,无需将文本保存到文件

php - 将元素添加到数组的开头而不更改其他数组键

php - MySQL:使用分组依据按日期选择行顺序

php - 将多人添加到来自调用者 Twilio 的电话 session

mysql - 如果选择 Combobox vb.net mysql,文本框中的数据库值

php - 使用 PHP 将今天日期的数据输出到 JSON

php - MYSQL中如何在group by之前进行order by

command-line-interface - 如何执行忽略所有注释的差异?