我想使用数据库中的值生成一个菜单。
+------+------+------------+--------------------+--------------+----------+
| 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。
父级 - 0表示没有父级,任何其他值表示菜单中父级项目的ID(上方)。
名称 - 菜单中相应项目的文本。
链接 - 菜单中相应项目的链接。
类型 - 顶部表示菜单中的顶级项目,其余部分标记为自定义。
订单 - 对于热门商品,设置它们首先出现在菜单1中的顺序&gt;更大的数字。对于子项,设置它们在相应子项列表中的显示顺序。
菜单只有一个级别:Top&gt;子
我需要做的是找到一种方法从php&amp;中的这些值生成菜单。 mysqli的。
问题是我不知道应该如何继续..我尝试选择concat for ID和Parent但我缺少一些基本的php技能(总菜鸟)。
我该怎么办?欢迎任何想法,谢谢!
答案 0 :(得分: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,例如,看看它是如何提取类别的。
答案 1 :(得分: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;
没有测试过,但是应该这样做。