4

PHPについてサポートが必要です。正常に機能するマルチレベルのcssメニューがありますが、データベースのレコードに従って生成したいと思います。

メニューコード:

<div id="page-wrap">
    <ul class="dropdown">
        <li><a href="#">Link 1</a> </li>
        <li><a href="#">Link 2</a> </li>
        <li><a href="#">Link 3</a> </li>
        <li><a href="#">Link 4</a>
        <ul class="sub_menu">
            <li><a href="#">Link 4 - 1</a></li>
            <li><a href="#">Link 4 - 2</a></li>
            <li><a href="#">Link 4 - 3</a></li>
        </ul>
        </li>
        <li><a href="#">Link 5</a></li>
        <li><a href="#">Link 6</a> </li>
    </ul>
</div>

データベースでは、すべてのレコードにmain_manuというフィールドがあり、このフィールドの値がYesの場合はメインリンクになり、値がNoの場合は、このリンクが必要な親メニューを示す別のフィールド(sub_menu )があります。置いた。!スクリーンショットを参照してください。 DBフィールド

SO、レコードを取得するphpピースの実行方法がわからないので、main_menuの値がyesの場合はトップレベルのメニューを作成し、main_menuの値がnoの場合はsub_menuフィールドの値に従ってサブレベルメニューを作成します。

どうもありがとう

アップデート

これは私がこれまでに持っているコードであり、機能します。複数のネストされたクエリの代わりに単一のクエリを使用できると便利です。

<div id='page-wrap'>
    <ul class='dropdown'>
<?

$sql_menu = "SELECT * FROM content WHERE visible = '1' and main_menu='yes' ";
$result_menu = mysql_query($sql_menu); 
while($row = mysql_fetch_assoc($result_menu))
 {
$id=$row['id'];
$menu_top=$row['menu_name'];
$menu_url=$row['menu_url'];

print "<li><a href='$menu_url'>$menu_top</a>";

$sql_sub = "SELECT * FROM content WHERE sub_menu = '$menu_url' ";
$result_sub = mysql_query($sql_sub);
$num_rows = mysql_num_rows($result_sub);

while($row = mysql_fetch_assoc($result_sub))
 {
$id=$row['id'];
$menu_sub=$row['menu_name'];
$sub_url=$row['menu_url'];
If ($num_rows != 0)
{
print "<ul class='sub_menu'>
            <li><a href='$sub_url'>$menu_sub</a></li>
       </ul>";
}
}
print "</li>";
}
?>
</ul>
</div>
4

2 に答える 2

0

これらのリンクが役立つと思います。そうでない場合は、コードをお知らせしますのでお知らせください

http://board.phpbuilder.com/showthread.php?10337808-how-to-create-menu-submenu-subsubmenu-using-php-mysql

http://www.sitepoint.com/forums/showthread.php?718237-how-to-create-dynamic-menu-and-submenu-using-php-and-mysql

于 2013-02-10T08:43:29.580 に答える
0

このためのコードは次のようになります (これは、データベースなどとやり取りする方法に応じて変更する必要があります)。

// Here we do a query to get all the rows from the table
$db_result = db_execute_query('SELECT * FROM `menu_table` ORDER BY `order_no`');

// Here we take the rows and put it into a structured array
$items = array();
$hierarchy = array('' => array());
while ($row = db_fetch_row($db_result)) {
    $items[$row['menu_name']] = $row['menu_name_en'];
    if ($row['main_menu'] == 'yes') {
        $hierarchy[''][] = $row['menu_name'];
    } else {
        if (!isset($hierarchy[$row['sub_menu']]) {
            $hierarchy[$row['sub_menu']] = array();
        }
        $hierarchy[$row['sub_menu']][] = $row['menu_name'];
    }
}

// Here we define a recursive function to run through our $hierarchy array;
function show_menu($name = '') {
    if (isset($hierarchy[$name])) {
        if ($name == '') {
                echo '<ul class="dropdown">';
        } else {
                echo '<ul class="sub_menu">';
        }

        foreach ($hierarchy[$name] as $sub) {
            echo '<li><a href="#">' . $items[$sub] . '</a>';
            show_menu($sub);
            echo '</li>';
        }

        echo '</ul>';
    }
}

// Here we execute the recursive function on the main menu
show_menu('');

逐語的に実装するのではなく、ここで何をしているのかを理解するようにしてください。再帰関数を理解すると、まったく新しい世界が開けます。

また、このコードを簡単にするために db テーブルを変更できることに注意してください

于 2013-02-10T10:40:49.213 に答える