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 に答える