首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ZTree + PHP 實現無限級樹形目錄:遞歸查找節點完整實戰

     編輯:PHP 相關知識

ZTree + PHP 實現無限級樹形目錄

在後台管理系統中,無限級分類樹是常見需求。本文以 jQuery 插件 ZTree 為前端渲染引擎,結合 PHP 遞歸算法從數據庫構建 JSON 數據,完整演示從前端配置到後端遞歸查詢的落地過程。

前端準備:引入 ZTree 核心文件

<script src="__PUBLIC__/js/jquery-1.4.4.min.js"></script>
<script src="__PUBLIC__/js/jquery.ztree.core-3.5.js"></script>
<link rel="stylesheet" href="__PUBLIC__/css/zTreeStyle/zTreeStyle.css" type="text/css">
<link rel="stylesheet" href="__PUBLIC__/css/zTree.css" type="text/css">

頁面結構與初始化邏輯

<div class="content_wrap" style="background:#666;">
  <div class="zTreeDemoBackground left">
    <ul id="treeDemo" class="ztree"></ul>
  </div>
</div>
<div class="content-text" id="text"></div>

單獨 JS 文件 ztreeonload.js 中完成配置與異步加載:

var setting = {
  isSimpleData: true,   // 採用簡單 Array 格式
  showLine: true,       // 顯示節點連線
  checkable: true,      // 顯示複選框
  callback: { onClick: zTreeOnClick }
};
var zNodes;
$.ajax({
  url: "/admin.php/Ztree",   // 後端接口(ThinkPHP 路由示例)
  type: "get",
  async: false,
  dataType: "json",
  success: function(data) { zNodes = data; },
  error: function() { alert('請求失敗'); }
});
$(document).ready(function() {
  $.fn.zTree.init($("#treeDemo"), setting, zNodes);
});

後端遞歸算法(ThinkPHP 示例)

<?php
// 入口:構建頂級節點數組並輸出 JSON
$arr = array();
$arr_str0 = array("name" => '函數庫查詢', 'children' => $this->SelectSon(1)); // Pid=1
$arr_str1 = array("name" => '數據庫查詢', 'children' => $this->SelectSon(2)); // Pid=2
array_push($arr, $arr_str0, $arr_str1);
echo json_encode($arr);

// 遞歸查找子節點
private function SelectSon($Pid) {
  $m = M('ztree');
  if ($info = $m->where("Pid='$Pid'")->select()) {
    $data = array();
    for ($i = 0; $i < count($info); $i++) {
      $da = array(
        "name" => $info[$i]['name'],
        'children' => $this->SelectSon($info[$i]['id'])  // 遞歸
      );
      array_push($data, $da);
    }
    return $data;  // 同級子節點一次性返回
  }
  return null;
}
?>

核心思想總結

  1. 靜態數據先行:先用固定 JSON 驗證 ZTree 渲染無誤,掌握 children 結構規律。
  2. 動態遞歸構建:後端以 Pid 為鍵遞歸查詢,將查詢結果組裝為 {name, children} 結構,最終 json_encode 輸出。
  3. 框架無關性:示例雖用 ThinkPHP M() 操作模型,但純 PHP 中只需替換為 PDO/MySQLi 查詢,遞歸邏輯完全一致。

掌握「遞歸查詢 + JSON 組裝 + 前端異步初始化」這一模式,即可輕鬆應對任意深度的樹形結構展示需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved