首页  >  问答  >  正文

在 php 中将类别显示为 (ul) 项目并将子类别显示为 (li) 项目

function showcategory($parentid)
{
     $sql = "select * from categories where parent_id='".$parentid."'";
     $result = mysqli_query($GLOBALS['conn'],$sql);
     $output ="<ul id ='tree1' >\n";
    while($data=mysqli_fetch_array($result))
    {
        $output.="<li>\n".$data['name'];
        $output.=showcategory($data['id']);
        $output.="</li>";
    }
    $output.="</ul>";
    return $output;
}

我有一个使用 PHP 创建的树视图,提取树视图的函数可以正确提取类别及其子类别。数据库中的类别表有一列保存指定值 (1/0),其中 1 表示主类别,0 表示子类别。我面临的问题是,当我从数据库中提取类别时,类别是主类别还是子类别没有区别。它们都显示为 li 元素,我在树视图上使用 CSS 格式在列表项上创建文件夹图标。问题是如何将类别表中值为 1 的主类别显示为 ul 元素,该元素包含一个可以打开以显示里面内容的文件夹图标,以及类别表中值为 0 的子类别应显示为 li 元素,没有任何文件夹图标(意味着只有子类别名称显示为文本)。

我的输出

我需要获得如图所示的输出。

P粉052724364P粉052724364225 天前328

全部回复(2)我来回复

  • P粉317679342

    P粉3176793422024-04-01 16:10:54

    我建议您修改代码,以便考虑该项目是主类别还是子类别。

    “保存指定值 (1/0) 的列,其中 1 表示主类别,0 表示子类别” - 假设该列名为 type

    function showcategory($parentid)
    {
        $sql = "select * from categories where parent_id='".$parentid."'";
        $result = mysqli_query($GLOBALS['conn'],$sql);
        $output ="
      \n"; while($data=mysqli_fetch_array($result)) { $output.= '
    • '.$data['name']; if ($data['type']) { $output.=showcategory($data['id']); } $output.="
    • "; } $output.="
    "; return $output; }

    然后您应该能够使用 CSS 来设置子类别节点的样式,匹配 li.type0

    回复
    0
  • P粉513318114

    P粉5133181142024-04-01 12:10:04

    我建议您只查询数据库一次,而不是将数据库查询放入递归函数中。

    您需要检查菜单项的主要位置(基于类型值 0/1)。这会将 class='main' 添加到主项目,您可以使用 css 来设置主图标的样式。让我们尝试一下这个修改。

    function showcategory($data, $parentId = 0) {
    $menu = '
      '; foreach ($data as $item) { if ($item['parent_id'] == $parentId) { $menu .= ''; // Recursive call to build sub-menu if it has children $submenu = showcategory($data, $item['id']); if ($submenu) { $menu .= $submenu; } $menu .= ''; } } $menu .= '
    '; return $menu; } $sql = "select * from categories where parent_id='".$parentid."'"; $result = mysqli_query($GLOBALS['conn'],$sql); $data=mysqli_fetch_array($result) $menu = showcategory($data); echo $menu;

    回复
    0
  • 取消回复