// 找一個分類所有子分類的ID public function getChildren($catId) { // 取出所有的分類 $data = $this->select(); // 遞歸從所有的分類中挑出子分類的ID return $this->_getChildren($data, $catId, TRUE); } /** * 遞歸從數據中找子分類 */ private function _getChildren($data, $catId, $isClear = FALSE) { static $_ret = array(); // 保存找到的子分類的ID if($isClear) $_ret = array(); // 循環所有的分類找子分類 foreach ($data as $k => $v) { if($v['parent_id'] == $catId) { $_ret[] = $v['id']; // 再找這個$v的子分類 $this->_getChildren($data, $v['id']); } } return $_ret; } // 獲取樹形數據 public function getTree() { $data = $this->select(); return $this->_getTree($data); } private function _getTree($data, $parent_id=0, $level=0) { static $_ret = array(); foreach ($data as $k => $v) { if($v['parent_id'] == $parent_id) { $v['level'] = $level; // 用來標記這個分類是第幾級的 $_ret[] = $v; // 找子分類 $this->_getTree($data, $v['id'], $level+1); } } return $_ret; } protected function _before_delete(&$option) { /************** 修改原$option,把所有子分類的ID也加進來,這樣TP會一起刪除掉 *******/ // 先找出所有子分類的ID $children = $this->getChildren($option['where']['id']); $children[] = $option['where']['id']; $option['where']['id'] = array( 0 => 'IN', 1 => implode(',', $children), ); }
<form method="post" action="" name="listForm" onsubmit=""> <div class="list-div" id="listDiv"> <table cellpadding="3" cellspacing="1"> <tr> <th>分類名稱</th> <th>操作</th> </tr> <?php foreach ($data as $k => $v): ?> <tr class="tron"> <td><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></td> <td align="center"> <a href="<?php echo U('edit?id='.$v['id']); ?>">修改</a> <a onclick="return confirm('確定要刪除嗎?');" href="<?php echo U('delete?id='.$v['id']); ?>">刪除</a> </td> </tr> <?php endforeach; ?> </table> </div> </form>
