suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Zeigen Sie Kategorien als (ul)-Elemente und Unterkategorien als (li)-Elemente in PHP an

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;
}

Ich habe eine Baumansicht mit PHP erstellt und die Funktion, die die Baumansicht extrahiert, extrahiert die Kategorien und ihre Unterkategorien korrekt. Die Kategorientabelle in der Datenbank enthält eine Spalte, die den angegebenen Wert (1/0) enthält, wobei 1 die Hauptkategorie und 0 die Unterkategorie darstellt. Das Problem, mit dem ich konfrontiert bin, besteht darin, dass es beim Abrufen der Kategorien aus der Datenbank keinen Unterschied macht, ob es sich bei den Kategorien um Hauptkategorien oder Unterkategorien handelt. Sie werden alle als li-Elemente angezeigt und ich verwende CSS-Formatierung in der Baumansicht, um die Ordnersymbole für die Listenelemente zu erstellen. Die Frage ist, wie die Hauptkategorie mit dem Wert 1 in der Kategorietabelle als ul-Element angezeigt werden soll, das ein Ordnersymbol enthält, das geöffnet werden kann, um den darin enthaltenen Inhalt anzuzeigen, und die Unterkategorie mit dem Wert 0 in der Kategorietabelle als li angezeigt werden soll Element ohne beliebiges Ordnersymbol (d. h. nur Unterkategorienamen werden als Text angezeigt).

Mein Output

Ich benötige die Ausgabe wie im Bild gezeigt.

P粉052724364P粉052724364227 Tage vor332

Antworte allen(2)Ich werde antworten

  • 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

    Antwort
    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;

    Antwort
    0
  • StornierenAntwort