簡単なオリジナルデータを渡すだけで、N種類のノード間の関係を導き出し、ツリー状のDOMを出力できます 注: git.oschina.net の最新コードを参照してください ([ソース コード ソース] リンクをクリックします)。
- /**
- * 出力無制限の分類、私は自分で書きました~
- *
- * @author binny_w@qq.com
- * @since 2013-09-24 AM
- */
- /*使用例*/
- /*
- $arrAll = array(
- array('id' => 1, 'name' => '列分類_1', '名前_en' => 'cat_1', 'parent_id' => 0),
- array('id' => 2, '名前' => '列分類_2', '名前_en' = > 'cat_2', 'parent_id' => 0),
- array('id' => 3, 'name' => '列分類_3', 'name_en' => ' cat_3', 'parent_id' => 1),
- array('id' => 4, 'name' => '列分類_4', 'name_en' => 'cat_4', 'parent_id' = > 1),
- array( 'id' => 5, 'name' => '列分類_5', 'name_en' => 'cat_5', 'parent_id' => 2),
- 配列 ('id' => 6, ' name' => '列分類_6', 'name_en' => 'cat_6', 'parent_id' => 4),
- array('id' => 7, 'name' => '列分類_7' , 'name_en' => 'cat_7', 'parent_id' => 6),
- array('id' => 8, 'name' => '列分類_8', 'name_en' => 'cat_8 ', 'parent_id' => 7),
- array('id' => 9, 'name' => '列分類_9' , 'name_en' => 'cat_9', 'parent_id' => 6 )
- );
- $objT = new TreeList($arrAll);
- print_r($objT->arrAll);
- print_r($objT->arrIdAll);
- print_r($objT->arrIdChildren);
- print_r ($objT->arrIdSon);
- print_r($objT->arrIdLeaf);
- print_r($objT->arrIdRelation);
- print_r($objT->arrIdRelationSimple);
- print_r($objT->gt; arrIdRoot);
- print_r($objT->arrIdBackPath);
- print($objT->getTable());
- print($objT ->getSelect('cat', array(1, 8), true) );
- */
- // !define('IN_FRAME') && die('404 Page');
- class TreeList {
-
- /* *
- * 考えられるすべてのデータを分析します
- */
- public $arrAll = array(); // オリジナルdata
- public $arrIdRelation = array(); // _ID をキー名とする多次元リレーションシップ
- public $arrIdRelationSimple = array(); // _ID をキー名とする多次元リレーションシップの簡略化、ツリー図の出力に使用されます
- public $arrIdAll = array(); // 元のデータをキー名として配列に変換します
- public $arrIdSon = array() // すべての親子関係
- public $arrIdLeaf = array();リーフノード
- public $arrIdRoot = array(); // ルートノードの _ID
- public $arrIdChildren = array(); // 各ノードの子孫 ID
- public $arrIdBackPath = array(); // 各ノードは、 root
- public $strItem = '
{$strSep}{$name}'; / / ツリーの構造を出力します
-
- /**
- *コンストラクター、元のデータを渡します
- */
- public function __construct($arrData) {
- $this->arrAll = $arrData;
- $this->processData();
- }
-
- / **
- * シンプルなツリー
- */
- public function getHtml() {
- return $this->genHtml() ;
- }
-
- /**
- * テーブルを使用して木を描画します
- */
- public function getTable() {
- $this-> strItem = '
{$strSep}{$name} | {$name} | {$name_en} | ';
- $strRe = '
';
- $strRe .= '< tr>
構造 | 英語名 | ';
- $strRe .= $this->genHtml();
- $strRe .= '
';
- return $strRe;
- }
-
- /* *
- * ドロップダウンボックスに表示します
- * 例:
- * $objTreeList->getSelect('parent_id', 0, false, 'class="span5"', array(0, '≡ 第一レベルの列として) ≡'))))
- */
- public function getSelect($strName = 'tree', $arrValue = array(), $ blmMulti = false, $strExt = '', $arrFirst = null) {
- !is_array($arrValue) && $arrValue = array($arrValue);
- foreach ($this->arrIdAll as $strTemp => $arrTemp ) {
- $this->arrIdAll[$strTemp]['selected'] = '';
- if (in_array($arrTemp['id'], $arrValue)) {
- $this->arrIdAll[$strTemp] ]['選択済み'] = ' 選択済み=選択済み"';
- }
- }
- $this->strItem = '' ;
- $strRe = '
- if (is_array($arrFirst) && count($) arrFirst) == 2) {
- $strRe .= '
- }
- }
- return $strRe;
- }
- }
-
コードをコピー
|