分享一個功能強大的yii框架的分類樹擴展

WBOY
發布: 2016-07-25 08:48:14
原創
859 人瀏覽過
  • 複製程式碼
    1. /*
    2. * 若要變更此模板,請選擇「工具」|「」模板
    3. * 並在編輯器中打開模板。
    4. */
    5. /**
    6. * Description of Tree
    7. *
    8. * @author 汪嘉誠
    9. * @email 819434425@qq.com
    10. *
    11. * 傳遞的數組格式,關聯數組就可以
    12. * * array
    13. (
    14. 0 => array
    15. (
    16. 'id' => '7'
    17. 'zone' => '服裝'
    18. 'name' => '服裝'
    19. 'ename' => 'nanzhuang'
    20. 'first' => 'l'
    21. 'sort_order' => '8'
    22. 'level' => '1'
    23. 'pid' => '6'
    24. 'created' => '0'
    25. )
    26. )
    27. *
    28. * 表格方式呼叫
    29. widget('ext. tree.widgets.TreeWidget',array(
    30. 'dataProvider' => $dataProvider, // 傳遞資料
    31. 'pid' => 'pid', // 設定父ID
    32. 'tableClass' => ' items table table-striped table-bordered table-condensed', // 表格樣式
    33. 'formatParam' => 'name', // 設定格式化欄位
    34. 'formatTime' => array( // 設定格式化的時間參數
    35. 'created'
    36. ),
    37. 'action' => array(
    38. array(
    39. 'label' => '編輯', // 連結名稱
    40. 'url ' => array(
    41. 'edit' => 'Yii::app()->controller->createUrl("/manage/taosearch/createProduct")', // 產生連線
    42. ),
    43. 'urlParams' => array('id','name'), // 設定url後面需要傳遞的參數欄位
    44. ),
    45. array(
    46. 'label' => '新增', //連結名稱
    47. 'url' => array(
    48. 'add' => 'Yii::app()->controller->createUrl("/manage/taosearch/createProduct")', // 產生連線
    49. ),
    50. 'urlParams' => array('id','name'), // 設定url後面需要傳遞的參數欄位
    51. ),
    52. ),
    53. 'tableHead' = > array( // 設定表格列頭資訊
    54. '分類ID',
    55. '頻道',
    56. '中文名稱',
    57. '英文名',
    58. '首字母',
    59. '排序',
    60. '分類等級',
    61. '父ID',
    62. '建立時間',
    63. '操作',
    64. ),
    65. )); ?>
    66. *
    67. * 下拉框方式呼叫
    68. * widget('ext.tree.widgets.TreeWidget',array(
    69. 'dataProvider' => $cate, //傳遞資料
    70. 'pid' => 'pid', // 設定父ID
    71. 'formatParam' => 'name', // 設定格式化欄位
    72. 'treeType' => false, // 輸出樹狀格式
    73. 'selectClass' => 'class="span11"', // 設定下拉框樣式
    74. 'defaultSelectValue' => array( // 設定下拉方塊的預設值與選項
    75. 0 , ' ≡ 作為一階欄位≡'
    76. ),
    77. )); ?>
    78. */
    79. class TreeWidget extends Widget {
    80. /**
    81. * CArrayDataProvider 資料物件或陣列資料
    82. * 元件資料接收參數(關聯數組)
    83. * @var Object || array
    84. * /
    85. public $dataProvider;
    86. /**
    87. * 賦值接收資料
    88. * @var type
    89. */
    90. public $arrAll = array();
    91. /**
    92. * 按_ID作鍵名的多維關係
    93. * @var type
    94. */
    95. public $arrIdRelation = array();
    96. public $arrIdRelation = array();
    97. /**
    98. * 按_ID作鍵名的多維關係的簡化,用來輸出樹狀圖
    99. * @var type
    100. */
    101. public $arrIdRelationSimple = array();
    102. /**
    103. * 將原始資料轉換成的_ID作鍵名的陣列
    104. * @var type
    105. */
    106. public $arrIdAll = array();
    107. public $arrIdAll = array();
    108. /**
    109. * 所有的父子關係
    110. * @var type
    111. */
    112. public $arrIdSon = array();
    113. /**
    114. * 葉子節點的_ID
    115. * @var type
    116. */
    117. public $arrIdLeaf = array();
    118. /**
    119. * 根節點的_ID
    120. * @var type
    121. */ public $arrIdRoot = array(); /** * 每個節點下的子孫後代_ID* @var type
    122. */
    123. public $arrIdChildren = array();
    124. /**
    125. * 每個節點回逆到根
    126. * @var type
    127. */
    128. public $arrIdBackPath = array();
    129. > /**
    130. * 輸出樹的結構
    131. * @var type
    132. */
    133. public $strItem = '
      gt;{$strSep}{$name}';
    134. /**
    135. * 設定表格樣式
    136. * @var type
    137. */
    138. public $tableClass = 'items table table-striped table-bordered table-condensed';
    139. /**
    140. * 資料欄位參數陣列
    141. * @var type
    142. */
    143. public $dataKey = array();
    144. / **
    145. * 指定需要格式化的欄位
    146. * @var type
    147. */
    148. public $formatParam = 'name';
    149. /**
    150. * 表格列名稱
    151. * @var type
    152. */
    153. public $tableHead = array();
    154. / **
    155. * 父 ID
    156. * @var 型態
    157. */
    158. public $pid = 'pid';
    159. /**
    160. * 指定樹的類型
    161. * true 表格類型樹
    162. * false 下拉框類型樹
    163. * @var type
    164. */
    165. public $treeType = true;
    166. /**
    167. * 綁定下拉框value值
    168. * @var type
    169. */
    170. public $optionValue = 'id';
    171. /**
    172. * 格式化時間
    173. * @var type
    174. */
    175. public $formatTime = array();
    176. /**
    177. * 下拉框樣式
    178. * @var type
    179. */
    180. public $selectClass = 'class="span3"';
    181. /**
    182. * 設定下拉框的預設值和選項
    183. * @var type
    184. */
    185. public $defaultSelectValue = array(
    186. 0,'≡作為一級欄目≡',
    187. );
    188. /**
    189. * 設定下拉框是否多選
    190. * true 多選
    191. * false 單選
    192. * @var type
    193. */
    194. public $isMultiple = false;
    195. * 綁定到下拉框的預設值
    196. * @var type
    197. */
    198. public $isMultiple = false;
    199. /**
    200. * 操作列
    201. * @var type
    202. */
    203. public $bindSelectValue = 0;
    204. /**
    205. * 運行
    206. */
    207. public $action = array();
    208. /**
    209. * 運行
    210. * @param 型態 $datas
    211. * @return 型別
    212. */
    213. public function run() {
    214. if (is_array($this->dataProvider) && count($this->dataProvider) > 0 )
    215. $data = $this->_run($this->dataProvider);
    216. else if (is_object($this->dataProvider) && count($this->dataProvider->rawData) > 0)
    217. $data = $this->_run($this->dataProvider->rawData);
    218. $this->render('tree' , array('data'=>$data));
    219. }
    220. /**
    221. * 取得html
    222. * @return type
    223. * @param type $datas
    224. * @return 類型
    225. */
    226. private function _run($datas){
    227. foreach ($datas as $data) {
    228. if (!empty($this ->動作) && count($this->action) > 0) {
    229. foreach ($this->action as $key => $action) {
    230. $k = array_keys($ action['url']) ;
    231. $data[$k[0]] = '';
    232. }
    233. }
    234. $this->arrAll[] = $data;
    235. $this->dataKey = array_keys( $數據);
    236. }
    237. $this->processData();
    238. if ($this->treeType === true)
    239. $data = $this->getTable ();
    240. else
    241. $data = $this->getSelect($this->pid, $this->bindSelectValue, $this->isMultiple, $this->selectClass, $this ->defaultSelectValue);
    242. return $data;
    243. }
    244. /**
    245. * 設定分層欄位
    246. * 表格類型
    247. * @return string
    248. */
    249. public function getHtml() { return $this->genHtml(); /***/ public function getItemName(){ $html = '
  • '; foreach ($this->dataKey as $v) { if ($this->formatParam == $v) $str = '{$strSep}'; else $str = ''; $html 。 = ''; } $html .= ''; 回傳$html ; }
  • /**
  • * 取得表格列名稱
  • * @return string
  • */
  • public function getTableHead(){
  • $html = '
  • ';
  • foreach($this->tableHead as $v )
  • $html .= '
  • ';
  • $html .= '
  • ';
  • return $html ;
  • }
  • /**
  • * 取得表格形式的樹
  • * @return string
  • */
  • public function getTable() {
  • $this->strItem = $this->getItemName();
  • $strRe = 'tableClass.'">';
  • $strRe .= '
  • '.$this->getTableHead().'';
  • $strRe .= $this->genHtml();
  • $strRe .= '
  • 提供兩種方式的分類樹格式,表格和下拉框形式的樹形結構
    可以自訂表格和下拉框的樣式,自訂以哪一列的參數為格式化數據,自訂層級關係參數,自定義表格列名稱,也可以設定時間的格式化。
    這一切都可以幫你自動搞定,如果大家覺得好,別忘了點個讚呦... 分享一個功能強大的yii框架的分類樹擴展 分享一個功能強大的yii框架的分類樹擴展
    1. 呼叫方式
    2. 表格方式呼叫
    3. widget('ext.tree.widgets.TreeWidget',array(
    4. 'dataProvider' => $dataProvider, // 傳遞資料
    5. 'pid' => 'pid', // 設定父ID
    6. 'tableClass' => 'items table table-striped table-bordered table-condensed', //表格樣式
    7. 'formatParam' => 'name', // 設定格式化欄位
    8. 'formatTime' => array( // 設定格式化的時間參數
    9. 'created'
    10. ),
    11. 'action' => array(
    12. array(
    13. 'label' => '編輯', // 連結名稱
    14. 'url' => array(
    15. 'edit' => 'Yii ::app()->controller->createUrl("/manage/taosearch/createProduct")', // 產生連線
    16. ),
    17. 'urlParams' => array('id','name') , // 設定url後面需要傳遞的參數欄位
    18. ),
    19. array(
    20. 'label' => '新增', // 連結名稱
    21. 'url' => array(
    22. 'add' => 'Yii::app()->controller->createUrl("/manage/taosearch/createProduct")', // 產生連線
    23. ),
    24. 'urlParams' => array(' id','name'), // 設定url後面需要傳遞的參數欄位
    25. ),
    26. ),
    27. 'tableHead' => array( // 設定表格列頭資訊
    28. '分類ID',
    29. '頻道',
    30. '中文名',
    31. '英文名',
    32. '首字母',
    33. '排序',
    34. '分類等級',
    35. '父ID',
    36. '創建時間',
    37. '操作',
    38. ),
    39. )); ?>
    40. 下拉框方式
    41. widget('ext.tree.widgets.TreeWidget',array(
    42. 'dataProvider' => $cate, // 傳遞資料
    43. 'pid' => 'pid', // 設定父ID
    44. 'formatParam' => 'name', // 設定格式化欄位
    45. 'treeType' => false, // 輸出樹格式
    46. 'selectClass' => 'class="span11"', / / 設定下拉框樣式
    47. 'defaultSelectValue' => array( // 設定下拉框的預設值與選項
    48. 0 , '≡ 作為一級欄位≡'
    49. ),
    50. )); ? >
    複製程式碼
    找不到資料.
    '.$str.'{$'.$v.'}
    '.$v.'
    ';
  • 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 = 'optionValue.'}"{$selected} title="{$'.$ this->formatParam.'}">{$strSep}{$'.$this-> ;formatParam.'}';
  • $strRe = '
  • 來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板