我目前使用的内容管理系统只支持数据(新闻、事件、博客、文件等)的实时编辑,并且我被要求构建一个支持起草(带审核)+修订历史系统的系统。我使用的cms是在内部开发的,所以我可能不得不从头开始编写代码。
在每次保存项目时,它都会在“时间线”中创建数据的快照。草案也是如此。自动化功能将在需要时将时间线草稿拉入原始记录中。
时间线表将存储数据类型&主键、数据的序列化版本+创建/修改日期+起草日期(如果在将来)
我已经快速浏览了一下其他系统,但我还没有从我目前的想法中改进。
我相信已经有人构建了这样的系统,我想在开始构建之前改进我的设计。任何好的文章/资源也会有所帮助。
谢谢
发布于 2009-06-30 08:04:50
我认为使用serialize()将每行编码为单个字符串,然后将其保存到中央数据库可能是一种解决方案。
你会有你的‘实时’数据库和相关的表等,但是当你编辑或创建一些东西(没有点击发布)时,它将不是保存在你的主表中,而是保存到一个表中,比如:
id - PRI INT
date - DATETIME
table - VARCHAR
table_id - INT
type - ENUM('UNPUBLISHED','ARCHIVED','DELETED');
data - TEXT/BLOB未发布设置为‘...with’的类型,并存储表和table_id,以便它知道它来自哪里。然后单击publish将序列化当前表的内容,将其存储在上面设置为“archive”的表中,然后读出最新的更改(标记为未发布)并将其放入数据库中。这同样适用于删除行-将它们放入并标记为“已删除”,以实现潜在的取消删除/回滚功能。
它需要相当多的跑腿工作才能让它全部工作,但应该提供完整的发布/取消发布和回滚功能。正确地集成到自定义数据库函数中,也可以透明地完成所有这些操作(从SQL的角度来看)。
我一直计划将此作为解决您似乎遇到的相同问题的解决方案,但从我的角度来看,这仍然是理论上的,但我认为这个想法是合理的。
发布于 2009-06-30 06:50:31
对我来说这听起来很像wiki。您可能想看看维基百科使用的系统MediaWiki,它也使用PHP和MySQL。
发布于 2009-06-30 06:37:37
DotNetNuke是一个很好的开源内容管理系统,你可以阅读该系统的源代码来获得灵感。或者,您可以简单地使用DotNetNuke。
http://www.dotnetnuke.com/
https://stackoverflow.com/questions/1062011
复制相似问题