亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

yii框架分類樹擴展示例

2020-02-19 15:58:28
字體:
來源:轉載
供稿:網友

提供兩種方式的分類樹格式,表格和下拉框形式的樹形結構
可以自定義表格和下拉框的樣式,自定義以哪一列的參數為格式化數據,自定義層級關系參數,自定義表格列名稱,也可以設置時間的格式化。



調用方式

表格方式:


widget('ext.tree.widgets.TreeWidget',array(
??????? 'dataProvider'? => $dataProvider,?????????? // 傳遞數據
??????? 'pid'?????????? => 'pid',?????????????????? // 設置層級關系id
??????? 'tableClass'??? => 'items table table-striped table-bordered table-condensed',? // 表格樣式
??????? 'formatParam'?? => 'name',????????????????? // 設置格式化字段???
??????? 'formatTime'??? => array(?????????????????? // 設置格式化的時間參數
??????????? 'created'
??????? ),??????????????
??????? 'tableHead'???? => array(?????????????????? // 設置表格列頭信息
??????????????? '分類ID',
??????????????? '頻道',
??????????????? '中文名',
??????????????? '英文名',
??????????????? '首字母',
??????????????? '排序',
??????????????? '分類級別',
??????????????? '父ID',
??????????????? '創建時間',
??????? ),???
??? )); ?>

下拉框方式


widget('ext.tree.widgets.TreeWidget',array(
??????????? 'dataProvider'? => $cate,?????????? // 傳遞數據
??????????? 'pid'?????????? => 'pid',?????????????????? // 設置父ID???????????
??????????? 'formatParam'?? => 'name',????????????????? // 設置格式化字段
??????????? 'treeType'????? => false,?????????????????? // 輸出樹格式
??????????? 'selectClass'? => 'class="span11"',???????? // 設置下拉框樣式
???????????? 'defaultSelectValue' => array(???????????? // 設置下拉框的默認值和選項
??????????????????? 0 , '≡ 作為一級欄目 ≡'
???????????? ),
??????? )); ?>

TreeWidget.php


/*
?* To change this template, choose Tools | Templates
?* and open the template in the editor.
?*/

