我正在尝试构建此功能,以显示包含数据库子菜单的菜单。可以显示子子菜单等的东西......如果那是我需要的东西。
在数据库中,我有2个表,menu
和menuItem
。
function get_menu($id) {
require(dirname(__FILE__) . '/config.php');
// main base
$menu = " SELECT id, menu_name, menu_data, menu_order
FROM mos_menuItem
WHERE menu_parent_id='$id'
AND menu_sub='0'
ORDER BY menu_order";
$menuResult = mysqli_query($conn, $menu);
echo '<ul>';
while ($menuRow = mysqli_fetch_row($menuResult)) {
// main menu
echo '<li><a href="'. $menuRow[2] .'" class="menu-item parent-menu">'. $menuRow[1] .'</a></li>';
// sub base
$sub = "SELECT id, menu_name, menu_data, menu_order, menu_sub
FROM mos_menuItem
WHERE menu_parent_id='$menuRow[0]'
AND menu_sub>='1'
ORDER BY menu_order";
$subResult = mysqli_query($conn, $sub);
echo '<ul>';
while ($subRow = mysqli_fetch_row($subResult)) {
echo '<li><a href="'. $subRow[2] .'" class="menu-item sub-menu">'. $subRow[1] .'</a></li>';
}
echo '</ul>';
}
echo '</ul>';
mysqli_close($conn);
}
所以我需要在自己内部循环一些东西?我不知道从哪里开始。
答案 0 :(得分:1)
递归是你最好的朋友。
我不确定menu_sub字段的用途是什么。我假设它告诉你它在菜单层次结构中的级别。如果是这种情况,那么您可以安全地忽略它(menu_parent_id就足够了)来创建这个多级菜单层次结构。
function getMenus($menu_id, $is_sub=false){
$sql = "SELECT id, menu_name, menu_data, menu_order
FROM mos_menuItem
WHERE menu_parent_id='$menu_id'
ORDER BY menu_order";
$mResult = mysqli_query($conn, $sub);
echo '<ul>';
while ($mRow = mysqli_fetch_row($mResult)) {
echo '<li><a href="'. $mRow[2] .'" class="menu-item '.($is_sub ? 'sub-menu' : '').'">'. $mRow[1] .'</a>';
getMenus($mRow[0], true);
echo '</li>';
}
echo '</ul>';
}
这有一个缺点,如果您希望层次结构从0以外的父级开始(我假设您的根menu_id为0),则该特定菜单不会显示在层次结构中。
答案 1 :(得分:0)
所以经过一些试验和错误后我才弄明白。看看Sheikh Azad代码真的很有帮助。
唯一的区别在于我的函数我有AND menu_sub='$sub'
,如果id是相同的话,它不会循环主菜单项。如果这是有道理的。
function mos_get_menu_editor($menuId, $sub) {
require(dirname(__FILE__) . '/config.php');
$item = " SELECT id, menu_name, menu_data, menu_order, menu_sub
FROM mos_menuItem
WHERE menu_parent_id='$menuId'
AND menu_sub='$sub'
ORDER BY menu_order";
$itemResult = mysqli_query($conn, $item);
echo '<ul>';
while ($itemRow = mysqli_fetch_row($itemResult)) {
echo '<li><a href="'. $itemRow[2] .'" class="menu-item ' .($sub ? 'sub-menu' : '').'">'. $itemRow[1] .'</a></li>';
mos_get_menu_editor($itemRow[0], 1);
}
echo '</ul>';
mysqli_close($conn);
}