0

いろいろ調べてみましたが、正解がわかりませんでした。

必要に応じて jsTree を生成する方法を知りたいのですが、データベースに含まれるデータからノードをロードする必要があります。データは関数によって返されます。

私の目的は、ユーザーがノードをクリックすると、スクリプトがデータベース クエリに基づいてそのノードの子のみを生成することです。

そのために、ここで見つけた多くのスクリプトを試しましたが、やりたいことと最も似ているのは次のスクリプトです。

$("#tree-cat1").jstree({

"plugins": ["themes", "json_data", "ui"],
"themes": {"theme": "classic","dots": true,"icons": true},
"json_data": {
      //root elements
    "data": [{"data":'A node',"state":'closed',"attr":{"id":'A'}}], 
    "ajax": {
        "type": 'POST',
        "data": {"action": 'getChildren'},
        "url": function (node) { 
            var nodeId = node.attr('id'); //id="A"

            return 'yuorPathTo/GetChildrenScript/' + nodeId;
        },
        "success": function (new_data) {
            //where new_data = node children 
            //e.g.: [{'data':'A1 node','attr':{'id':'A1'}}, {'data':'A2 node','attr':{'id':'A2'}}]
            return new_data;
        }
    }
}

});

それはもともとアイリッシュカから書かれました。

問題は、私がそれを機能させることができなかったことです。主な問題は、「return yuorPathTo/GetChildrenScript/」を呼び出したときに返されるデータと、そのデータの例を誰かが提供できるかどうかを知ることです。

どんな助けでも感謝します。

4

2 に答える 2

0

JSON 形式のデータが必要です。例えば:

[{"attr":{"id":"1","rel":"folder"},"data":"FolderName1","state":""},{"attr":{"id":"2","rel":"folder"},"data":"FolderName2","state":""}]

于 2012-07-27T12:38:33.197 に答える
0

さて、私はあなたが必要とするコードを書き込もうとします..

HTML には空の div#tree-cat1 があります

<div id="tree-cat1"></div>

JS で:

$("#tree-cat1").jstree({
    "plugins": ["themes", "json_data", "ui"],
    "themes": {"theme": "classic","dots": true,"icons": true},
    "json_data": {
        "ajax": {
            "type": 'POST',
            "url": 'yuorPathTo/GetChildrenScript.php',
            "data": function (n) {
                return {
                    // This is variables that send in POST to PHP script
                    "action": 'getChildren',
                    "id" : n.attr ? n.attr("id") : "A1" // A1 is most parent node. You can change it by your parent id. This string mean: if node has id - we get it's childs, but if node has not id (there is no nodes) - we get first parent node
                }

            }
        }
    }
}

たとえば、「yuorPathTo/GetChildrenScript.php」の PHP スクリプトは次のようになります。

$result = array(); // Array for json
$id=$_GET['id']*1;
// This query selects children of this parent and for each child selects count of its own children
$query = "SELECT id, name, rel, cnt FROM
   (
      SELECT id, name, rel FROM yourTabe WHERE parent_id = '$id'
   ) v_1, (
      SELECT parent_id, COUNT(*) as cnt FROM yourTable GROUP BY parent_id
   ) v_2
   WHERE v_1.id = v_2.parent_id
";
$res = $dbh->query($query);
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
    $helper = array(); // Array for each Node's Data
    $helper['attr']['id'] = 'A'.$row['id'];
    $helper['attr']['rel'] = $row['rel'];
    $helper['data']  = $row['name'];
    $helper['state'] = $row['cnt'] > 0 ? 'closed' : ''; // if state='closed' this node can be opened
    $rezult[] = $helper;
}
echo json_encode($rezult);
于 2012-07-27T18:50:32.283 に答える