/**
?* Description of Tree
?*
?* @author 汪嘉誠
?* @email 819434425@qq.com
?*?
?* 表格方式調用
??? widget('ext.tree.widgets.TreeWidget',array(
??????? 'dataProvider'? => $dataProvider,?????????? // 傳遞數據
??????? 'pid'?????????? => 'pid',?????????????????? // 設置層級關系id
??????? 'tableClass'??? => 'items table table-striped table-bordered table-condensed',? // 表格樣式
??????? 'formatParam'?? => 'name',????????????????? // 設置格式化字段???
??????? 'formatTime'??? => array(?????????????????? // 設置格式化的時間參數
??????????? 'created'
??????? ),??????????????
??????? 'tableHead'???? => array(?????????????????? // 設置表格列頭信息
??????????????? '分類ID',
??????????????? '頻道',
??????????????? '中文名',
??????????????? '英文名',
??????????????? '首字母',
??????????????? '排序',
??????????????? '分類級別',
??????????????? '父ID',
??????????????? '創建時間',
??????? ),???
??? )); ?>
?*
?* 下拉框方式調用
?* widget('ext.tree.widgets.TreeWidget',array(
??????????? 'dataProvider'? => $cate,?????????? // 傳遞數據
??????????? 'pid'?????????? => 'pid',?????????????????? // 設置父ID???????????
??????????? 'formatParam'?? => 'name',????????????????? // 設置格式化字段
??????????? 'treeType'????? => false,?????????????????? // 輸出樹格式
??????????? 'selectClass'? => 'class="span11"',???????? // 設置下拉框樣式
???????????? 'defaultSelectValue' => array(???????????? // 設置下拉框的默認值和選項
??????????????????? 0 , '≡ 作為一級欄目 ≡'
???????????? ),
??????? )); ?>
?*/
class TreeWidget extends Widget {
??? /**
???? * CArrayDataProvider 數據對象或數組數據
???? * 組件數據接收參數
???? * @var Object || array
???? */
??? public $dataProvider;

??? /**
???? * 賦值接收數據
???? * @var type
???? */
??? public $arrAll = array();

??? /**
???? * 按_ID作鍵名的多維關系
???? * @var type
???? */
??? public $arrIdRelation = array();

??? /**
???? * 按_ID作鍵名的多維關系的簡化,用來輸出樹狀圖
???? * @var type
???? */
??? public $arrIdRelationSimple = array();

??? /**
???? * 將原始數據轉化成的_ID作鍵名的數組
???? * @var type
???? */
??? public $arrIdAll = array();

??? /**
???? * 所有的父子關系
???? * @var type
???? */
??? public $arrIdSon = array();

??? /**
???? * 葉子節點的_ID
???? * @var type
???? */
??? public $arrIdLeaf = array();

??? /**
???? * 根節點的_ID
???? * @var type
???? */
??? public $arrIdRoot = array();

??? /**
???? * 每個節點下的子孫后代_ID
???? * @var type
???? */
??? public $arrIdChildren = array();

??? /**
???? * 每個節點回逆到根
???? * @var type
???? */
??? public $arrIdBackPath = array();

??? /**
???? * 輸出樹的結構
???? * @var type
???? */
??? public $strItem = '
{$strSep}{$name}';

??? /**
???? * 設置表格樣式
???? * @var type
???? */
??? public $tableClass? = 'items table table-striped table-bordered table-condensed';

??? /**
???? * 數據字段參數數組
???? * @var type
???? */
??? public $dataKey?? = array();

??? /**
???? * 指定需要格式化的字段
???? * @var type
???? */
??? public $formatParam = 'name';

??? /**
???? * 表格列名稱
???? * @var type
???? */
??? public $tableHead?? = array();

??? /**
???? * 父ID
???? * @var type
???? */
??? public $pid = 'pid';

??? /**
???? * 指定樹的類型
???? * true 表格類型樹
???? * false 下拉框類型樹
???? * @var type
???? */
??? public $treeType = true;???????

??? /**
???? * 綁定下拉框value值
???? * @var type
???? */
??? public $optionValue = 'id';

??? /**
???? * 格式化時間
???? * @var type
???? */
??? public $formatTime = array();

??? /**
???? * 下拉框樣式
???? * @var type
???? */
??? public $selectClass = 'class="span3"';

??? /**
???? * 設置下拉框的默認值和選項
???? * @var type
???? */
??? public $defaultSelectValue = array(
??????? 0,'≡ 作為一級欄目 ≡',
??? );

??? /**
???? * 設置下拉框是否多選
???? * true 多選
???? * false 單選
???? * @var type
???? */
??? public $isMultiple = false;

??? /**
???? * 綁定到下拉框的默認值
???? * @var type
???? */
??? public $bindSelectValue = 0;
???

??? /**
???? * 運行
???? */
??? public function run() {???????????????
??????????? if (is_array($this->dataProvider) && count($this->dataProvider) > 0)
??????????????????? $data = $this->_run($this->dataProvider);
??????????? else if (is_object($this->dataProvider) && count($this->dataProvider->rawData) > 0)
??????????????????? $data = $this->_run($this->dataProvider->rawData);???????????????????

???????????????????????????????
??????????? $this->render('tree' , array('data'=>$data));
??? }

??? /**
???? *
???? * @return type
???? */
??? private function _run($datas){???????????
??????????? foreach ($datas as $data)
??????????????????? $this->arrAll[] = $data;
??????????????????? $this->dataKey = array_keys($data);

??????????? $this->processData();
??????????? if ($this->treeType === true)
??????????????????? $data = $this->getTable();
??????????? else
??????????????????? $data = $this->getSelect($this->pid, $this->bindSelectValue, $this->isMultiple, $this->selectClass, $this->defaultSelectValue);

??????????? return $data;
??? }

??? /**
???? * 獲得html
???? * @return type
???? */
??? public function getHtml() {
??????????? return $this->genHtml();
??? }

??? /**
???? * 設置分層字段
???? * 表格類型
???? * @return string
???? */
??? public function getItemName(){???????????
??????????? $html = '

';
??????????? foreach($this->dataKey as $v) {???????????????????
??????????????????? if ($this->formatParam == $v)
??????????????????????????? $str = '{$strSep}';
??????????????????? else
??????????????????????????? $str = '';

??????????????????? $html .= ''.$str.'{$'.$v.'}';
??????????? }
??????????? $html .= '';
??????????? return $html;
??? }

??? /**
???? * 獲取表格列名稱
???? * @return string
???? */
??? public function getTableHead(){
??????????? $html = '';
??????????? foreach($this->tableHead as $v)
??????????????????? $html .= ''.$v.'';

??????????? $html .= '';
??????????? return $html;
??? }

??? /**
???? * 獲得表格形式的樹
???? * @return string
???? */
??? public function getTable() {???????????????????
??????????? $this->strItem = $this->getItemName();
??????????? $strRe = '

';
??????????? $strRe .= ''.$this->getTableHead().'';
??????????? $strRe .= $this->genHtml();
??????????? $strRe .= '
';
??????????? return $strRe;
??? }???

??? /**
???? * 獲取下拉框形式的樹
???? * @param type $strName
???? * @param array $arrValue
???? * @param type $blmMulti
???? * @param type $strExt
???? * @param type $arrFirst
???? * @return string
???? */
??? 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]['selected'] = ' selected="selected"';
??????????????????? }
??????????? }
??????????? $this->strItem = '';
??????????? $strRe = '';???????????
??????????? return $strRe;
??? }

