每段评论系统

pix*_*ine 18 commenting content-management-system

我对每段评论系统(也称为"注释系统")的新兴趋势非常感兴趣,例如由medium.comqz.com实现的那些,我正在考虑开发一个用于我自己的.

问题:它们似乎主要是通过javascript实现的,它运行通过id属性唯一标识的文本的html段落(或者,在Medium的情况下,名称属性).这是否意味着他们的CMS实际上将每个段落存储为数据库中的单独条目?对我来说似乎过于复杂,但除此之外,他们如何管理段落可以在整个文本中删除,编辑或移动的事实?如果作者更改段落,如何保留唯一ID?这个唯一ID在逻辑上是如何构建的?(post_id + position_in_post)?

感谢您的见解......

小智 13

我不能说中间,但作为Quartz的开发人员之一,我可以深入了解qz.com注释的工作原理.

注释代码是自定义PHP代码,并且独立于CMS用于发布文章(wordpress VIP).我们确实将每个段落的引用存储为数据库中的一行,以便跟踪文章内容的任何更新.我们称之为注释线程,当用户保存注释时,threadId与注释一起存储.

我们没有为每个段落存储在wordpress一侧的唯一ID,而是我们在段落中存储段落相对位置(nodeIndex"3"和nodeSelector"p"==给定内容体中的第三个p-tag文章)和javascript确定放置注释块的确切位置.我们采用这条路线以避免在wordpress方面进行更重的自定义,但是根据您的CMS,可能更容易直接在CMS代码中解决这个问题并在其中添加唯一的ID.发送到客户端之前的HTML.

每次发布文章更新时,都会将更新后的文章中的每个段落与之前与该文章的注释线程一起存储的段落进行比较.如果位置和段落文本不匹配,它会尝试查找最接近匹配的段落并更新该线程的行,并在适当的位置创建和删除新线程.每当更改发布到文章时,所有这些都在服务器端处理.

另外一些值得关注的备选含义是Gawker的Kinja文本注释(目前在Jalopnik上使用)和rapgenius.com的逐字注释.

  • 啊,有人以这种方式实现了Disqus,请查看https://github.com/tsi/inlineDisqussions上的源代码 (3认同)

Eam*_*nne 5

(免责声明:我是一个factlink dev.)

我在一家公司工作,试图允许每段(或每个短语)评论任意网站.从本质上讲,您有两个选择来识别评论的锚点.

  1. 记住页面的结构(例如从根到段落的某个路径),并在下次将注释放在同一位置.
  2. 确定段落的内容,并在下次将评论放在相同或相似的内容附近.

两个系统都有它们的缺点,但如果你想要一个强大的系统,你几乎需要选择2.面对不断变化的结构,结构识别是脆弱的.特别是无关的更改,例如主题或使用的精确html标签可能会显着影响"路径".当发生这种情况时,你真的无法解决它 - 除非你检查内容,即选项(2).

Sam在他的回答中描述了基于服务器端内容的内容.纯粹基于客户端内容的匹配是factlink和(IIRC)假设使用的.大多数浏览器都支持使用无论是在页面内容不规范,但快速字符串搜索window.findTextRange.findText.或者,您可以使用DOM,它速度较慢,但​​可以灵活地实现(例如)模糊匹配.

看起来客户端匹配可能过度或复杂,但实际上,它更简单:它是一种非常强大的方法,可以将您的内容管理与评论分开.两者都不是很简单,因此将这些问题脱钩可能是一种胜利.