2010-06-12 31 views
1

不是一个coldfusion特定的问题,所以你可以回答。构建自定义CMS,如何处理页面设置?

我继承,其中在每个页面的顶部不同页面设置特定的变量设置一个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,然后调用DB进行正确的设置。

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

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

---- ----编辑

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

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

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

+0

你想解决什么问题?目前的方法有什么问题?重构所有现有的(工作)页面以使用不同的方法会给您带来什么样的好处? – 2010-06-12 22:00:32

+0

在eclipse中,您可以搜索并以秒为单位替换所有出现的字符串。我会把它放在Application.cfc中的onRequest方法中。每次调用数据库获取SWFObjectVersion对我来说似乎都有点儿麻烦。 application.config.request.SWFObjectVersion是其中一个选项。 – 2010-06-13 09:02:24

回答

1

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

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

  • 更长的页面加载时间
  • 提高数据库的利用率和争
  • 降低代码的可读性(页面标题可以”如果没有在表格中找到它)
  • 错误的可能性增加(编辑表格时很容易将第45页误认为第54页)。

这会让事情变得不太清晰,而不是更清楚。

我无法对Drupal说话,但Wordpress会将整个页面(或文章)与其他元数据一起存储在表格中。 Wordpress会将表中的数据与一组模板文件结合起来,并向用户返回一个压缩页面。该表格将具有数字键,但也有其他非主键数据可用于定位给定页面(标题,段落,类别,标签,日期等)。)

+0

好的,你列出的结果不应该太大,以免影响网站的性能,所以我可能会继续。谢谢。 至于识别我正在编辑哪个文件,文件路径/名称/和内嵌评论标题就是这样做的。我还会创建一个简单的页面管理器来显示页面标题,可能会影响它的url,以及输入/复选框来切换变量并添加新变量。 – davidosomething 2010-06-13 06:16:07

1

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

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

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

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

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

相关问题