首頁 後端開發 php教程 分享一個功能強大的yii框架的分類樹擴展

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

Jul 25, 2016 am 08:48 AM

  • 複製程式碼
    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 = '
  • 本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

    JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

    會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

    會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

    描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

    SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

    在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

    在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

    PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

    PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

    如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

    如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

    解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

    靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

    See all articles