最近、無限分類ツリーについて多くの質問があったため、私自身も作成できてよかったです。これを使用して、より速く簡単にツリーを投稿することもできます。 ) データベースは 1 回のみクエリします)
これは、無制限の分類をサポートする分類リストのクラス ツリーです
分類には、「サブクラスを含む分類」と「最終分類」の両方を含めることができます。
唯一の利点は、****データベース***** クエリを 1 回実行するだけで済むことです。
見た目はあまり良くありませんが、カスタマイズおよび変更が可能です。独自の CSS を追加します
キャッシュはまだ行われていません。自分で作成できます
以下の例のディレクトリ構造は次のようになります。
|--Catagory.php
|--画像----tree.jsp
|--画像----treeopen.gif
|--画像----treeclose.gif
|--画像----line.gif
/****************tree.jsp********************/
function expand(id){
ノード = document.all('node'+id);
if(node.style.display==''){
node.style.display = 'none';
document.images('img'+id).src = imgopen;
}else{
Node.style.display = '';
document.images('img'+id).src = imgclose;
}
}
/****************カテゴリ.php********************/
define('CATAGORY_TREE_EXPEND_NONE',0);
class Catagory{
//基本的な分類データ
var $treeData = array();
//分類の ID 値を配列のキーとする、分類の階層構造配列
var $treePList = array(); // 自己分類との関係上位クラス
var $treeCList = array ();
* __image__ カテゴリ $img の前に表示される画像の名前Open または $imgClose
* __open__ カテゴリが現在展開されているかどうか
*_Inner__ サブクラス分類の表示位置
* スタイルは必要に応じて任意に変更できますが、既存の要素は削除できません
__name__
t; __inner__
$blockTpl
="images/line.gif" width="15" height="15"> ;a href="?id=__id__">< ;font color="white">__name__<
'; = '__name__';
var $js = "images/tree.js";
var $imgOpen = 'images/treeopen.gif';
var $imgClose = 'images/ツリークローズ.gif';
var $imgLine = 'images/line.gif';
var $expand = 0; var $treeStr = '';
var $currentStr = '';
/*
* 用来開始初期化、传入分类データセット
*
*param $data array()
*/
function Catagory(&$ data){
$this->_init($data);
}
function _init($tmpData){
$plevel = $clevel = $treeData = array();
foreach($tmpData as $value){
$treeData[$value['id']] = $value;
$plevel[$value['pid']][$value['id']] = 'END';
$clevel[$value['id']] = $value['pid'];
}
$this->treeData = &$treeData;
$this->treePList = &$plevel;
$this->treeCList = &$clevel;
}
/*
* 解析分类列表
*
*param $cataId int 解析対象の主分类的编号
*/
function parseNode($cataId=0){
$this->result = $this-> ;treePList[$cataId];
if($this->result==null) die("カテゴリ ID エラー");
$this->treeStr = $this->_doNode($this->result);
$this->treeStr .= $this->jsParse();
}
関数 &_doNode(&$result){
$nstr = $estr = '';
foreach($result as $key=>$value){
if(isset($this->treePList[$key])){
$result[$key] = $this->treePList[$key] ];
$inner = $this->_doNode($result[$key]);
$nstr .= $this->_parseNodeTpl($key, $inner);
}else{
$estr .= $this->_parseElementTpl($key);
}
}
return $nstr.$estr;
}
関数 &_parseNodeTpl($cataId, $inner){
$data = $this->treeData[$cataId];
$str = preg_replace(' |__id__ |', $data['id'], $this->blockTpl);
$str = preg_replace(' |__name__ |', $data['name'], $str);
$str = preg_replace(' |__image__ |', ($this->expand? $this->imgClose:$this->imgOpen), $str);
$str = preg_replace(' |__open__ |', ($this->expand?'':'none'), $str);
$str = preg_replace(' |__inner__ |', $inner, $str);
return $str;
}
関数 _parseElementTpl($cataId){
$data = $this->treeData[$cataId];
$str = preg_replace(' |__id__ |', $data['id'], $this->elementTpl);
$str = preg_replace(' |__name__ |', $data['name'], $str);
$str = preg_replace(' |__image__ |', $this->imgLine, $str);
return $str;
}
function _jsparse(){&lt; script src = "$ this-&gt; js language =" javascript "&gt;&lt;/script&gt;";
*intカテゴリの番号拡張されます
*/「 's」を使用して使用して使用して使用して使用します - - - d); treeclist [$ cataid])&& $ this-&gt; = 0){&gt; _parsecurrenttpl($ cataid); '。$ str;
現在のカテゴリへのパス
$&gt; gt;
//分类的基础データテータの样子の例:
$data = array(array('id'=>1, 'name'=>'name1', 'pid'=>0, 'order'= >1),
array('id'=>2, 'name'=>name2', 'pid'=>1, 'order'=>1),
array('id'= >3, 'name'=>'name3', 'pid'=>0, 'order'=>1),
array('id'=>4, 'name'=>'name4 ', 'pid'=>3, 'order'=>1),
array('id'=>5, 'name'=>name5', 'pid'=>6, 'order '=>1),
array('id'=>6, 'name'=>name6', 'pid'=>2, 'order'=>1),
array('id '=>7, 'name'=>'name7', 'pid'=>6, 'order'=>1),
array('id'=>8, 'name'=> 'name8', 'pid'=>3, 'order'=>1),
array('id'=>9, 'name'=>name9', 'pid'=>6, 'order'=>1),
array('id'=>10, 'name'=>name10', 'pid'=>0, 'order'=>1),
array( 'id'=>11, 'name'=>'name11', 'pid'=>10, 'order'=>1),
array('id'=>12, 'name'= >'name12', 'pid'=>10, 'order'=>1),
array('id'=>13, 'name'=>name13', 'pid'=> 10, 'order'=>1),
array('id'=>14, 'name'=>name14', 'pid'=>12, 'order'=>1),
array('id'=>15, 'name'=>name15', 'pid'=>12, 'order'=>4),
);
echo "";
$tree = new Catagory($data);
echo "
下面は当前分类的类树
";
//$tree ->setExpend(1);
$tree->parseNode(0);
//$tree->parseNode(1);
//$tree->expand(9);
echo $tree- >getTreeStr();
echo "
下は当前分类(分类的编号是9)の経路
$tree->parseCurrent(9);
echo $tree-> ;getCurrentStr();