如何存储我的菜单结构

时间:2011-06-11 00:35:33

标签: php xml dtd

我正在创建一个网站,我希望动态生成菜单。可能影响菜单的因素是页面在网站层次结构中的位置,用户查看页面的访问级别以及页面类型(新闻发布,活动详细信息,产品页面等)。

最初我想过创建一个mysql数据库,其中包含带有外键的菜单项和每个项目的附加详细信息,(菜单项的目标URL,父菜单项,项目标题等)。但是我开始遇到项目排序,多层菜单和多个菜单的问题。

然后我想为什么在我可以拥有一个具有明确声明的结构和顺序的xml文件时使用平面关系数据库。它很少会改变,页面将不得不查询MySQL数据库以获取其内容,它可以包含一些菜单ID。

你能看到这种方法的任何陷阱吗?我没有很多使用xml的经验,除了使用它作为模板,我走路来生成其他结构。在php和javascript中操作有多容易?

2 个答案:

答案 0 :(得分:1)

如果要创建一次菜单层次结构并且极少更新,则可以将对象存储为您选择的序列化数组/对象。这里的优点是serialize() / deserialize()明显快于解析XML。为此,您必须编写代码来更新序列化对象/数组,但您也必须为XML执行此操作。它还会使代码的首选项保持为XML并降低可移植性。对于这个来说,Con在PHP之外并不太便携,而且它非常快

如果你想保持它的便携性,可以应用json_encode / json_decode而不是serialize。这个json_encode的con慢于序列化,比其他语言更容易移植,比如saayyy,Javascript。

在MySQL的防御中,您可以使用adjacency list存储/添加/删除元素到层次结构,而无需使用{{3}}描述的方法,使事情更紧凑。如果列表变得很大并且可以永久地改变成许多不同的格式,那么可以通过一点思维扭曲来解决问题。

答案 1 :(得分:0)

它将与XML一起使用,例如使用SimpleXML。然而,XML有点内存和CPU饥饿。

当您将孔菜单结构作为嵌套数组保存时,最舒适的方法是。那么也许您可以直接在本机PHP中定义您的结构?您可以创建一个文件:

<?php return array(
/* put your nested array structure here */
);

并在您的逻辑中调用此结构,如:

<?php
$structure = include('structure.php');

这项技术并不是众所周知,但非常轻巧,直接!

否则,您可以使用parse_ini_file()或保留XML或直接将其解析为数组。

当你回到数据库解决方案时,“嵌套集”可能会帮助你一次(如果你喜欢复杂但聪明的东西;-))。