用更简单的方法构建无序列表导航菜单 - Code Beautifying Question

时间:2011-04-29 07:02:51

标签: php dynamic menu navigation

我根据db上的三个表编写了一个动态菜单,它反映了以下级别的框架:

> Section
>> Categories
>>> Subcategory

这是我的代码:

include("connDB.php");

echo '<ul>';
$q1 = mysql_query("SELECT * FROM section ORDER BY section_name ASC");

while($getSection = mysql_fetch_array($q1)) {
    echo "<li><a href='content.php?sec={$getSection['section_id']}&cat='>{$getSection['section_name']}</a>";

    $q2 = mysql_query("SELECT * FROM category WHERE section_id = '{$getSection['section_id']}'");
    if(mysql_num_rows($q2) > 0) {
        echo "<ul>";
        while($getCat = mysql_fetch_array($q2)) {
            echo "<li><a href='content.php?sec={$getSection['section_id']}&cat={$getCat['category_id']}&scat='>{$getCat['category_name']}</a>";

            $q3 = mysql_query("SELECT * FROM subcategory WHERE category_id = '{$getCat['category_id']}'");
            if(mysql_num_rows($q3) > 0) {
                echo "<ul>";
                while($getSubCat = mysql_fetch_array($q3)) {
                    echo "<li><a href='content.php?sec={$getSection['section_id']}&cat={$getCat['category_id']}&scat={$getSubCat['subcategory_id']}&getDetail='>{$getSubCat['subcategory_name']}</a></li>";
                }
                echo "</ul>";
                echo "</li>";
            }
        }
        echo "</ul>";
        echo "</li>";
    }
}
echo '</ul>';

我想知道我是否可以找到任何帮助,以更好的方式,更专业的方式美化这个基本级别的代码? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

看看:

http://en.wikipedia.org/wiki/Nested_set_model

将您的三个表重新编码为一个,然后将recurisve调用更改为一个sql语句,并执行一些php循环来创建列表。 :)

答案 1 :(得分:0)

所以我知道这是一个老问题。然而,对于任何偶然发现这一点的人来说,有一个解决方案。它与其他答案相同,但有时也称为Modified Preordered Tree Traversal (MPTT)

某些Web框架(如CakePHP和Django)内置了它并将其称为“树”,它将极大地提高菜单的灵活性并保留顺序。