0

嗨,

标题说明了一切,我想制作一个带有子菜单的菜单。

所以是这样的:

  • 父母1
    1. 子2
      1. 子 3
  • 父母2

我已经让这个工作了,但是代码看起来不太好。

那么我该如何改进我的代码,或者你是否更了解它,然后发布它。

这是代码:

<?php

$le_content .= '<div id="main_menu">';


$sQuery_get_all_parents = " SELECT
                            menu.id,
                            menu.`name`,
                            menu.url,
                            menu.parent_id
                            FROM `menu`
                            WHERE
                            menu.actif = 1 AND
                            menu.parent_id = 0
                            ORDER BY
                            menu.volgorde ASC";
$rResultaat_get_all_parents = mysql_query($sQuery_get_all_parents) or die(mysqlError($sQuery_get_all_parents));

$menu_parents = array();
$menu_child_1 = array();
$counter = 0;
$counter_child_1 = 0;
$counter_child_2 = 0;

while($row = mysql_fetch_assoc($rResultaat_get_all_parents)){
    $menu_parents[$counter]['id'] = $row['id'];
    $menu_parents[$counter]['name'] = $row['name'];
    $menu_parents[$counter]['url'] = $row['url'];
    $menu_parents[$counter]['parent_id'] = $row['parent_id'];
    $counter++;
}

$le_content .= '<ul id="main_menu_ul">';
foreach ($menu_parents as $menu_entry => $value) {
    $le_content .= '<li><a href="'.ROOT_HREF.$value['url'].'" >'.$value['name'].'</a>';
    $sQuery_get_first_children = "  SELECT
                                    menu.id,
                                    menu.`name`,
                                    menu.url,
                                    menu.parent_id
                                    FROM `menu`
                                    WHERE
                                    menu.actif = 1 AND
                                    menu.parent_id = ".$value['id']."
                                    ORDER BY
                                    menu.volgorde ASC";
    $rResultaat_get_first_children = mysql_query($sQuery_get_first_children) or die(mysqlError($sQuery_get_first_children));
    $row_count = mysql_num_rows($rResultaat_get_first_children);

    if($row_count != false){
        $le_content .= '<ol>';
        while($row = mysql_fetch_assoc($rResultaat_get_first_children)){
            $menu_child_1[$counter_child_1]['id'] = $row['id'];
            $menu_child_1[$counter_child_1]['name'] = $row['name'];
            $menu_child_1[$counter_child_1]['url'] = $row['url'];
            $menu_child_1[$counter_child_1]['parent_id'] = $row['parent_id'];
            $counter_child_1++;
        }

        foreach ($menu_child_1 as $menu_entry_child_1 => $value_child_1) {
            $le_content .= '<li><a href="'.ROOT_HREF.$value_child_1['url'].'" >'.$value_child_1['name'].'</a>';
            $sQuery_get_second_children = " SELECT
                                            menu.id,
                                            menu.`name`,
                                            menu.url,
                                            menu.parent_id
                                            FROM `menu`
                                            WHERE
                                            menu.actif = 1 AND
                                            menu.parent_id = ".$value_child_1['id']."
                                            ORDER BY
                                            menu.volgorde ASC";
            $rResultaat_get_second_children = mysql_query($sQuery_get_second_children) or die(mysqlError($sQuery_get_second_children));
            $row_count = mysql_num_rows($rResultaat_get_second_children);
            if($row_count != false){
                $le_content .= '<ol>';
                while($row = mysql_fetch_assoc($rResultaat_get_second_children)){
                    $menu_child_2[$counter_child_2]['id'] = $row['id'];
                    $menu_child_2[$counter_child_2]['name'] = $row['name'];
                    $menu_child_2[$counter_child_2]['url'] = $row['url'];
                    $menu_child_2[$counter_child_2]['parent_id'] = $row['parent_id'];
                    $counter_child_2++;
                }
                foreach ($menu_child_2 as $menu_entry_child_2 => $value_child_2) {
                    $le_content .= '<li><a href="'.ROOT_HREF.$value_child_2['url'].'" >'.$value_child_2['name'].'</a></li>';
                }
                $le_content .= '</ol>';
            }

            $le_content .= '</li>';
        }
        $le_content .= '</ol>';
    }
    $le_content .= '</li>';
}

$le_content .= '</ul></div>';

?>

最后,我回应 $le_content .....

4

2 回答 2

4
  1. 查询所有菜单项
  2. 构建它们的分层数组(创建一个递归函数来完成它)每个菜单项都应该有一个属性用于它的子集合
  3. 创建另一个递归函数来写入输出
于 2012-07-02T14:21:04.483 回答
0

好吧,我四处搜索,并提出了一个解决方案......使查询更好。我已经按照本教程进行操作,效果很好:

sql和类别

感谢所有的帮助;)

于 2012-07-02T20:46:09.460 回答