【问题标题】:How do you make an infinite dynamic menu system?如何制作无限动态菜单系统?
【发布时间】:2011-12-13 03:33:18
【问题描述】:

我有一个 wiki 类型的应用程序,管理员可以在其中创建页面。每个页面都必须放入由管理员即时创建的菜单系统

Menu Heading
L Subheading
  L Page1

但是,菜单可能会有更多页面,例如:

Menu Heading
L Subheading
  L Page1
  L New Subheading
    L Page2

菜单必须易于修改,并且必须有一种方法可以对标题/副标题以及里面的页面进行排序。

所以基本上,一个完全动态的菜单是我不需要任何静态数据的。

我有一个当前有效的方法,但我无法控制页面顺序。如果我没有得到很多回应如何去做,我会提出我目前的做事方式(我只是不想把想法放在你的脑海里,我正在寻找一种新的方法)

谢谢

编辑:谢谢大家的回复,但是,我认为情况比我现在可以用语言表达的要复杂一些。让我想一个更好的方法来问我的问题......我可能会在下周重新发布

【问题讨论】:

  • “没有任何类型的静态数据”:因为数据库不包含静态数据?

标签: php dynamic menu


【解决方案1】:

使用hierarchical schema,为每个项目添加一个排序顺序,就是这样。

【讨论】:

    【解决方案2】:

    完成具有父 -> 子 -> 子...关系的系统的最简单方法是树。您使用的设置可能如下所示:

     id | name      | parent | tree_left | tree_right
    ----+-----------+--------+-----------+-----------
     0  | root      | NULL   | 0         | 9
     1  | child1    | 0      | 1         | 4
     2  | subchild1 | 1      | 2         | 3
     3  | child2    | 2      | 5         | 8
     4  | subchild2 | 3      | 6         | 7
    

    这将是以下数据库:

    root
    |_ child 1
       |_ subchild 1
    |_ child 2
       |_ subchild 2
    

    您可以通过 2 个简单的查询获得完整的结构,如下所示:

    SELECT * from menu WHERE name = root;
    SELECT * FROM menu WHERE tree_left > $root['tree_left'] AND tree_right <  $root['tree_right'] order by tree_left DESC;
    

    当你添加孩子时,你必须扩大你的父母 tree_left 和 right 之间的差距。当您的子项、子项等时,您应该递归地执行此操作。如果我没记错的话,可以在 1 个查询中完成。

    尝试在网络上搜索更详细的示例,这是一种常用的树结构,称为嵌套集。

    【讨论】:

      【解决方案3】:

      如下结构的表格应该可以做到这一点。

      菜单项 ID |父 ID |订购 |内容

      TopLevelItem1 (MenuItemId: 1)
       |
       |-> MenuItem2 (ParentId: 1, Order 1)
       |-> MenuItem3 (ParentId: 2, Order 2)
      
      TopLevelItem2 (MenuItemId: 4)
       |
       |-> MenuItem4 (ParentId: 4, Order 1)
      

      等等。

      插入项目只需要简单的重新排序。

      【讨论】:

      • 这是一个非常简单的设置,如果您需要超过 1 的深度,则需要找到所有孩子,这将是一场噩梦。
      • 如果你想找到所有的孩子,那是一场噩梦吗?不确定我是否在关注你,除非你的意思是层次结构中的所有孩子。
      【解决方案4】:

      你在找什么,叫做递归,这里是相关问题example,我也建议阅读this article

      【讨论】:

        【解决方案5】:

        你到底想知道什么?

        如果您对结构感兴趣,请查看 MySQL 网站上的this article on hierarchical data

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-23
          • 2015-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          • 2017-03-21
          相关资源
          最近更新 更多