我正在寻找动态创建复杂导航元素的最佳方法。我拥有数据库中的所有元素(title,id,parentId),我想有效地将它们从数据库中取出并正确显示它们。我还想要折叠所有非活动的导航元素。因此,如果我浏览“沙发”,我不会看到“枝形吊灯”或灯光下的任何类别,但我会看到“照明”。
这就是我希望最终产品的样子:
我目前的方法是
我正在尝试尽可能少的互动,我确信我现在的代码效率低下。特别是第2步,我多次遍历数组。这个(常见的)问题必须有一个通用的解决方案。
答案 0 :(得分:2)
考虑在数据库表中添加新字段:level
主要类别将level
0。
子类别将level
1
子类别将有level
2.
等
这个技巧将帮助您了解在没有第二次迭代的情况下禁用哪些子类别。
答案 1 :(得分:0)
我相信这是使用递归生成html代码的最佳位置。 我刚才使用过这个功能。它正在使用多维数组(树)
function buildMenu($menu_array, $is_sub=FALSE) {
$attr = (!$is_sub) ? 'id="menu"' : 'class="submenu"';
$menu = "<ul $attr>\n";
foreach($menu_array as $id => $elements) {
foreach($elements as $key => $val) {
if(is_array($val)) {
$sub = buildMenu($val, TRUE);
}
else {
$sub = NULL;
$$key = $val;
}
}
if(!isset($url)) {
$url = $id;
}
$menu .= "<li><a href=\"$url\">$display</a>$sub</li>\n";
unset($url, $display, $sub);
}
return $menu . "</ul>\n";
}
echo buildMenu($menu_array);
这也增加了css属性。如果您希望标记当前活动的页面,可以使用strpos()功能查找当前的网址。如果您需要更多功能,可以轻松将其添加到buildMenu()
使用上面答案中提到的级别也会有所帮助。如果你在数据库中使用嵌套集模型,我也可以帮助你查询,这是一个选择返回整个菜单数据。