Easyui 菜單樹執行個體 PHP+MySQL後台載入json

來源:互聯網
上載者:User

執行個體一 PHP+MySQL+Easyui tree菜單從後台載入json資料

實現功能:從資料庫載入出所有的資料庫名,相應的資料庫載入對應的資料庫表名

非同步載入Tree

tree 支援內建的非同步載入模式,使用者建立一個空的tree,然後定義一個遠程伺服器網站返回json資料用於填充tree來非同步滿足非同步載入需求

<ul id="tree"></ul>



使用javascript載入資料

<script>$('#tree').tree({    url:'tree_getData.php'});</script>


tree的載入是通過URL  'tree_getDat.php'網站.子節點的載入依賴於父節點的狀態.當展開一個關閉節點,如果節點沒有子節點載入,將發送節點id值作為http參數,參數命名為'id'到遠程伺服器,通過以上URL定義.檢索子節點資料
查看一組從伺服器返回的資料

[{       "id": 1,       "text": "Node 1",       "state": "closed",       "children": [{           "id": 11,           "text": "Node 11"      },{           "id": 12,           "text": "Node 12"      }]   },{       "id": 2,       "text": "Node 2",       "state": "closed"  }]


我們需要做的是將後台返回的資料拼湊成上述格式
前台代碼即為上述代碼
後台代碼如下:

<?phprequire('./mysql_connect/mysql_connect.php');$db_select=@mysqli_select_db($dbc,'information_schema');if($dbc){        //查詢所有資料庫名稱        $sql="select SCHEMA_NAME from schemata where SCHEMA_NAME not in         ('information_schema' , 'performance_schema' , 'mysql')";        $rs=@mysqli_query($dbc,$sql);        if($rs)        {                //儲存最終結果            $items=array();            //            $result=array();            while($row=mysqli_fetch_array($rs,MYSQLI_ASSOC))            {                //echo $row['SCHEMA_NAME']." ";                $result['id']=$row['SCHEMA_NAME']; //id                //中間值                $schema_name=$row['SCHEMA_NAME'];                                $result['text']=$row['SCHEMA_NAME']; //text                $result['state']="closed";  //state                $children=array();                //echo $schema_name." ";                //$sql="select TABLE_NAME from tables where TABLE_SCHEMA=$row['SCHEMA_NAME']"; 顯示sql語句錯誤                $sql="select TABLE_NAME from tables where TABLE_SCHEMA='$schema_name'";                $res=@mysqli_query($dbc,$sql);                while($r=mysqli_fetch_array($res,MYSQLI_ASSOC))                {                    //    echo $r['TABLE_NAME']." ";                        $table_name=$r["TABLE_NAME"];                        array_push($children,array("id"=>$table_name,"text"=>$table_name));//childer中的id,text                        $result['children']=$children;                                    }                array_push($items,$result); //(1)            }                         //echo json_encode($result);(2)            echo json_encode($items); //(3)        }}else{        echo "Connect error".mysql_connect_error($dbc);}?>


起初沒有(1) (3),如(2)般輸出,發現前台載入不出來,然後輸出後台資料仔細看了大半天才發現自己個格式是這樣的:
{"id":"tpss","text":"tpss","state":"closed","children":[{"id":"t_prekeychart","text":"t_prekeychart"}]}
跟要求個格式不一樣,最外層少了一個[....],然後想了一下加上了(1)、(3),然後測試通過了。
上截圖:



下一步就是右邊datagrid資料了。
額外補充:require('./mysql_connect/mysql_connect.php')的內容

<?php /*    在建立串連到Mysql時不選擇相應資料庫,    在其他頁面通過mysqli_select_db($dbc,db_name)選擇需要串連的資料庫    eg:    require ('./mysql_connect.php'); //相對路徑    $db_select=mysqli_select_db($dbc,'db_name');    if(!$dbc){    #coding...    }    else{        #coding...    }*/define('DB_USER','root');define('DB_PASSWORD','1234');define('DB_HOST', 'localhost');//串連$dbc=@mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD) OR die('無法串連到MySQL:'.mysqli_connect_error());//設定字元集mysqli_set_charset($dbc,'utf8');?>



執行個體二 用Jquery easyUI和 Thinkphp 實現菜單樹

需求:

資料庫有某表department表,為了是記錄部門的結構,表中包含3個主要欄位:id、parentId、name。現在要把這個記錄集有規則的樹形輸出出來。

思路:


無外乎是寫處理這個排序的問題。初步想法可以用SQL讀出然後後台排序,這麼成熟的需求肯定有代碼,所以懶的寫,但是找了幾個都不太滿意,那麼就打算從前台找一下解決方案。在前台進行排序。於是翻了幾頁Jquery easyui的文檔,發現了可以這麼解決:
1、寫一個簡單的程式,用Json輸出全部department記錄(輸出地址為http://localhost:8080/app/index.php/Department/tree)
2、在前台處理這個記錄,進行排序。代碼都是現成的。

操作:

第1步:在模版對應的xxxAction頁面中寫一個函數,主要為了輸出tree的json

public function tree(){    $subproject = M('department');    $list = $subproject->select();        echo JSON_ENCODE($list);}


第2步:把下面代碼copy到模版頁面的head中:

<script type="text/javascript">    function convert(rows){        function exists(rows, parentId){            for(var i=0; i<rows.length; i++){                if (rows[i].id == parentId) return true;            }            return false;        }                var nodes = [];        // get the top level nodes        for(var i=0; i<rows.length; i++){            var row = rows[i];            if (!exists(rows, row.parentId)){                nodes.push({                    id:row.id,                    text:row.name                });            }        }                var toDo = [];        for(var i=0; i<nodes.length; i++){            toDo.push(nodes[i]);        }        while(toDo.length){            var node = toDo.shift();    // the parent node            // get the children nodes            for(var i=0; i<rows.length; i++){                var row = rows[i];                if (row.parentId == node.id){                    var child = {id:row.id,text:row.name};                    if (node.children){                        node.children.push(child);                    } else {                        node.children = [child];                    }                    toDo.push(child);                }            }        }        return nodes;    }        $(function(){        $('#tt').tree({            url: 'http://localhost:8080/app/index.php/Department/tree',            loadFilter: function(rows){                return convert(rows);            }        });    });</script>


第三步:

模版的body裡面加一行代碼:

<ul id="tt"></ul>


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.