如何使用PHP和MySQL显示包含许多子类别的侧面导航菜单?

时间:2009-10-24 15:59:35

标签: php mysql

好的,我想知道如何使用PHP和MySQL创建和显示包含许多类别和子类别的侧面导航菜单?

我只是不知道从哪里开始编写PHP代码?

<ul>
   <li><a href="" title="">First Nested Link</a></li>
   <li><a href="" title="">First Nested Link</a></li>
   <li><a href="" title="">First Nested Link</a>
      <ul>
        <li><a href="" title="">Second Nested Link</a></li>
        <li><a href="" title="">Second Nested Link</a></li>
        <li><a href="" title="">Second Nested Link</a>
          <ul>
            <li><a href="" title="">Third Nested Link</a></li>
            <li><a href="" title="">Third Nested Link</a></li>
            <li><a href="" title="">Third Nested Link</a>
              <ul>
                <li><a href="" title="">Fourth Nested Link</a></li>
                <li><a href="" title="">Fourth Nested Link</a></li>
                <li><a href="" title="">Fourth Nested Link</a></li>
              </ul>
            </li>
            <li><a href="" title="">Third Nested Link</a></li>
            <li><a href="" title="">Third Nested Link</a></li>
          </ul>
        </li>
        <li><a href="" title="">Second Nested Link</a></li>
        <li><a href="" title="">Second Nested Link</a></li>
      </ul>
   </li>
   <li><a href="" title="">First Nested Link</a></li>
   <li><a href="" title="">First Nested Link</a></li>
</ul>

这是我的MySQL表格。

* categories
      id | category_name | description
* sub_categories
      id | parent_id | category_name | description

1 个答案:

答案 0 :(得分:1)

您的类别只需要一张表;只需将顶级类别的parent_id字段设置为null。

至于实际生成HTML,您可以沿着这些行(伪代码)执行某些操作,其中$category_data是二维数组中查询的结果,$category_id是正在生成父类别。要开始使用,请使用$category_id = 0

function print_category($category_data, $category_id)
{
    print "<ul>";
    foreach ($category_data as $category)
    {
        if ((integer)$category['parent_id'] == $category_id)
        {
            print "<li>" . $category['category_name'] . "</li>";
            print_category($category_data, $category['id']);
        }
    }
    print "</ul>";
}

您必须为自己的布局和表格结构修改它。您可以通过将数组转换为三维数组$category_data[parent_id][id][category_row]来提高性能(如果您有大量类别)。