我写了一个动态菜单基于三个表在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>';
我想知道我是否能找到任何帮助来美化这个基本级别的代码,以更好的方式,更专业的方式?谢谢你的帮助。
看一下:
http://en.wikipedia.org/wiki/Nested_set_model将三个表重新建模为一个表,然后将递归调用更改为一个SQL语句,并执行一些php循环来创建列表。:)
所以我知道这是一个老问题。然而,对于任何偶然发现这一点的人来说,都有一个解决方案。它和另一个答案是一样的但有时也被称为修改预序树遍历(MPTT)
一些web框架,如CakePHP和Django,已经将其内置,并将其称为"树",这将大大增加菜单的灵活性,并保持秩序。