??? /**
???? * 數據處理
???? * @param type $arrData
???? * @return type
???? */
??? private function helpForGetRelation($arrData) {
??????????? $arrRe = array();
??????????? foreach ($arrData as $strTemp => $arrTemp) {
??????????????????? $arrRe[$strTemp] = $arrTemp;
??????????????????? if (isset($this->arrIdRelation[$strTemp])) {
??????????????????????????? $arrRe[$strTemp] = $this->arrIdRelation[$strTemp];
??????????????????? }
??????????????????? if (count($arrRe[$strTemp]) > 0) {
??????????????????????????? $arrRe[$strTemp] = $this->helpForGetRelation($arrRe[$strTemp]);
??????????????????? } else {
??????????????????????????? array_push($this->arrIdLeaf, $strTemp);
??????????????????? }
??????????? }
??????????? return $arrRe;
??? }

??? /**
???? * 數據處理
???? * @param type $arrData
???? * @return type
???? */
??? private function helpForGetChildren($arrData) {
??????????? $arrRe = array_keys($arrData);
??????????? foreach ($arrData as $arrTemp) {
??????????????????? $arrRe = array_merge($arrRe, $this->helpForGetChildren($arrTemp));
??????????? }
??????????? return $arrRe;
??? }

??? /**
???? * 數據處理
???? * @param type $str
???? * @return type
???? */
??? private function helpForGetBackPath($str) {
??????????? $arrRe = array();
??????????? $intTemp = $this->arrIdAll[$str][$this->pid];
??????????? if ($intTemp > 0) {
??????????????????? $intTemp = '_' . $intTemp;
??????????????????? array_push($arrRe, $intTemp);
??????????????????? $arrRe = array_merge($arrRe, $this->helpForGetBackPath($intTemp));
??????????? }
??????????? return $arrRe;
??? }

??? /**
???? * 數據處理
???? */
??? private function processData() {
??????????? $count = count($this->arrAll);
??????????? foreach ($this->arrAll as $arrTemp) {???????????
??????????????????? $strTemp = '_' . $arrTemp['id'];
??????????????????? $this->arrIdAll[$strTemp] = $arrTemp;
??????????????????? if ($arrTemp[$this->pid] > 0 && $count > 1) {
??????????????????????????? $strTemp_ = '_' . $arrTemp[$this->pid];
??????????????????????????? !isset($this->arrIdRelation[$strTemp_]) && $this->arrIdRelation[$strTemp_] = array();
??????????????????????????? $this->arrIdRelation[$strTemp_][$strTemp] = array();
??????????????????????????? !isset($this->arrIdSon[$strTemp_]) && $this->arrIdSon[$strTemp_] = array();
??????????????????????????? array_push($this->arrIdSon[$strTemp_], $strTemp);
??????????????????? } else {
??????????????????????????? !isset($this->arrIdRelation[$strTemp]) && $this->arrIdRelation[$strTemp] = array();
??????????????????????????? array_push($this->arrIdRoot, $strTemp);
??????????????????? }
??????????? }

??????????? $this->arrIdRelation = $this->helpForGetRelation($this->arrIdRelation);
??????????? $this->arrIdLeaf = array_unique($this->arrIdLeaf);
??????????? foreach ($this->arrIdRelation as $strTemp => $arrTemp) {
??????????????????? $this->arrIdChildren[$strTemp] = $this->helpForGetChildren($arrTemp);
??????????????????? in_array($strTemp, $this->arrIdRoot) && $this->arrIdRelationSimple[$strTemp] = $arrTemp;
??????????? }
??????????? $arrTemp = array_keys($this->arrIdAll);
??????????? foreach ($arrTemp as $strTemp) {
??????????????????? $this->arrIdBackPath[$strTemp] = $this->helpForGetBackPath($strTemp);
??????????? }
??? }

