首頁  >  問答  >  主體

在 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粉052724364175 天前273

全部回覆(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
  • 取消回覆