我正在尝试制作一个菜单,该菜单将从四个表格中获取信息,例如pages
,categories
,sub-categories
和articles
。
例如,我想制作一个菜单,看起来像这样:
Home
Category 1
Subcategory 1.2
Subcategory 1.3
Subcategory 1.1
Category 2
Subcategory 2.3
Subcategory 2.2
Subcategory 2.1
Subcategory 4.1
Article 4.1.2
Article 4.1.3
Article 4.1.1
Page 2 (Services)
Page 3 (Service 1)
Page 4 (Service 2)
Page 4 (Service 3)
Page 1 (About us)
数据库表菜单:
+----+---------+---------------------+-----------+-------+--------+
| id | id_menu | type | parent_id | order | active |
+----+---------+---------------------+-----------+-------+--------+
| 1 | 1 | pages | 0 | 1 | 1 |
| 2 | 1 | sub_categories | 0 | 2 | 1 |
| 3 | 2 | sub_categories | 0 | 4 | 1 |
| 4 | 2 | categories | 0 | 3 | 1 |
| 5 | 3 | sub_categories | 4 | 1 | 1 |
| 6 | 2 | sub_categories | 2 | 1 | 1 |
+----+---------+---------------------+-----------+-------+--------+
(id_menu代表类型的ID)| (parent_id == 0代表菜单的根目录)
输入数据库中的菜单应如下所示:
Page 1
Sub Category 1
Sub Category 2
Category 2
Sub Category 3
Sub Category 2
我选择使用type
作为表名。
基本上,如果我想将category 1 (id == 1)
用作第二个菜单项,则将执行以下操作:
INSERT INTO `menu` (`id_menu`, `type`, `parent_id`, `order`, `active`) VALUES (`1`, `categories`, `0`, `2`, `1`);
我在php中尝试了很多选项来实现它,但是我得到了一个无限循环或一些疯狂的菜单...
我该怎么做?因为我尝试了各种方法,但没有找到相关的解决方案。
我尝试过类似的操作,以使菜单只是一个子菜单。但是然后我得到一个无限循环。
function GetMenuTree($ParentId){
global $conn;
$menu = "";
$MenuData = $conn->prepare("SELECT * FROM menu where parent_id = ?");
$MenuData->execute([ $ParentId ]);
while ($row = $MenuData->fetch()) {
$SQL = "SELECT * FROM " . $row[ 'type' ] . " WHERE id = " . $row[ 'id_menu' ];
$DataForMenu = $conn->prepare($SQL);
$DataForMenu->execute();
foreach ($DataForMenu as $value) {
$menu .= "\n<li><a href='" . $value[ 'title' ] . "'>" . $value[ 'title' ] . "</a>\n";
$menu .= "\n<ul>" . GetMenuTree($row[ 'id_menu' ]) . "</ul>\n";
$menu .= "\n</li>\n";
}
}
return $menu;
}