??? /**
???? * 數據處理
???? * @param type $intLen
???? * @return string
???? */
??? private function genSeparator($intLen) {
??????????? $strRe = '';
??????????? $i = 0;
??????????? while ($i ??????????????????? $strRe .= ' ' . (($i + 1 == $intLen) ? '├' : '│');
??????????????????? $i++;
??????????? }

??????????? !empty($strRe) && $strRe .= '─';
??????????? return $strRe;
??? }

??? /**
???? * 數據處理
???? * @param type $arrRelation
???? * @param type $intSep
???? * @return type
???? */
??? private function genHtml($arrRelation = null, $intSep = 0) {
??????????? $strRe = '';
??????????? null === $arrRelation && $arrRelation = $this->arrIdRelationSimple;
??????????? foreach ($arrRelation as $strKey => $arrTemp) {
??????????????????? if (count($this->arrIdAll[$strKey]) > 0) {
??????????????????????????? if (!empty($this->formatTime) && count($this->formatTime) > 0) {
??????????????????????????????????? foreach($this->formatTime as $formatTime) {
??????????????????????????????????????????? if ($this->arrIdAll[$strKey][$formatTime] > 0) {
??????????????????????????????????????????????????? $this->arrIdAll[$strKey][$formatTime] = date('Y-m-d H:i:s' , $this->arrIdAll[$strKey][$formatTime]);
??????????????????????????????????????????? }
??????????????????????????????????? }???????????????????????????????????
??????????????????????????? }

??????????????????????????? $strSep = $this->genSeparator($intSep);???????????????????????
??????????????????????????? extract($this->arrIdAll[$strKey]);
??????????????????????????? eval('$strRe .= "' . $this->strItem . '";');???????????????????????????????????????????????
??????????????????????????? count($arrTemp) > 0 && $strRe .= $this->genHtml($arrTemp, ($intSep + 1));
??????????????????? }
??????????? }???????????
??????????? return $strRe;
??? }
}
?>

tree.php





