构建自定义CMS,如何处理页面设置?

时间:2010-06-12 21:52:07

标签: coldfusion content-management-system

不是特定于冷血的问题,所以你可以回答。

我继承了一个ColdFusion项目,在每个页面的顶部设置了各种页面设置特定变量,例如:

<cfset request.page.title = "Example Page">
<cfset request.page.machineTitle     = "example_page">
<cfset request.page.isJQueryEnabled  = 1>
<cfset request.page.showNavigation   = 1>
<cfset request.page.SWFObjectVersion = 2.2>

我正在考虑用

创建一个数据库表
integer page_id
varchar key
varchar value

我会将每个页面顶部的变量减少到只有页面ID,然后调用数据库以获得正确的设置。

这是个好主意吗? 我讨厌重新发明轮子,但这是一个非常大的项目,需要很长时间才能完全内容迁移到CMS。

目前存储页面设置的做法是什么? (例如,WordPress做什么?Drupal?等等)

----编辑----

添加新功能/页面特定脚本变成了一场噩梦,因为我必须打开每个文件并添加/编辑/删除变量。没有打开它们或使用命令行(我肯定会给其他开发人员带来不便),无法确定哪些页面正在使用哪些变量。

另外,当我得到一堆过时的变量时会发生什么?例如,最终“usePrototype”变量将被逐步淘汰,整个网站将使用jQuery。

另一种方法是创建并包含一个带有巨型开关块的文件,用于设置这些变量。这已经完成了一些事情(例如元标记 - switch on request.page.machine title, case xxx <meta tag whatever>)。这是一团糟。

3 个答案:

答案 0 :(得分:1)

如果我理解你的建议,那么你有一堆页面有一行设置页面标题。您希望为每个页面分配一个标识号,然后从页面中删除页面标题,然后将其存储在数据库中。当用户请求页面时,而不是仅使用页面中的页面标题,而是必须按页码标题查询数据库。

如果这是你的建议,那么结果将是:

  • 较长的页面加载时间
  • 增加了数据库利用率和争用
  • 降低了代码的可读性(如果不在表中查找,则无法找到页面标题)
  • 错误增加的可能性(编辑表格时很容易将第45页误认为第54页。)

这会使事情变得不那么明确,而不是更清楚。

我无法与Drupal交谈,但Wordpress将整个页面(或帖子)与其他元数据一起存储在表格中。 Wordpress将表中的数据与一组模板文件组合在一起,并将complate页面返回给用户。该表将有一个数字键,但也有其他非主键数据,可用于定位给定页面(标题,段塞,类别,标签,日期等)

答案 1 :(得分:1)

在CF中,您拥有超级酷Application.cfm(传统)或Application.cfc(现代)模板。他们是全球性的。它们很强大。它们很灵活(cfc更多)。

  • 您可以从数据库中提取全局设置并存储到应用程序范围中以便快速重复使用。
  • 您可以阅读每个请求的每页设置,并将其放入所需的范围request.page
  • 您甚至可以阅读所有页面的信息(使用CGI范围查找当前页面)并将其缓存在应用程序范围内(或内置缓存系统 - 可用于CF9和Railo)。
  • 您可以暂时缓存已访问过的网页的信息,以便快速重复使用。

答案 2 :(得分:1)

从Db调用并不是一个坏主意,因为您将集中配置。这取决于你的设置,但coldfusion应该能够应付这样的负荷。

调查Application.cfm或Application.cfc - 当包含在文件夹的根目录中时,在页面运行之前调用这些文件中的代码。因此,它们可以包含常见任务,例如加载这些变量。 (Application.cfc稍微复杂一些,但也可以在页面运行后执行清理工作)。

您可以执行以下操作以节省一些时间。使用onReqestEnd方法创建Application.cfc文件(需要Coldfusion MX7或更高版本)。在该方法中包括将当前设置的页面变量保存到Db的代码(如果以前没有保存过)。如果页面还没有ID,您可以使用CGI.varibles来撤回当前URL。然后当人们查看页面时,他们会自动保存到Db。单击该站点以确保一切都已保存。安装代码以在App.cfc onRequestStart方法中撤回配置,并执行regexp查找和替换以终止所有内联设置。