静态内容已经成为过去——如今的Web站点全部保持着最新的流行趋势。在我最近的一个企业内部网工程中,我创建了一个内部网站,并开发了一种动态填充菜单。这样可以使为在每次添加新内容而管理链接时无需打开HTML文件。无论对我还是内容拥有者,这都使更新菜单少了很多的麻烦。
当能够相对容易的写出HTML/JavaScript菜单时,为什么还要仔细研究在ColdFusion里创建动态菜单的问题?当然,我们已经用HTML和JavaScript创建了菜单,只需要根据要求修改代码,但这样有什么乐趣?更重要的是,维护程序的方式并不是我想要的。我不希望永远被工程系住,我所在的小组规模很小,并且有很多项目,所以没有时间来维护旧的工程。最终用户和我提出的菜单应该易于管理,并且在页面中只占有很少的初始空间(有三个树状部分接入)。之所以要考虑空间问题是因为站点有很多嵌入的部分,每个部分又含有几个嵌入部分……你会看到我怎么做的。
Figure A 显示了我们将用于菜单的数据表。表格MENU_ITEMS是存放所有实际菜单树的地方。菜单名 (menu_item_name)、HREF (menu_item_url)与主键值(menu_item_id)保存在一起。表格MENU_ITEMS_XREF维护树的自身结构。menu_item_id和child_id从MENU_ITEMS表格中调用menu_item_id。当在child_id栏中存在一个ID时,这表明这个ID会被嵌套在menu_item_id栏的条目下。Figure B表明了这种原理。
表格MENU_ITEMS_XREF最后一栏是sort_order域。最初我只是用生成菜单的菜单查询来处理排序(按字母顺序)。尽管你可能不知道,但对事务单元应该有不同的考虑。所以这里有sort_order域。这能使内容所有者把更重要或被频繁访问的主题放于页面顶部。