带有HTML子菜单的动态菜单

时间:2009-09-20 11:02:46

标签: php mysql database dynamic menu

我有一个菜单,就像这样:

<ul id="menu_cat">
    <li><a class="cat1" href="#">category 1</a>
    <ul>
    <li><a class="cat2" href="#">category 2</a>
        <ul>
            <li><a class="cat3" href="#">category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
        </ul>       
    </li>
    <li><a class="cat2" href="#">Category 2</a>
        <ul>
            <li><a class="cat3" href="#">category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
        </ul>
    </li>
    <li><a class="cat2" href="#">Category 2</a>
        <ul>
            <li><a class="cat3" href="#">Category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
            <li><a class="cat3" href="#">category 3</a></li>
        </ul> 
    </li>
    </ul> <!-- End of CAT1-->
    </li> <!-- End of .Krmiva -->
</ul>

现在我需要让它变得动态,所以“类别1,2,3”来自MySQL数据库,但是我可以想到任何其他解决方案,而不是像CAT1,CAT2,CAT3那样使用3个表。对于CAT1中的每个项目,从CAT2中选择子菜单,从CAT3中选择每个CAT2选择子菜单......这意味着要进行20 SELECT * FROM个查询。

有什么想法吗?谢谢,迈克。

2 个答案:

答案 0 :(得分:3)

你最好的选择是只有一个Category表,其中包含一个字段“Parent”,然后你要做的就是根据其父级递归选择每个Category。

因此,首先找到没有父母的第一个类别(或根父母0),然后选择具有前一个类别的第一个类别作为父类。依此类推,直到你所在的类别没有孩子,然后通过表重新回溯过程。

与Eimantas评论中链接的网站点文章给出了非常详细的概述:Storing Hierarchical Data in a Database

答案 1 :(得分:0)

是的,杰米给出了正确的答案。你可以用数据库或其他替代方式维护数据库。你可以为它做准备递归循环。

如果它的2级,我认为它会运作良好,但对于多层次结构,你需要调整你的CSS。