沒有找到數據.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲japanese制服美女| 亚洲精品一区av在线播放| 亚洲午夜未删减在线观看| 久久久久久久色| 欧美美女18p| 亚洲国产91精品在线观看| 欧美xxxx14xxxxx性爽| 国产一区二区三区直播精品电影| 欧美亚洲一区在线| 另类天堂视频在线观看| 91av视频在线免费观看| 国产精品海角社区在线观看| 92国产精品视频| 欧美韩国理论所午夜片917电影| 一区二区中文字幕| 国外成人在线直播| 久久视频免费观看| 日韩中文字幕精品| 国产乱人伦真实精品视频| 欧美日韩国产成人在线观看| 亚洲毛片在线观看.| 亚洲专区中文字幕| 国产精品网红直播| 国产手机视频精品| 日韩精品视频在线播放| 成人在线国产精品| 97精品一区二区视频在线观看| 亚洲精品第一国产综合精品| 亚洲黄色av网站| 欧美巨乳在线观看| 欧美整片在线观看| 国产一区二区三区高清在线观看| 欧美成人午夜激情视频| 国产成人综合精品在线| 中文字幕亚洲字幕| 国产精品美女无圣光视频| 精品调教chinesegay| 欧美日韩亚洲一区二区三区| 国产精品久久久久久久app| 国产精品国产三级国产aⅴ浪潮| 97国产suv精品一区二区62| 日韩av手机在线| 国产热re99久久6国产精品| 91九色国产在线| 欧美日产国产成人免费图片| 久久精品国产69国产精品亚洲| 亚洲日韩欧美视频一区| 欧美大片在线影院| 国产精品极品美女粉嫩高清在线| 欧美肥老妇视频| 隔壁老王国产在线精品| 欧美自拍视频在线观看| 国产美女精品免费电影| 国产成人精品av| 一本色道久久88精品综合| 色婷婷**av毛片一区| 日韩av电影在线免费播放| 精品国产福利在线| 久青草国产97香蕉在线视频| 国产精品久久久久免费a∨大胸| 欧美成人精品一区二区| 91产国在线观看动作片喷水| 亚洲日本成人网| 色一区av在线| 久久91亚洲人成电影网站| 久久久国产精彩视频美女艺术照福利| 精品美女永久免费视频| 亚洲一区二区精品| 亚洲v日韩v综合v精品v| 在线观看国产成人av片| 热久久免费视频精品| 97视频免费观看| 亚洲精品福利免费在线观看| www.亚洲一二| 国产美女扒开尿口久久久| 亚洲精品欧美日韩专区| 亚洲精品福利视频| 国产91在线播放精品91| 91美女福利视频高清| www.xxxx精品| 久久久91精品国产| 亚洲第一区在线观看| 狠狠久久五月精品中文字幕| 日韩精品久久久久久福利| 色偷偷91综合久久噜噜| 日韩亚洲精品视频| 国内伊人久久久久久网站视频| 欧美另类精品xxxx孕妇| 日本欧美国产在线| 不用播放器成人网| 欧美激情中文字幕在线| 91成人国产在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品免费久久久久久| www.亚洲一区| 日韩精品免费电影| 国产亚洲欧美日韩美女| 国产一区二区黄| 成人性生交大片免费观看嘿嘿视频| 日韩精品在线免费观看视频| 国产精品99久久99久久久二8| 亚洲人成网站免费播放| 日韩专区在线观看| 日韩免费在线播放| 欧美在线观看一区二区三区| 欧美激情小视频| 国产日产欧美a一级在线| 日韩免费在线观看视频| 精品亚洲aⅴ在线观看| 欧美影院在线播放| 亚洲国产成人精品久久| 久久精品亚洲国产| 精品视频偷偷看在线观看| 精品亚洲国产成av人片传媒| 26uuu另类亚洲欧美日本一| 91国产在线精品| 69av视频在线播放| 欧美视频在线观看免费| 91精品在线观看视频| 91免费看片网站| 亚洲乱亚洲乱妇无码| 日韩亚洲综合在线| 久久精品国产96久久久香蕉| 国产乱肥老妇国产一区二| 国产噜噜噜噜噜久久久久久久久| 亚洲美女动态图120秒| 国产脚交av在线一区二区| 亚洲第一精品久久忘忧草社区| 欧美精品一区二区三区国产精品| 色狠狠av一区二区三区香蕉蜜桃| 亚洲一级免费视频| 欧美日韩亚洲精品内裤| 最近2019中文字幕第三页视频| 亚洲精品乱码久久久久久按摩观| 欧美一级免费视频| 久久视频在线看| 日韩精品视频观看| www.色综合| 日韩午夜在线视频| 午夜精品视频在线| 亚洲香蕉av在线一区二区三区| 国产在线视频欧美| 欧美一区二粉嫩精品国产一线天| 色视频www在线播放国产成人| 欧美巨乳美女视频| 日韩电影第一页| 国产精品情侣自拍| 国产成人福利夜色影视| 欧美丰满老妇厨房牲生活| 国产亚洲aⅴaaaaaa毛片| 懂色aⅴ精品一区二区三区蜜月| 欧美午夜片欧美片在线观看| 人九九综合九九宗合| 亚洲国产精品人久久电影| 色在人av网站天堂精品| 日本三级韩国三级久久| 国产亚洲欧洲高清一区| 久久精品一区中文字幕| 日韩免费观看高清| 欧美激情久久久久久| 高清一区二区三区四区五区| 日韩av在线不卡| 91九色视频导航| 亚洲大胆人体av|