2012-04-24 114 views
0

我只是想知道这里的人们的意见,也许一些指导如何最好地实现的东西。从mysql数据库创建菜单结构

我有什么,是一个非常基本的内部网,只需旨在满足了公司范围内的文档和文件。它在页面顶部有一个基本的菜单栏,它有一个顶级菜单项,然后是子菜单/项目。很明显,菜单可以级联到很多级别,并且是一个简单的JavaScript,我使用了动态驱动器,它将一个html结构转换为菜单。

基本思路是这样的:

<li><a href='#'>Top Level 1</a> 
    <ul> 
     <li><a href='#'>Item 1</a></li> 
     <li><a href='#'>Item 2</a></li> 
     <li><a href='#'>Sub menu 1</a> 
      <ul> 
       <li><a href='#'>Sub Item 1</a></li> 
      </ul> 
     </li> 
    </ul> 
</li> 

因此,这是用来创建菜单。每当你开始一个新的< ul>元素时,它将创建一个子菜单。

这工作得很好,但它是一个有点疼痛,因为我不得不手动去创建一个新的链接,删除旧等每次出现在网站上的文档的变化。

我所希望做的,是移动这个结构到我的数据库,这样我可以使用基本的HTML表单和PHP脚本,需要时插入,更新和删除链接。

如果我不能这样做,它还可以让管理员上传新文件。

我曾与一个快速的打法,并发现一个选项,这类作品的,但它是一个有点笨重,可能是保持前进痛苦。

基本上,我会与下面列出的列的表:

  • 文件ID
  • 文件名
  • 文件路径
  • 菜单
  • 子1
  • 子2
  • 子3
  • 标签
  • 公开赛在
  • 我能做些什么,就是有一个唯一的ID为基准,输入一起,可用于在href链接指向的文件位置的文件名和文件路径。 然后,我可以使用菜单和3个子菜单字段来告诉它在菜单结构中放置该项目的位置。标签只是给出链接的名称,而open打开告诉页面打开文档的位置,即_new,frame,ifram等。

    然后,PHP可以使用mysql查询来查找菜单中的所有项目并将它们回显出来。问题出现了,我需要为每个菜单和子菜单提供单独的MySQL查询,这意味着整个菜单最终可能会充满MySQL查询。

    任何人都可以建议更好的解决方案,或帮助使PHP尽可能简单和灵活?

    非常感谢

    编辑:

    可以提供一些例子PHP的如果需要的话,但他们都相当大。

    回答

    2

    此我所知最好的做法是嵌套树结构,其逻辑是在两个字:

    所需的表的字段: ID,PARENT_ID,左,右

    然后,在添加第一行中,你得到这个值

    1, 0, 1, 2 
    

    未来将提高像左,右领域:

    2, 0, 3, 4 
    3, 0, 5, 6 
    

    如果我们需要做的子目录的第一个项目,全部结构是这样的:

    1, 0, 1, 4 
    2, 0, 5, 6 
    3, 0, 7, 8 
    4, 1, 2, 3 
    

    这样你就可以轻松地通过留下下令所有的树,然后只检查每一行的父级的值,如果存在的parrent,来计算它自己的水平。

    +2

    你打算如何使用left **和right **? – 2012-04-24 15:07:12

    +0

    左右是告诉你树的真实结构..你可以很容易地采取三级项目的父母,同样容易采取任何项目的所有儿童。所以如果我们需要1个分支的所有子女和子女,则取左边> 1和右边<4。如果只需要1个分支的孩子,可以通过parent_id获取。 – Anton 2012-04-24 21:25:17

    +0

    我发现这篇文章帮助我理解左右值:http://www.sitepoint.com/hierarchical-data-database-2/ – Drahcir 2012-08-24 16:47:51