-1

我想用数据库中的值生成一个菜单。

+------+------+------------+--------------------+--------------+----------+
| ID   |Parent| Name       | Link               | Type         | Order    |
+------+------+------------+--------------------+--------------+----------+
|    1 | 0    | Some Name 2| /path1             | Top          | 1        |
|    2 | 1    | Some Name A| /path2             | Custom       | 1        |
|    3 | 0    | Some Name x| /path3             | Top          | 2        |
|    3 | 1    | Some Name e| /path4             | Custom       | 2        |
|    4 | 1    | Some Name 3| /path5             | Custom       | 3        |
|    5 | 6    | Some Name t| /path6             | Custom       | 1        |
|    6 | 0    | Some Name i| /path7             | Top          | 3        |
+------+------+------------+--------------------+--------------+----------+

菜单应如下所示:

<a href="/path1">Some Name 2</a>
- <a href="/path4">Some Name e</a>
- <a href="/path5">Some Name 3</a>

<a href="/path3">Some Name x</a>

<a href="/path7">Some Name i</a>
- <a href="/path6">Some Name t</a>

ID - 是唯一的 ID。

Parent - 0 表示没有父项,任何其他值表示菜单中父项的 ID(上图)。

名称 - 菜单中相应项目的文本。

链接 - 菜单中相应项目的链接。

类型 - 顶部表示菜单中的顶级项目,其余标记为自定义。

顺序 - 对于顶级项目,设置它们在菜单中出现的顺序 1 是第一个 > 更大的数字。对于子项目,设置它们在相应子项目列表中的显示顺序。

菜单只有一级:顶部 > 子

我需要做的是找到一种方法来从 php & mysqli 中的这些值生成菜单。

问题是我不知道应该如何进行。我尝试为 ID 和 Parent 选择 concat,但我缺乏一些基本的 php 技能(完全是菜鸟)。

我应该如何进行?欢迎任何想法,谢谢!

4

2 回答 2

2

现在想到的一些快速解决方案(未经测试):

function getCategories($parentID = 0, $level = 0) {
    $categories = array();

    $query = 'SELECT * FROM `table` WHERE `Parent` = '.(int)$parentID.' ORDER BY `Order` ASC';
    $dbCats = runQuery($query); // you have to implement this

    foreach ($dbCats as $cat) {
        $categories[] = str_repeat('-', $level) . '<a href="'.$cat->Link.'">'.$cat->Name.'</a>' . "\n";
        $categories += getCategories($cat->ID, ++$level);
    }

    return $categories;
}
$categories = getCategories();
echo implode('', $categories);

但是,您应该以 Open Cart 为例,看看它是如何提取类别的。

于 2013-06-27T23:24:47.070 回答
1

首先在第一个查询中选择所有顶部菜单,然后创建一个循环,它将全部检索。在第一个循环中创建另一个查询,它将检索所选菜单的所有子菜单,如果有的话。这就是为什么我们也有 if 语句..在 if 语句中创建循环以检索所有子菜单...这是代码:

    $sql = "SELECT * FROM `table` WHERE `Parent` = '0' ORDER BY `Order` ASC";
    $result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error());
    $output = "<ul>";
    while ($rs = mysql_fetch_array($result)) {
       $output .= "<li><a href='".$rs['Link']."'>".$rs['Name']."</a></li>";
       $sql2 = "SELECT * FROM `table` WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC";
       $result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error());
       if (mysql_num_rows($result2) != 0) {
          $output .= "<ul>";
          while ($rs2 = mysql_fetch_array($result2)){
             $output .= "<li><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>"
          }
          $output .= "</ul>";
       }
    }
    $output .="</ul>";
    echo $output;

没有测试过,但这应该可以。

于 2013-06-28T01:17:50.370 回答