jstree はとても便利なもので、4年ほど前に苦労して導入し、その後はサーバー上のコンテンツを素早く閲覧するためには私にとっては欠かせないものになっています。
linux で動いていたプログラムが windows では動かない
windows の xampp で jstree を動かそうとすると以下のようなエラーが出ます。
TypeError: k[c[o].parent.toString()] is undefined
data ディレクトリの内部を再帰的に検索して json data を作成する php は、
<?php
function list_files($dir){
$rootDir = './data/' ;
$list = array();
$files = scandir($dir);
$family = array();
foreach($files as $file){
if($file == '.' || $file == '..'){
continue;
} else if (is_file($dir . $file)){
$id = str_replace($rootDir, "", $dir . $file);
$parent = trim(str_replace($rootDir, "", $dir),'/');
if($parent==="") {$parent="#";};
$family[] = array("id"=>$id, "parent"=>$parent, "text"=>$file, 'icon' => 'jstree-file') ;
$list[] = $dir . $file;
} else if( is_dir($dir . $file) ) {
$id = str_replace($rootDir, "", $dir . $file);
$parent = trim(str_replace($rootDir, "", $dir),'/');
if($parent==="") {$parent="#";};
$family[] = array("id"=>$id, "parent"=>$parent, "text"=>$file) ;
$list[] = $dir;
$list = array_merge($list, list_files($dir . $file . DIRECTORY_SEPARATOR));
$family = array_merge($family, list_files($dir . $file . DIRECTORY_SEPARATOR));
}
}
return $family;
}
$dir = './data/' ;
$family = list_files($dir) ;
foreach($family as $key => $value){
$modified[$key] = $value["parent"];
}
array_multisort($modified, SORT_DESC, $family);
header('Content-type: application/json; charset=utf-8');
echo json_encode($family);
ちょっと調べて「DIRECTORY_SEPARATOR」に問題があるのではないかと考え、これを’/’に変更したら動きました。
windows の「DIRECTORY_SEPARATOR」は’\’なのですが、python でもこれを使うとエラーが出ることがありました。