我根据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>';
我想知道我是否可以找到任何帮助,以更好的方式,更专业的方式美化这个基本级别的代码? 谢谢你的帮助。
答案 0 :(得分:0)
看看:
http://en.wikipedia.org/wiki/Nested_set_model
将您的三个表重新编码为一个,然后将recurisve调用更改为一个sql语句,并执行一些php循环来创建列表。 :)
答案 1 :(得分:0)
所以我知道这是一个老问题。然而,对于任何偶然发现这一点的人来说,有一个解决方案。它与其他答案相同,但有时也称为Modified Preordered Tree Traversal (MPTT)
某些Web框架(如CakePHP和Django)内置了它并将其称为“树”,它将极大地提高菜单的灵活性并保留顺序。