我正在创建一个CMS并使用序列化来处理发布和回滚,这似乎工作正常。基本上,正常的站点表是显示的内容,未显示的任何内容都在一个单独的表中序列化。然而问题在于使“预览”功能起作用。
由于前端是使用普通的SQL调用创建的,并且所有预先发布/回滚的数据都在一个单独的表中,这意味着使用一些奇特的代码更新每个sql语句以将版本更正为预览。对于像限制等问题,这也会特别成问题,并且会成为前端的噩梦。
我能看到的另一种方法是预览副本的单独数据库/表格,但很多人可能正在使用预览功能,我不愿意为每个人使用预览创建一个重复的数据库,因为它会很快失控。
是否有任何方法可以实现预览和回滚预览,但是显示数据库内容的代码不需要太多,也避免了大量重复的问题?
答案 0 :(得分:1)
我不确定将内容数据存储在多个表中,具体取决于其状态。
我会将每个版本的内容存储在同一个表中,其中一个字段的目的是设置内容的状态(旧版本,当前版本,当前正在编辑,根据您的内容编辑工作流程,您想要的任何内容) )。这种状态字段加上日期日期,可以使您的内容版本更易于管理。
我将这种方法用于各种应用程序,并且总是满意于实现回滚,预览甚至更复杂的东西(类似cvs的伪分支......)是多么容易。
答案 1 :(得分:0)
eWolf的含义是,当您拥有单独的模型和视图时,您可以让模型向视图提供不同的数据,然后您不需要复制数据库,而只需创建标准模型和预览模型。
预览模型不必对数据库进行查询,而是在将数据传递给视图之前传递您存储在其中的数据。
考虑这个例子:
//in the controller:
$previewPage->setTitle("foo");
...
//in the view(when previewing):
$previewPage->getTitle(); // returns whatever you stored beforehand
//in the view(regular viewing):
$livePage->getTitle(); // queries the database and returns the result
要详细了解模型 - 视图 - 控制器模式,您可能需要查看this文章。
我希望有所帮助。
答案 2 :(得分:-3)
如果您将模型,视图和控制器分开,这应该没有问题:您只需从控制器中的其他位置获取模型并将其传递给视图。