0

我正在构建一个微型 CMS。使用 Mysql 作为 RDMS,使用 Doctrine ORM 进行映射。

我想要两种类型的页面。静态页面和博客页面。静态页面会有 page_url 和 page_content 存储在数据库中。博客页面会有 page_url,但没有 page_content。博客会有帖子、类别...

可以说我有这样的路线:

/{pageurl}

这是页面,页面 url 可以是主页、新闻或博客……该页面可以是静态页面,然后我会打印 page_content。但它也可以是博客页面,然后我会打印最新的帖子作为内容。

我应该如何关联这些静态页面和博客页面表?这是继承吗,因为两者都是页面,具有它们的 URL,但它们具有不同的内容?我应该使用继承,以便静态页面和博客页面都扩展具有 page_url 的页面吗?或者我应该创建另一个表 page_types 并存储有关可用页面类型的信息?

4

1 回答 1

1

一般来说,我说的是 MVC 框架,当你使用路由时,你会有一个特定的模式,你可以匹配不同的控制器/动作,然后可以映射到不同的模型和视图。

例如,标准页面 URL 的格式为:

/{pageurl}

而博客页面的页面 URL 将是:

/blog/{pageurl}

这将使区分两者并相应地路由变得非常容易。如果它与模式匹配/blog/*,那就是博客!但是,假设您不想采用最简单的方法,而是决定让所有 URL 都遵循相同的模式:/{pageurl}. 您的实际 URL 列表应全部存储在数据库中的单个表中,假设它名为site_pages. site_pages您和之间的关系将是命名中blogs的一列,它是返回表的外键。blogspage_idsite_pages

有了这个,您有几种方法可以确定您正在查看的页面类型:

  • 向表中添加新列site_pages,例如is_blog; 它设置好了,你有一个博客!
  • 每次在数据库中查找页面时,也会得到count()特定页面的博客条目;如果是> 0,您有一个博客页面。否则将其显示为静态内容。
  • 假设如果page_content为空,则为博客。

一旦确定页面是静态页面还是博客页面,您可以加载相应的模型 - “页面”或“博客页面”。BlogPage 可以并且可能应该扩展 Page,因为它们具有相同的目的。两者之间的唯一区别是“页面”只是加载页面的文本内容,而视图只是将其写出来。另一方面,“博客页面”将加载类别、帖子等列表,视图将遍历它们并以您认为合适的方式显示它们。

于 2012-10-12T13:10:03.487 回答