Content management system 逐段注释系统

Content management system 逐段注释系统,content-management-system,comments,Content Management System,Comments,我对每段注释系统(也称为“注释系统”)的新趋势非常感兴趣,例如由和实现的注释系统,我正在考虑为自己开发一个注释系统 问:它们似乎主要是通过javascript实现的,javascript在文本的html段落中运行,由id属性(或者,在媒体中,是名称属性)唯一标识。这是否意味着他们的CMS实际上将每个段落作为单独的条目存储在数据库中?对我来说似乎太复杂了,但除此之外,他们如何处理一个段落可以在整个文本中删除、编辑或移动的事实?如果作者更改段落,如何保留唯一id? 唯一id的逻辑结构如何?(职位号+

我对每段注释系统(也称为“注释系统”)的新趋势非常感兴趣,例如由和实现的注释系统,我正在考虑为自己开发一个注释系统

问:它们似乎主要是通过javascript实现的,javascript在文本的html段落中运行,由id属性(或者,在媒体中,是名称属性)唯一标识。这是否意味着他们的CMS实际上将每个段落作为单独的条目存储在数据库中?对我来说似乎太复杂了,但除此之外,他们如何处理一个段落可以在整个文本中删除、编辑或移动的事实?如果作者更改段落,如何保留唯一id? 唯一id的逻辑结构如何?(职位号+职位号)


感谢您的见解…

我不能直说媒体方面,但作为Quartz的开发人员之一,我可以深入了解qz.com注释是如何工作的

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

我们没有为每个段落在wordpress端存储唯一的id,而是在该文章中存储段落的相对位置(nodeIndex“3”和nodeSelector“p”==给定文章内容体中的第三个p标记)javascript决定注释块的确切位置。我们这样做是为了避免在wordpress端进行更繁重的自定义,不过根据您的CMS,在发送到客户端之前,可能更容易直接在CMS代码中解决这个问题,并在html中添加唯一的ID

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


还有两个值得一看的替代含义是Gawker的Kinja文本注释(目前在Jalopnik上使用)和rapgenius.com的逐字注释。

在一次培训课程中,我在同一行上创建了一个提琴来展示JQuery的强大功能

这可能有助于作为Sam详细而有用的见解的起点。您可以在Jquery函数中获得textfield的值,您可以使用ajax/API将其发送到CMS

PS:该功能还没有投入生产。它只是作为一个起点。稍加调整就会使其可用。

我最近讨论了如何在现有插件上构建WordPress

与qz.com一样,我在客户端分配段落id,然后在创建新评论时将该信息提供给WordPress作为评论元存储。我使用段落文本散列来创建id,这意味着段落的顺序不重要,但确实意味着如果编辑段落,则任何关联的评论都将成为孤立的

起初我认为这是一个问题,但仔细想想,如果读者对某个段落发表评论,那么随后编辑该段文字似乎有点鬼鬼祟祟

如果您想对其进行分叉和增强,可以在GitHub上免费获得该代码。

(免责声明:我是一名开发人员。)

我在一家公司工作,该公司试图允许在任意网站上对每个段落(或每个短语)发表评论。基本上,你有两种选择来确定评论的主播

  • 记住页面的结构(例如,从根到段落的路径),下次将注释放在同一位置
  • 确定段落内容,下次在相同或类似内容附近放置注释
  • 这两种系统都有其缺点,但如果你想要一个健壮的系统,你几乎需要使用选项2。结构识别在结构变化时是脆弱的。特别是主题或使用的精确html标记等不相关的变化会显著影响“路径”“。当这种情况发生时,你真的无法修复它-除非你检查内容,即选项(2)

    Sam描述了服务器端基于内容的in。纯客户端基于内容的匹配是and(IIRC)的用途。大多数浏览器都支持使用or或在页面内容中进行非标准但快速的子字符串搜索。或者,您可以遍历DOM,这比较慢,但给您实现的灵活性(例如)模糊匹配


    客户端匹配似乎有些过火或复杂,但实际上更简单:这是一种将内容管理与评论分离的非常强大的方法。两者都不是很简单,因此分离这些关注点可能是一种胜利。

    还有一个叫做“commentpress”的wordpress插件,存在已久。 我在我的博客中使用了这个插件的旧版本,它工作得很好

    你可以选择每行或每段评论,人体工程学真的在思考

    这里有一个演示:

    所有代码都在github上:

    在快速查看代码之后,他们似乎使用了第二种方法,如@Eamon Nerbonne解释的。
    他们解析每个段落,根据每个单词的第一个字符生成一个签名。这个函数就是这样做的。

    如果有人来找我,我已经实现了一个类似媒体的功能,作为Django应用程序。 它是开源的,可以在Pypi和上找到

    我使用我的另一个应用程序,为每个内容对象(curre)分配唯一的段落ID