ホームページ  >  記事  >  バックエンド開発  >  PHP クラス ツリー (無制限の分類をサポート)_PHP チュートリアル

PHP クラス ツリー (無制限の分類をサポート)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:09:04786ブラウズ


最近、無限分類ツリーについて多くの質問があったため、私自身も作成できてよかったです。これを使用して、より速く簡単にツリーを投稿することもできます。 ) データベースは 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();

www.bkjia.com本当http://www.bkjia.com/PHPjc/314589.html技術記事最近、無限分類ツリーについて多くの質問があったので、私もそれを作成して、より速く簡単に実装する方法を確認することができます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。